Edited at

次世代メールプラットフォームInboxを試してみた。

More than 5 years have passed since last update.

先日、次世代メールプラットフォーム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の一覧が取れたり・・・メッセージを取得できたり、送信したりと色々なことができます。

楽しみですね!