超シンプルにメールの検索・整理・作成を行なうAPI「Nylas」


ここ最近、訳あってメールをごにょごにょするツールを書きたいなと思っていたのですが「そういえばInboxというサービスがあったかな」と思い出しました。Qiitaではこの記事を読んだ記憶があります。
http://qiita.com/fuji_syan/items/1a5e1b31e81072555381

これがあれば捗りそうだ！！ということで久々に見てみたら、ますます開発者を喜ばせるようなシンプルで良い感じになっていました！！

[Nylas - The next-generation email platform.](https://nylas.com/)
「Inbox」改め「Nylas」。
どうやら、名前も変わっているようですね。
=> https://www.facebook.com/InboxApp/posts/766564590084424

## 0, Nylasって何？

> Nylas brings email into the 21st century with modern tools, RESTful developer APIs, and open source code.

とのことです。
つまり「メールごにょごにょするの面倒くさく無い？」という怠惰に基づき、「それ全部RESTなやりとりでどうにかしようぜ！！」というお話でしょうか。
メール等の色々なサービスへの接続や操作をラップする、開発者向けのサービスですかね。

実際に見てみる方が早いので、早速触ってみます。

## 1, 新規アカウント登録
https://developer.nylas.com/register から。画面まま。
フォーム送信後、確認メールが届くのでメール中の認証URLをクリックしましょう。

![新規登録画面](https://qiita-image-store.s3.amazonaws.com/0/941/8da6ad3b-0007-6101-a594-49b1329a01d3.png "スクリーンショット 2016-02-06 14.03.20.png")


## 2. はろーせかい

ドキュメントこちら。
https://www.nylas.com/docs/platform

改めてWelcomeを読んでみると、「IMAPだとかMIMEだとか関係ねぇ、 GET, PUT, POST, and DELETEで全部やろうぜ！そして UTF-8 encoded JSON objectsだ！！」というような事が書いてありました。JSON最高ですね。

それが済んだら、次は「Authentication」というセクションがあります。もちろん、認証方式は OAuthです。
ではアカウントを認証しましょう！

・・と思ったら、「アクセストークンすぐ欲しい？」なんて事が書いてある。
なんと、自分のメールアカウント(=ログイン情報を持っているアドレス)であれば管理画面からすぐに発行できるやり方を用意してあるよ、とのことです。

まず[トップページ右上](https://www.nylas.com/)からログインします。
ログイン後、「console」画面に飛びますので、その中にある「Accounts」タブをクリックしてください。

![スクリーンショット 2016-02-06 14.19.48.png](https://qiita-image-store.s3.amazonaws.com/0/941/a7daa7a8-949e-9a7b-872d-5cf4452c60ff.png "スクリーンショット 2016-02-06 14.19.48.png")

中央部の「Sync an Account」をクリックするとメールサービスのアカウント認証画面が開きますので、内容を確認してログイン。
コールバック後、そのままトークンが表示されますのでそれをメモ(※ __トークンの表示はワンタイムっぽく、1度ページを離れるなどして消えると再確認ができなくなので注意。__もしかしたら、他に確認できる画面があるのかもしれませんが・・・)。

アカウント認証は以上です。このおかげで、面倒くさいことを全部すっとばしてサービスに触れますね！！
この辺りに、開発者の徹底した「面倒くさいことを端折る」という気概を感じます。

## 3, いよいよサービスを叩いてみる

トークンがとれたので、次はサービスの実体を叩いてみます。
ここでもまた非常に気が利いていて、各APIの説明ページのサイドカラムには、それぞれのセクションに対応するサンプルコードが記述されているんですね(curl, ruby, python node)。
ということで、もう何も考えずにコピペだけで動かせる状況・・・感動的ですね。

### A, アカウント情報
https://www.nylas.com/docs/platform#account

email, 接続先サービス(provider)、アカウント名などが取得できます。

```
curl https://api.nylas.com/account -u YOUR_ACCESS_TOKEN:
```

YOUR_ACCESS_TOKENのところは適宜置換を。また、認証方法がBASIC & パスワードは空なので、最後の `:`を忘れないようにご注意を。

レスポンス中に「organization_unit」というフィールドがありますが、これは「メールはどのように分類されるか」という項目で、プロバイダーに応じて"label" or "folder"が入ると書かれています。
今回、私はGmailを使っているので「label」が入っていました。
詳細は[Folders vs. Labels](https://www.nylas.com/docs/platform#folders_vs._labels)を。

### B, スレッド
https://www.nylas.com/docs/platform#threads

会話ツリーですね。
`https://api.nylas.com/threads` 、もしくは個別のスレッドを取得するのであれば `https://api.nylas.com/threads/#{id}`へGETアクセスを送ります。(認証方法に関してはアカウントと同様)
レスポンスとしては、「そのスレッド内の最初のメッセージの日時」「そのスレッド内の最後のメッセージの日時」「1番新しい、自分が受信したメッセージ(=送信分を除く)の日時」といった項目や、受送信者一覧・メッセージID一覧などが含まれます。
labelsには、Gmailの「受信ボックス(inbox)」「重要(important)」や「全て(all)」といったオブジェクトも含まれていました。(organization_unitがfolderの場合は、labelsではなくてfolders.)

#### B-1, 絞り込み、ページング
フィルタリングやページングはGETパラメータによって行われます。

例えばドキュメントのサンプルを見ると

```
curl "https://api.nylas.com/threads?unread=true&any_email=mark@nylas.com"
```

となっています。見ての通り、`「mark@nylas.com」が参加している未読(を含むスレッド)`となります。(`any_email=#{email}`は「送受信いずれかにそのアドレスを含む」という条件です(他に、`from`/`to`もあります)

offset, pageも同様にパラメータで指定可能です

```
curl "https://api.nylas.com/threads?limit=20&offset=460"
```

#### B-2, 検索
任意の形式での検索も可能です(フルテキスト検索)。

```sh
curl https://api.nylas.com/messages/search?q=Pinot+Noir
```

### C, メッセージ
threadに近く、サブエンドポイントもfilterやlabel操作など共通しています。返り値の形式に違いがあり、返ってくるのがmail objetの集合になります。

## 触ってみて

冒頭で紹介した記事の通り、inboxはAPI自体はとてもシンプルでワクワク感があったのですが、その開発環境にVagrantで仮想環境を用意したり・・・ちょっと仰々しいかな？という印象がありました。
それが今は、「アカウント登録して→3クリックでトークンを発行して→何の変哲もないcurlコマンドをコピペする」だけで動くところまで洗練されました。
メールは何だかんだ色々な情報が溜まってくる・溜め込みやすく、なのに独特の引き出し難さからフラストレーションの溜まりやすいツールになってしまっているな・・・と個人的には感じる所です。
それが、これほどシンプルに扱いやすくなると、カジュアルに色々なものとつなぎ込んで〜〜なんて楽しみが広がりました。

また、未整備ですがドキュメントに[webhooksというセクションも用意されています](https://www.nylas.com/docs/platform#webhooks)。
これからの進化が楽しみ！