必要な Slack API はどれ？ - Slack アプリの作成のためのヒント

Slack で最もよく使われる 3 つの API は、あらゆる種類のアプリを開発するのに役立ちます。それぞれの API には、アプリの用途に応じてメリットがあります。例えば、イベントの通知が必要なアプリ、Slack チャンネルから情報を引き出すアプリ、送られてくるすべてのイベントをチーム内にストリーミングするアプリ、といった様々な用途です。

この記事では、Slack の Web API、Events API、RTM API について説明し、それぞれの一般的な使用例や、使い始めるためのヒントを紹介します。また、次の簡単なフローチャートを使って、あなたのアプリに最適な API を知ることもできます。

![flowchart-whichapi-jp.png](https://qiita-image-store.s3.amazonaws.com/0/369126/80adc2c6-a6e0-6399-566f-7e97cfc16c01.png)

# まずは API オブジェクトについて

どの Slack API でも、[channel](https://api.slack.com/types/channel)、[file](https://api.slack.com/types/file)、[group](https://api.slack.com/types/group)、[im](https://api.slack.com/types/im)、[mpim](https://api.slack.com/types/mpim)、[user](https://api.slack.com/types/user)、[usergroup](https://api.slack.com/types/usergroup) という 7 つのコアオブジェクトを使用します。

これらのオブジェクトには、チームのリソースに対応する情報が含まれます。リソースの履歴の読み取り、書き込み、アクセスを行うには、Slack アプリがオブジェクトの [OAuth スコープ](https://api.slack.com/docs/oauth-scopes) をサブスクライブしている必要があります。

インストール時に これらのスコープに対する許可がアプリに与えられると、必要なリソースにアクセスするための API を使用できるようになります。これらのオブジェクトや対応するリソースについての詳細は、[オブジェクトタイプについてのドキュメンテーション](https://api.slack.com/types) をご覧ください。


# Web API

Web API は、Slack 上でリッチなインタラクティブ・メッセージを送信する主な手段です。この API は、同様の呼び出し規則に基づく HTTP メソッドで構成されています。それらのメソッドを呼び出して、Slack とデータをやり取りすることができます。メソッドは、Slack チャンネルやファイル、絵文字リアクションまで、Bearer token (ベアラートークン）を検証方式として使用するものすべてを操作できるよう設計されています。


### 使用例:
*   チャンネルや DM からのメッセージなど、イベントを送信
*   Slack チャンネルとユーザーグループを作成、変更
*   ファイル、メッセージ添付ファイル、絵文字リアクションのアップロードと編集
*   状態のバックフィル

参考となるリンク:[Web API documentation](https://api.slack.com/web), [Web API supported methods](https://api.slack.com/methods), [Node Slack SDK](https://github.com/slackapi/node-slack-sdk), [Python Slack SDK](https://github.com/slackapi/python-slackclient), [Ruby Slack Client](https://github.com/slack-ruby/slack-ruby-client), [Sample Message Menus in Node](https://github.com/slackapi/sample-message-menus-node) ([or Ruby!](https://github.com/slackapi/sample-message-menus-ruby)), [Sample App Unfurls in Node](https://github.com/slackapi/sample-app-unfurls)


# Events API

Events API は、イベント情報のサブスクリプションを使用して JSON ペイロードをサーバーに送信します。サーバーではペイロードの受信を行い、どのように応答するか (独自の API、Slack の API、その他の API のどれを呼び出すか) を決めます。Slack アプリの設定ページから、チームとボットユーザーのイベントをサブスクライブできます。


## 使用例:
*   ユーザーがメッセージの投稿、チャンネルの作成や変更、ファイルの追加や変更を行った場合にイベントを受信する
*   ユーザーがチャンネルにピン、スター、絵文字リアクションを追加したときに、イベントを受信する
*   状態をほぼリアルタイムで保持

参考となるリンク:[Events API documentation](https://api.slack.com/events-api), [Events API supported events](https://api.slack.com/events/api), [Events API Node module](https://github.com/slackapi/node-slack-events-api), [Events API Python adapter](https://github.com/slackapi/python-slack-events-api), [Sample Onboarding Bot in Node](https://github.com/slackapi/onboarding-example)([or Python!](https://github.com/slackapi/Slack-Python-Onboarding-Tutorial))


# RTM API

RTM (リアルタイムメッセージング) API は WebSocket を使用し、イベントを受信して Slack に簡単なメッセージを送信できます。`rtm.connect` または `rtm.start` を使って Web API にリクエストを送信すると、RTM API は接続されているすべてのクライアントにイベントのストリームを送信します。これは、(特に、アプリが複数の Slack チームや大規模な Slack チームにインストールされている場合) リソースを大量に使用することがあります。


## 使用例:



*   発信接続だけを実行できるインターナルインテグレーション (通常、ファイアーウォールの場合)
*   Slack クライアントの作成
*   状態をほぼリアルタイムで保持

参考となるリンク:[RTM API documentation](https://api.slack.com/rtm), [Node Slack SDK](https://github.com/slackapi/node-slack-sdk), [Python Slack SDK](https://github.com/slackapi/python-slackclient), [Ruby Slack Client](https://github.com/slack-ruby/slack-ruby-client)


# Slack の API を使用する

ほとんどの Slack アプリは、Web API を使ってメッセージなどの情報を Slack に送信します。しかし、Slack API を使い始めたての開発者は、イベントペイロードの取得に RTM API と Events API のどちらを使用するか迷うかもしれません。

一般的に、一部の例外的な状況 (ファイアーウォール内側のインターナルインテグレーションなど) を除き、Events API を使用することをお勧めします。RTM API を使用すると、接続済み WebSocket を介して大量の不要な情報をサーバーに送信してしまうことがあります。この点は、複数のクライアントが接続している場合や、大規模なチームがアプリを使用する場合に特に重要です。

Events API は比較的新しい API であり、[サブスクリプションモデル](https://medium.com/slack-developer-blog/subscribe-to-the-events-api-d7120470983f) を使用します。サーバーはアプリにとって重要な情報だけを受信し、アプリが機能するのに必要な権限スコープだけをサブスクライブします。アプリで RTM API を使用するか迷っているなら、上記のフローチャートを確認するか、[Slack API FAQ](https://api.slack.com/faq) をご覧ください。

何かお困りのことがあれば、[Twitter](https://www.twitter.com/slackapi) をご利用いただくか、メールで開発者サポートチーム (developers@slack.com) にお問い合わせください。開発を楽しみましょう！🎉

---

原文 [Which API is right for your Slack app?](https://medium.com/slack-developer-blog/getting-started-with-slacks-apis-f930c73fc889) by [Shane DeWael](https://twitter.com/shanedewael)