ついに出ましたね。最強のメモツールEvernoteのAPI。

けっこう前から2008年夏にAPIリリース予定という情報はあったのだけど、夏を過ぎてもなかなか出ないのでEvernoteはオーストラリアで開発されてるんじゃないかと悶々としながら待ってた甲斐があった。

Evernoteいいですよ

Evernoteがどんなメモツールかについては色々なところで語られているのでここでは割愛するけど、自分がここ半年間のうち試した色々なツールの中でも、自分の知的生産作業に対して最も大きなインパクトがあったツールの一つだと思う。MSRでインターンしてた頃から使ってたのだけど、使用感とか、同期の具合とか、インターフェースとかが的確にツボを突いているのでひどく気に入ってしまい、今では、論文管理、ブックマーク、Webクリッピング、ミーティングや講演・学会発表メモ、読書メモ、チェックリスト(レバレッジ本田直之さんの「習慣チェックリスト」に近い)、日記などを含めて全てまとめてEvernote上で管理するようになってしまった。”Remember everything”とはよく言ったものである。

そんな感じで調子こいてメモを作成しまくっていたので、今では1200件以上のメモが溜まってしまったわけで、これだけ情報がたまるとこのツールを自分でハックしたいと思うのが自然な流れだと思う。Evernoteに溜まってるメモ自体が自分の「知的生産ログ」みたいなものなので、自分の知ってる自然言語処理技術使っていろいろ遊んだらきっと楽しくさらに実用的に決まってる。例えばEvernoteではタグ付けてメモを管理できるが、メモの内容(や欲を言えばそのリンク先まで含めた内容)を基にして自動クラスタリングして可視化できたら便利に間違いない。曖昧+関連検索などを絡めてキーワード検索をもっと賢くしても良いと思う。今のWindowsクライアントに付いている検索ボックスは動作が怪しく、せめて日本語をちゃんと扱えるようにもしたい。などなど。

Evernoteには一応メモのエクスポートが付いてるが、内容ダンプみたいなものでXMLをせっせとパースしなければいけないし、これをハックするのは何かが違う気がする。そこでAPIを使ってスマートに直接サーバーのDBに問い合わせできれば嬉しい。

APIを使うまで

API情報はだいたいこのページにあるのでひとまず読んでみましょう。

Evernote API Overview | Evernote Corporation
http://evernote.com/about/developer/api/

API keyの発行は、よくAPIサービスにありがちなように、申請すると自動で発行してくれるようなものではなくて、フォームから直接サポートへ問い合わせる必要がある。どちらかというと、ユーザーに一般公開しているというよりは、サードパーティーにクライアント作成用のSDKを配布しているノリに近い。上のページのリンクをたどっていくとこのフォームにたどり着く。リンクミスではない。

Evernote Support | Evernote Corporation
http://evernote.com/about/contact/support/?application=Other&summary=API+Key+Request#inquiry

ここに「すごく・・・API Key欲しいです・・・」の旨を書いて問い合わせ。1営業日ぐらいでメールで返事が来る。このあたりのプロセスは既に経験した方がいらっしゃるようだけど、どうやら簡単にはAPI Keyを発行してくれない様子。自分の場合、最終的には

- 名前
- 使用目的
- 組織名(ユーザーがアプリを認証するときに表示される)
- 必要なアクセス権限(書き込み/読み込み/両方)

を聞かれてそれに丁寧に答えたらそのさらに1営業日後ぐらいOKがもらえ、API-KeyとAPIを試せるSandboxのURLをメールで連絡してもえる。このあたりの情報は最初から問い合わせフォームに書いておけば一発で済むかもしれない。

APIからのアクセスはSandbox上で全て行い、そこで自作アプリを十分に試して、もうOKなら向こうに伝えれば本システムのほうでもAPI-Keyが使えるようにアクティベートしてもらえるとのこと。Sandboxのほうは 画像認識システムが別になっていて、本システムよりも遅いかもしれない、らしい。Sandbox上にWebからアクセスしてアカウントを登録すればAPIを使う準備はOK。今ではサーバーもちゃんと動いてるようだ。

APIを使ってみる

EvernoteのAPI は 「Thrift」 によるRPCで実装されてるらしい。Thriftはこれまで使ったことなかったけどこれは面白そうなフレームワークだ。Thrift自体についての解説はnaoyaさんのこのあたり↓が分かりやすくて(というか「分かった気になって」)良かった。Thrift使うのが初めての場合一度目を通しておくとよい。

Kansai.pm#10 での発表資料 (Thrift について)
http://d.hatena.ne.jp/naoya/20080810/1218372988

あとは、APIのメインページからAPIのドキュメント、ライブラリ、サンプルなどをダウンロードしてくればすぐに使える。自分が動かしたのはsample/rubyに入ってるサンプルで、ちょっと面倒な(といってもずいぶんとラップされて簡単になってる) Thrift の認証プロセスが既に書いてあって、そこからノートのタイトルと内容を入力させてサーバー上にノートを新規作成するサンプルが続く。サンプルは、変数名やそもそもメソッド名などがちゃんとしてるのでコメント無くても何やってるか完全に分かるし、ここからはThriftのRPCをRuby(もしくはその他の言語)にマップしてやれば簡単に問い合わせることができる。例えば、今現在のnotebookのメモのタイトルを列挙するコードをこんな感じに書いてみた。

filter = Evernote::EDAM::NoteStore::NoteFilter.new()
filter.order = Evernote::EDAM::Type::NoteSortOrder::UPDATED
filter.ascending = true

notes = noteStore.findNotes(authToken, filter, 0, 100)
notes.notes.each{|note|
  puts note.title
}

APIのリファレンスはこちら。試す前にみたときに「これはどの言語のリファレンス?」とか思ったのだが、Thrift使うとインターフェースが統一されるからこういう風に言語非依存なドキュメントが半自動生成できるんだろう。こりゃ便利そうだ。

Evernote API: All Thrift declarations
http://www.evernote.com/about/developer/api/ref/

API使っていて詰まったらフォーラムをチェックするとよさげ。


Evernote User Forum View forum - Evernote for Developers
http://forum.evernote.com/phpbb/viewforum.php?f=43

ここで公開してるAPIは基本的にWindows/Mac OS/iPhone/etc. で動いてるEvernoteクライアントが裏で叩いてるのと同じもののようなので、やる気と根気さえあればこのクライアント達を超えるような使いやすいツールを作ることも可能。こうなるとEvernoteというのは単なるメモツールなんかじゃなくて、ちょっと賢いOCRエンジンの付随したオンライン・データベースなんじゃないかと思えてきて、実際そうなんだけど、Google Baseみたいに何ができるか分かんないような形で始めるよりも、身近なメモツールとして始めて実は何でも共有出来ますよというのは上手い攻め方かもと思った。

まだまだ日本語の情報が少ないけど、APIの登場できっとこれから伸びるツールだと思う。