先日、次世代メールプラットフォームInboxが発表されましたね。以前、メールを扱ったアプリをつくろうと思いましたが、IMAPなどの仕様にハマって断念したことがあり、これは、と思い期待しているので早速試してみました。
開発の理由がクールですね。
GrinichはInboxを開発の狙いについて、「私はMITでメールのツールについて論文を書いたときにメール・アプリの開発がいかに難しいか気づいた。その根本的な原因は、IMAP、MIME、文字のエンコードといったインフラにあった。Inboxはそうした問題をデベロッパーに代わって解決する」
DropboxのOBらが次世代メールのプラットフォーム、Inboxを発表―Gmail APIに似ているが汎用 - TechCrunch
inboxとは?
inboxは、古い仕様で作られたIMAPメールを簡単に扱うためのラッパーです。inboxはREST APIに対応しており、メールデータを取得、修正、送信といったことが簡単にできます。また、レスポンスは全てJSONなので、扱いやすいです。
現在のステータス(2014/7/10時点)
Inbox SDK(JavaScript版とiOS版)を利用したデモ・アプリがいくつかGitHubで公開されています。また、開発者向けに、Sync Engineが公開されており、これをローカル開発環境で立ち上げて、開発を始めることが出来ます。(将来的には、Sync Engineはinboxによってホストされる予定)
そこで!
今日はこの、Sync Engineをローカルで立ち上げて、APIを叩いてみる、というところまでやってみたいと思います。
ざっとした流れとしては、GitHubにアップされている、Sync Engineをローカルに持ってきて、それをVagrantで立ち上げることができるので、Vagrantで立ち上げて、初期設定後、自分のGmailアカウントと同期し、apiの口を開けて、curlで叩いてみる、という流れです。
手順
Install VirtualBox
VirtualBoxが入っていない人は入れましょう。
Install Vagrant
Vagrantってなんぞや、という人は http://dev.classmethod.jp/server-side/virtual-box-vagrant/
Install Inbox
git clone git@github.com:inboxapp/inbox.git
とりあえず、デスクトップでやりました。
cd inbox # inboxって何かと使う名前なので困りますよね。
vagrant up # Vagrantを立ち上げて。
vagrant ssh # Ubuntuにつながります。
cd /vagrant # sshしたら、ルートにvagrantフォルダがいるので移動。
bin/inbox-start
Sync Engineが立ち上がるのか・・・な。フォアグラウンドで起動します。ログが見たかったので、別タブでもう一つVagrantを立ち上げました。別タブで
cd inbox
vagrant ssh
cd /vagrant
bin/inbox-auth [YOUR_ACCOUNT]@gmail.com
同期したいメールアドレスを入力します。すると、「To authorize Inbox, visit this url and follow the directions:」というレスポンスが返ってくるので、それ以下のURLをブラウザで立ち上げます。するとGoogleの認証画面が立ち上がるので、承認します。すると認証コードが表示されるのでそれをコピー。コマンドラインの「Enter authorization code:」のところに貼り付けて返してあげます。すると認証が完了します。Googleアカウントのパスワードじゃないことに注意です。
bin/inbox-sync start [YOUR_ACCOUNT]@gmail.com
これをすると、inboxとauthしたGmailの同期が開始されます。「Note that an initial sync can take quite a while depending on how much mail you have.」と書かれているように、最初の同期は時間がかかるようです。自分は60000通ほどありましたが、45分で5000通くらいです(その間にこれを書いています。)APIのテストをする上ではもう次に進んで問題ないので、放置プレイで行きましょう。
bin/inbox-api
これでAPIの口が開きます。
curl http://localhost:5555/n/
さあ・・・叩いてみると、
[
{
"account": "hogehogehoge",
"email_address": "hogehoge@gmail.com",
"id": "hogehogehogehoge",
"namespace": "hogehogehogehoge",
"object": "namepace",
"provider": "gmail"
}
]
とJSONでレスポンスが返ってきましたよ!ヮ(゚д゚)ォ!このnamespaceというのが認証したアカウントを識別するものとなります。
あとは、APIのレファレンス通りに叩いてみると・・・
curl http://localhost:5555/n/<namespace>/tags
[
{
"id": "replied",
"name": "replied",
"namespace": "hogehogehoge",
"object": "tag"
},
{
"id": "all",
"name": "all",
"namespace": "hogehogehoge",
"object": "tag"
},
{
"id": "sent",
"name": "sent",
"namespace": "hogehogehoge",
"object": "tag"
},
{
"id": "inbox",
"name": "inbox",
"namespace": "hogehogehoge",
"object": "tag"
}...
]
tagの一覧が取れたり・・・メッセージを取得できたり、送信したりと色々なことができます。
楽しみですね!