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

先日、次世代メールプラットフォームInboxが発表されましたね。以前、メールを扱ったアプリをつくろうと思いましたが、IMAPなどの仕様にハマって断念したことがあり、これは、と思い期待しているので早速試してみました。

- 公式サイト　https://www.inboxapp.com/

開発の理由がクールですね。

> GrinichはInboxを開発の狙いについて、「私はMITでメールのツールについて論文を書いたときにメール・アプリの開発がいかに難しいか気づいた。その根本的な原因は、IMAP、MIME、文字のエンコードといったインフラにあった。Inboxはそうした問題をデベロッパーに代わって解決する」
> [DropboxのOBらが次世代メールのプラットフォーム、Inboxを発表―Gmail APIに似ているが汎用 - TechCrunch](http://jp.techcrunch.com/2014/07/08/20140707mit-and-dropbox-alums-launch-inbox-a-next-generation-email-platform/)

# 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

```bash
git clone git@github.com:inboxapp/inbox.git
```

とりあえず、デスクトップでやりました。

```bash
cd inbox     # inboxって何かと使う名前なので困りますよね。
vagrant up   # Vagrantを立ち上げて。
vagrant ssh  # Ubuntuにつながります。
cd /vagrant  # sshしたら、ルートにvagrantフォルダがいるので移動。
bin/inbox-start
```

Sync Engineが立ち上がるのか・・・な。フォアグラウンドで起動します。ログが見たかったので、別タブでもう一つVagrantを立ち上げました。別タブで

```bash
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アカウントのパスワードじゃないことに注意です。

```bash
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のテストをする上ではもう次に進んで問題ないので、放置プレイで行きましょう。

```bash
bin/inbox-api
```

これでAPIの口が開きます。

```bash
curl http://localhost:5555/n/
```

さあ・・・叩いてみると、

```json
[
    {
        "account": "hogehogehoge",
        "email_address": "hogehoge@gmail.com",
        "id": "hogehogehogehoge",
        "namespace": "hogehogehogehoge",
        "object": "namepace",
        "provider": "gmail"
    }
]
```

とJSONでレスポンスが返ってきましたよ！ヮ(ﾟдﾟ)ォ!このnamespaceというのが認証したアカウントを識別するものとなります。

あとは、APIのレファレンス通りに叩いてみると・・・

```bash
curl http://localhost:5555/n/<namespace>/tags
```

```json
[
    {
        "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の一覧が取れたり・・・メッセージを取得できたり、送信したりと色々なことができます。

楽しみですね！