Remember The Milk でタスク管理をする
Python Hack-a-thon 2011.02 : ATND に参加してきました。会場に到着したら受け付けで id:rokujyouhitoma と出会ったので、その流れ *1 で Remember The Milk: Online to-do list and task management に自分のタスクリストを移行することに決めました。これまでは シンプルな目標管理ツール | check*pad.jp というサービスを使っていました。私の用途なら機能的にも十分でシンプルな UI が気に入っていました。とはいえ、RTM は開発が活発な著名サービスなので使ってみたいという気持ちもありました。
RTM の特徴としては以下のような機能があります。
- Gmail/Gears/iGoogle Gadget 連携
- MS Outlook 連携
- Twitter 連携
- Atom/RSS Feeds
- iCalendar
- メールによるインポート機能
- タスクの公開・共有・リマインダ・優先度・期限・位置情報といった設定機能
- (有償)スマートフォンのネイティブアプリ対応(iPhone/iPod touch/Android/BlackBerry/Windows Mobile)
- (有償)同期機能
- (有償)プレリリースバージョンのテスター
機能的なものを見る限りは凄いですね。他のサービスやフォーマットの連携サービスが充実しているというのはユーザ層の多様さが伺えます。プレリリースバージョンのテスターになるのが有償というのは、それだけファンが多いという表れでしょうか。お金払ってテスターになるというのは珍しいなと思いました。
データを移行する
ファイル取り込み機能はないように見えるので移行はメールで行うのが良さそうです。設定画面からタスクインポート用のメールアドレスを確認します。
メールからタスクをインポートする方法 によると、件名がタスクリスト名になり、本文の行がタスクアイテムになります。
ちゃんと取り込めました。
以下、メールのインポートに関して試してみて分かったことです。
- メールの件名に存在しないタスクリストを指定すると受信箱にインポートされる
- メールでインポートできる最大件数は50件まで、それ以降は無視される
追記 2011/2/24
Smart Add という仕組みがあり、タスクの追加時に期日やタグ等を一緒に登録することができます。1行でささっと書けます。
- タスクアイテムに 2011/2/20 や明日といった日付を入れると期日をセットできる
日付フォーマットは自由度が高い 2011/2/24 但し、タスク名に日付を使うと自動的に期日がセットされてしまう? 明日
- タスクアイテムに !1 といったフォーマットで優先度を設定できる
優先度の範囲は 1 - 3 までセットできる !1
- タスクアイテムに #list や #tag といったフォーマットでリスト、またはタグをセットできる
リストがあればリストと解釈? #list リストになければタグと解釈? #tag
- タスクアイテムに @ここ といったフォーマットで場所をセットできる
本を読む @図書館
- タスクアイテムに *weekly といったフォーマットで繰り返しタスクをセットできる
英語ニュースを聞く *daily
- タスクアイテムに =10min といったフォーマットで予測時間をセットできる
ブログを書く =30min
- タスクアイテムに URL を書くと URL をセットできる
forest book http://d.hatena.ne.jp/t2y-1979/
もちろん、これらの構文は組み合わせて使うこともできるのでとても便利ですね。
RTM クライアントを使う
タスクのインポートができました。この機にタスクリストも統廃合して整理しました。タスクページを表示するとこんな感じになりました。
何だかリスト名のタブが溢れかえって、もっさりした残念な雰囲気を醸し出してます。「おめー、どんだけタスクを抱え込んでんだよっ!」て感じです。言い訳をさせてください。私の用途としては、備忘録の代わりに使ったり、ちょっとしたコマンドのオプションやシェルスクリプトのワンライナーを書き込んでいたり、パッと思い付いたアイディアやキーワードを寝かしておくのにも使ったりしています。RTM が意図する使い方としては、私のような用途にはタグで整理するのが正しい使い方のような気がします。例えば、開発というリストを作成して、開発に関するタスクを登録しながら [python] とか [shell] といったタグをタスク単位に付けていきます。そして、絞り込みたいときにタグで検索するというのがこの UI の意図した使用方法かなと思いました。
さらに RTM は多機能なのですが、私はあまり期限とか優先度とか設定しませんし、ボタンとかドロップダウンリストとかタブとか、あちこちにたくさん付いてて目移りしそうです。私の用途としては、ただアイテムのみを追加・削除して、グループ化できれば良いのでもっとシンプルな UI が望ましいです。
そこで
remember the milk client
でググると、たくさんデスクトップクライアントが出てきます。
Mac OS X 専用のようですが を使ってみることにしました。
ドロップダウンリストからリスト名を選択すると、タスクアイテムが表示されます。チェックするとすぐに完了扱いになるので1回のクリックで操作が済みます。不要なタブやボタンがなくて UI がシンプルで良いです。タスクの追加や期限の設定がメニューバーからしか設定できないのが唯一の欠点ですが、ショートカットキーを覚えれば気にならないでしょう。
Time Zone の設定がないせいか、期限を設定すると日付がずれてしまっています。上の画面イメージの期限は Today で設定したのに "yesterday" と表示されています。
余談ですが、よく更新処理を行うときに「本当に更新しますか? はい いいえ」といった画面が出てくることがあります。あの責任逃れ過保護確認画面は、操作の重要度に応じて出せば良いと私は思います。例えば、データを完全削除するような処理は確認画面があった方が良いと思いますが、タスクの完了更新のような、間違ったとしても後から元に戻せるような処理に確認画面なんて不要だと思います。タスクの更新処理において、98% は正しい操作をするのに 2% の失敗を防ぐためにわざわざ2回クリックするとか面倒だなと思います。MilkMaid は確認画面が出てこないのでそんな煩わしさがありません。
Dock にも選択しているタスクリストのタスク数が表示されます。こういうちょっとした配慮も良いですね。
Python から RTM の API を使う
自分の気に入るクライアントがなくても大丈夫です。RTM の API が提供されているので、自分専用のクライアントを作ることもできます。但し、API はまだベータレベルだからと注意事項があります。
API は今のところ ベータ レベルです。まだまだテスト中であり、追加機能も実装している状況です。そのため、平均1秒につき1リクエスト に留めてください。私たちは API キーを捕捉していて、あまりにもリソースを消費する場合はその API キーの制限を行う(もしくは完全にブロックする)こともあります。
Remember The Milk - Services / API
各種言語のツールも(おそらく有志で)提供されています。Python なら pyrtm があります。pyrtm を使って RTM の API を呼び出してみましょう。
まず API を使う前に API キーを入手する必要があります。
Remember The Milk - Services / API / API Keys から非商用、もしくは商用の API キーを入手します。商用の API キーを入手するには RTM とパートナー契約のようなものが必要なようです。個人なので非商用の API キーを入手します。登録すると、メールで API キーと共有鍵が送られてきます。
YOUR KEY
Your api_key is: xxx
Your shared secret is: yyy
pyrtm をインストールして、テストのためのサンプルアプリケーションをダウンロードします。
$ easy_install pyrtm $ wget https://bitbucket.org/t2y/pyrtm/raw/e8e434086c94/app.py
ダウンロードしたサンプルアプリケーションを実行してトークン(パスワードのようなもの)を入手します。
$ python app.py [API KEY] [SHARED SECRET] No token found Give me access here: http://www.rememberthemilk.com/services/auth/?perms=delete&frob=&api_key=&api_sig= Press enter once you gave access
ここで処理が中断されるので、出力されている URL へアクセスすると、API KEY の認証が行われます。
トークンがターミナルに出力されているので、次回からはこのトークンを使うことで手動で認証する必要がなくなります。
Note down this token for future use: [TOKEN]
いま入手したトークンをコマンドライン引数に指定して実行してみます。
$ python app.py [API_KEY] [SHARED SECRET] [TOKEN]
期限が1週間以内のタスクリストが表示されれば成功です。
また、このサンプルアプリケーションを実行していて遭遇した不具合を修正して開発者の Sridhar Ratnakumar へ連絡してみたところ、こんな感じの返信を頂きました。
ありがとう。私は pyrtm をメンテする余裕がないかもしれない。あんたが(公式に)やる気はあるかい?
と聞かれたので、
興味あるよ。良かったら buildout で環境整備したり、テストコードぐらいは書けるよ。
と返したらコミッタにしてくれました。pyrtm のドキュメントもほとんどなくて使い方がよく分からないし、使い方の勉強も兼ねてがんばるかなー。