PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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