Slackを独自アプリケーションで拡張する

2018年5月9日(水)
鈴木 たかのり
連載6回目となる今回は、Slackの機能を拡張するためにアプリケーションを作成する。

前回はSlackと外部アプリケーションとの連携について紹介しました。Slackには、多数の外部アプリケーションやサービスと連携するための仕組みがあらかじめ用意されていますが、それ以外のアプリケーションやサービスと連携するにはどうすればよいでしょうか?

そういう場合、Slackでは自分でプログラムを作成して、またはすでに公開されているプログラムを改良して、独自の連携を作成するための機能が提供されています。ここでは簡単なプログラムを作成して、Slackと連携するアプリケーションを作成する方法について紹介します。

最近のSlackニュース

  • 2017年12月:2017年12月頃からSlackのテレビCMが放送されているようです。電車の中やタクシーなどでもCMが流れています。15秒バージョンはYouTubeでも公開されています(https://www.youtube.com/watch?v=gUiqGXVmlJ0)。
  • 2018年1月17日:プライベートの共有チャンネル機能のベータ版がリリースされました。2017年9月にリリースされた、複数のワークスペースをまたがった共有チャンネル(Shared Channels)機能で、プライベートのチャンネルも作成できるようになりました。この機能は有料会員でのみ有効です(https://slackhq.com/private-shared-channels-are-now-available-b187046b1bea
  • 2018年2月1日:大企業向けのSlack Enterprise Grid(https://slack.com/intl/ja-jp/enterprise)を導入した企業が150社を越えたというアナウンスがありました。Enterprise Gridは大企業で複数のワークスペースを持ち、ワークスペース間でチャンネルを共有したり、ワークスペースを越えて情報検索やDM送信ができる機能で、2017年2月にリリースされました(https://slackhq.com/celebrating-one-year-and-150-plus-customers-on-slack-enterprise-grid-1b7528b19759

SlackのAPI

Slackには、独自に開発したアプリケーションやプログラムと、メッセージの送信や取得などをするためのAPIが用意されています。SlackのAPIについてはSlack API(https://api.slack.com/)というWebサイトで情報が公開されています。このサイトには各種APIの仕様、APIを使用したアプリケーションの作り方、メッセージのフォーマット方法、認証方法など様々な情報が提供されています。ここではAPIについて全てを説明できないので、一部のAPIを使用したアプリケーションの作り方について解説します。

Slack API

Slack API

SlackのAPIの種類

Slackには様々な種類のAPIがあります。以下にいくつかとその機能や特徴を紹介します。

このうちWeb API、RTM API、Events APIは互いによく似ており、基本的にはWeb APIを使用していれば問題はありません。この3種類のAPIの違いと、どれを使用すべきかのフローチャートが「Which API is right for your Slack app?」(https://medium.com/slack-developer-blog/getting-started-with-slacks-apis-f930c73fc889)という記事で公開されているので、参考にしてみてください。

以降では、いくつかのAPIを使用してSlackとメッセージをやりとりする方法について説明します。

Incoming Webhooksでメッセージ送信

任意のチャンネルにメッセージを送信するには、Incoming Weebhooks が便利です。この機能はSlackが提供するIntegrationの1つで、任意のURLに対してHTTPで送信したメッセージが、Slackのチャンネルに送信されます。

Incoming Webhooks Integrationを作成する

Incoming Webhooks Integration(https://takanory-family.slack.com/apps/A0F7XDUAZ-incoming-webhooks)のページを開き、「Add Configuration」をクリックして、Integrationを作成します。

Incoming Webhooks画面

Incoming Webhooks画面

次の画面で通知先のチャンネル(ここでは #general)を選択し「Add Incoming WebHooks integration」をクリックします。

Incoming Webhooks integrationを追加

Incoming Webhooks integrationを追加

これで、指定したチャンネルにメッセージを送信するための専用URL(Webhook URL)が生成されました。このURLをメモ(下記の画像で https://hooks.slack.com/services/ で始まるURL)します。

Webhook URLが生成された

Webhook URLが生成された

なお、この画面で通知先チャンネルの変更、URLの再生成、メッセージ送信時の名前やアイコンを後から変更できます。

設定は、あとから変更可能

設定は、あとから変更可能

なお、Incoming Webhooksを登録すると、Slackのチャンネル上で Integration が追加されたことを示すメッセージが表示されます。

Incoming Webhookのintegrationが設定された

Incoming Webhookのintegrationが設定された

Webhook URLを使用してメッセージを送信する

それでは先ほど作成したWebhook URLを使用して、Slackにメッセージを送信してみます。Webhook URLにメッセージを送信する場合は、JSON形式で text プロパティに送信したい文字列を指定します。例えば以下のような形式です。

リスト1:シンプルなメッセージのJSON

{"text": "こんにちはSlack"}

このメッセージをWebhook URLに対して以下の形式で送信します。

  • HTTPメソッドはPOST
  • コンテンツ形式はJSON(application/json)
  • 文字コードはUTF-8

curl(https://ja.wikipedia.org/wiki/CURL)というコマンドラインでHTTPを送信できるツールを使用する場合は、以下のように指定します。URLには先ほど作成したWebhook URLを指定してください。

リスト2:curlコマンドでシンプルなメッセージを送信

curl -X POST -H 'Content-type: application/json' \
--data '{"text": "こんにちはSlack"}' \
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

メッセージの送信に成功すると、以下のようにSlackにメッセージが出力されます。

Slackにメッセージが送信された

Slackにメッセージが送信された

Webhook URLで送信するメッセージをカスタマイズする

Webhook URLで送信できるメッセージは、上記のシンプルなもの以外にも、様々な書式の指定が可能です。以下に一例を載せます。

  • 太字(*)、斜体(_)、コードブロック(`)などSlackの標準の書式設定が利用可能
  • 改行は\nと書く
  • リンクは <https://slack.com>のように<>で囲む
    • <https://slack.com|Slack>のように書くと、Slackという文字列にリンクが貼られる

では、以下の例で書式指定したメッセージを送信してみましょう。

リスト3:書式指定したメッセージを送信

curl -X POST -H 'Content-type: application/json' \
--data '{"text": "こんにちは<https://slack.com|Slack>\nWebhookは *楽しい* !"}' \
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

メッセージを送信すると、以下のようにリンクや改行、太字などの書式が指定されたメッセージが正しく表示されました。

書式指定されたメッセージが送信された

書式指定されたメッセージが送信された

メッセージ以外に、表示されるアイコン、ユーザー名なども変更できます。アイコンはicon_emoji プロパティ、ユーザー名はusernameプロパティで指定できます。

以下の例は、アイコンとユーザー名を指定したメッセージの送信のサンプルです。

リスト4:アイコンとユーザー名を指定したメッセージを送信

curl -X POST -H 'Content-type: application/json' \
--data '{"text": "ササ食べたい", "icon_emoji": ":panda_face:", "username": "panda-bot"}' \
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

メッセージを送信すると、以下のように絵文字とユーザー名が変更されて表示されます。

アイコンとユーザー名が変更されてメッセージが送信された

アイコンとユーザー名が変更されてメッセージが送信された

他にも様々な書式の指定が可能です。詳細は下記のページを参照してください。なお、これらのメッセージの書式指定は、他のAPIでも共通となります。

株式会社ビープラウド

部内のサイトを作るためにZope/Ploneと出会い、その後必要にかられてPythonを使い始める。現在の主な活動は、一般社団法人PyCon JP理事、Pythonボルダリング部(#kabepy)部長、Python mini Hack-a-thon主催、Plone User's Group Japanなど。共著書に『Pythonプロフェッショナルプログラミング 第2版(2015 秀和システム刊)』『Pythonエンジニア養成読本(2015 技術評論社刊)』『Pythonライブラリ厳選レシピ(2015 技術評論社刊)』などがある。趣味は吹奏楽とレゴとペンシルパズル。

Twitter: @takanory
Facebook: https://www.facebook.com/takanory.net

連載バックナンバー

開発ツール技術解説
第6回

Slackを独自アプリケーションで拡張する

2018/5/9
連載6回目となる今回は、Slackの機能を拡張するためにアプリケーションを作成する。
開発ツール技術解説
第5回

Slackと外部アプリケーションを連携させる

2017/12/15
連載5回目となる今回は、外部のアプリケーション連携により、様々な通知をSlackで一元管理する方法を紹介する。
開発ツール技術解説
第4回

Slackの管理設定

2017/10/31
連載の4回目となる今回は、チームを管理する管理者として行うさまざまな設定項目を説明します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています