「skype」や「Teams」などさまざまなコミュニケーションツールがある中で「Slack」を利用したことは、ありますか。

Slackには、ユーザーへのダイレクトメッセージやチャンネルと呼ばれるチャットルームへのチャットはもちろん、ビデオ通話やファイル添付などの機能が備わっています。その中でも、Slack APIという外部のサービスと連携できるAPI機能があることはご存じでしょうか。このSlack APIを使用することで、より便利にSlackを活用できます。

この記事ではSlack APIを利用したコンテンツ投稿の自動化に関して、初心者ではありますが、スクリプトを組んだ際の内容をまとめました。

Slack APIを含む、APIを使用して日々のちょっとしたタスクを自動化したいという方々の参考になれば幸いです。

Slack APIとは

APIとは、「Application Programming Interface」の略称で、システムやサービスの提供者が、開発している機能の一部を外部に向けて公開することで、外部アプリケーションと連携できるようにしてくれます。

例えば、外部アプリケーションからユーザーIDのデータを取り込む処理をAPIで行う場合、外部アプリケーション提供者から公開された「ユーザー IDのデータを返す」という機能を持つAPIに対して、利用者が必要なパラメータを送信することで、外部アプリケーションからユーザーIDのデータを取り込む、ということができます。

 最近、有料化が発表された「Twitter API」や人工知能を利用した話題の「ChatGPT API」など名前だけ知っているAPIがあるかと思います。

Slackも、「Slack API」を持っており、Slack内のメッセージ投稿やファイル送信など、180以上のAPIメソッドを提供しています。このAPIによって、GoogleドライブやTrello、Pollyなどの、業務効率化に有効なウェブサービスと連携することが可能なほか、自作のプログラム・アプリケーションとの連携も可能となっています。

社内でのSlack API活用事例

社内でSlack APIを活用したいと思った理由は、日次業務の運用を効率化するためです。

当時は、社内でSlack自体は導入しており、「Slackを利用して社内のコミュニケーションを活発化しよう」という方針はあったものの、社内に浸透したツールになっているとはまだ言えませんでした。Google WorkSpaceが導入されていたため、依然としてメールやChat、Hungoutが利用されていて、Slackを利用するユーザーは、入社後の研修期間中にSlackを業務上の連絡ツールとして利用していた新卒社員や、限られた先輩社員のみだったのです。

そこで、社内浸透への足掛かりとして、まずは課内でSlackを活用できるようにしようという目標が立てられました。Slackを効率的に利用できるよう、Slackには「Slackの使い方」というガイドラインがインターネット上に公開されていますが、文字ベースの資料を読むだけでは覚えにくく、時間も取られてしまいます。業務時間にプラスして、Slackの使用方法を勉強するために多くの時間を設けることは、得策ではありません。

しかしながら、前節でお話しした通り、Slackには業務効率化を実現するために必要な、さまざまな機能が備わっています。そのため、Slackを利用するために知っておいてほしい機能を体験しながら覚えてもらうという趣旨のもと、ドリル形式の課題を作成することにしました。

当初は、作成したドリルをSlackのメッセージボックスへ入力し、時間を指定して予約投稿するという運用法でした。ただ、ドリル投稿の際に、その都度上記の作業を実施しなければならないため、短い時間ではあるものの負担となっていました。さらに送信の失念や設定ミスなど、人為的なミスにも警戒しなければなりません。

そこで、Slack APIに白羽の矢が立ちました。Slack APIであれば、指定された時間にプログラムを起動し、投稿内容をパラメータとしてSlack APIへ送信することで、運用を自動化することができます。

今回は、BotとしてSlackのチャンネルにメッセージを送信するAPIを使用して、ドリルを自動投稿するためのスクリプトを組んでみました。

自動投稿スクリプトのツールと処理の流れ

はじめに、今回の自動投稿に必要なツールをざっくり挙げていきます。

ツール名役割
Slack発信したい文章の掲載先
Slack API用アプリパラメータの受取先。アプリに配置されたAPIが、パラメータを使用してSlackに働きかける。
Googleスプレッドシート発信したい文章の保存場所。
GAS(Google Apps Script)Googleのアプリを使用して簡単なウェブアプリケーションを作るためのスクリプト言語。JavaScriptがベースとなる。Googleスプレッドシートからデータを取り出し、Slack APIへ送信する。

次に、実際の処理の流れを考えていきます。

①GASを使用して、Googleスプレッドシートからデータを取り出します。
②GASの変数に格納したデータを、パラメータとしてSlack API用アプリに送信します。
③Slack API用アプリは、受け取ったパラメータを使用してSlackに働きかけます。
④Slackが目的の処理を実行します。
⑤Slackで実行された処理の結果(値の抽出や成功/失敗、エラーログなど)をSlack API用アプリに返します。
⑥返ってきた結果をGASで受け取ることができます。
⑦GASを使用して、返ってきた結果をGoogleスプレッドシートに書き込むこともできます。

なお、ここでは①~④の処理に焦点を当てることにします。

まず、②~④を構成して、Slackの特定のチャンネルに「test」というメッセージを送信するスクリプトを組んでみます。そのためにどのAPIを使用するかをあらかじめ決めておきましょう。

APIでは、「何ができるか」の他に、使用できる言語や、必要な設定やパラメータが決められています。公開されている資料をもとに、調査しておきましょう。

今回は、「Incoming Webhook」というSlack APIを使用します。Incoming Webhookは、チャンネルにメッセージを送信するSlack APIです。ただしJSON形式のデータをHTTP POSTリクエストで送信する必要があります。今回使用するスクリプトであるGASは、JSON形式で記述することも、HTTP POSTリクエストすることも可能です。

次に必要な設定ですが、APIには、一般的にスコープと呼ばれる設定が必要です。これはアクセス権のようなもので、APIで要求されるスコープを持ったユーザーやアプリのみが、APIに働きかけることができます。今回の場合は、Incoming Webhookはスコープが必要ないため、設定が不要になります。

最後にAPIから受け取ったデータにしたがって、アプリが正しい処理を実行するために最低限必要なパラメータも指定されています。Incoming Webhookでは、投稿先チャンネル、投稿するメッセージを指定する必要があります。

以上を踏まえて、Slack API用アプリの設定とスクリプトを作成していきます。

Slackにtestメッセージを送信してみよう

まず、Slack API用アプリの設定を行います。Slackの公開資料にIncoming Webhookを利用するための設定手順が記載されています。

手順を実行することで生成されるWebhook URLに、JSON形式のメッセージがHTTP POSTリクエストを通して送信されることで、チャンネルへメッセージを投稿することができます。

次に、JSON形式のメッセージをHTTP POSTリクエストで送信するために、GASでスクリプトを組んでいきます。

function testapp() {

//ペイロードの設定
 var payload = {
        'text' : 'test',
 };
 
//送信メソッドの設定
 var options = {
        'method' : 'post',
        'contentType' : 'application/json',
        'payload' : JSON.stringify(payload),
 };

//実行
  UrlfetchApp.fetch("https://hooks.slack.com/services/xxxxxxxxxxx",options);
 
}

UrlFetchApp(url,options)は、「【url】に【options】の設定でHTTPリクエストします」というメソッドです。上記のスクリプトでは、「Webhook URLにJSON形式のデータをHTTP POSTリクエストで送信します。内容は、【text】パラメータに””test””を入れてください。」という指示を出しています。

このスクリプトが実行されると、以下の処理を経てSlackのチャンネルにメッセージが投稿されます。

①Incoming Webhookを設定したSlack API用アプリにHTTP POSTリクエストが送信されます。
②Slack API用アプリがSlackに働きかけ、Incoming Webhook設定時に指定したチャンネルと【text】パラメータを送信します。
③Slackが、受け取った【text】パラメータを指定のチャンネルへ投稿します。

以上で、GASスクリプトからSlack APIを通してSlackにメッセージを送信するシステムを構成できました。

SlackとGoogleスプレッドシートを繋げよう

最後に、投稿したいメッセージをGoogleスプレッドシートからSlackへ送信するためのスクリプトを作成します。

前章でGASからSlackへデータを送信する構成は作成したので、この章ではGoogleスプレッドシートからGASでデータを取り出す構成を作成します。ただし今回の場合は、GASでもともと定義されている関数を使用するだけで良いので、データを取り出す構成はさほど複雑なものではありません。

obj = SpreadsheetApp.openById(GoogleスプレッドシートのURLの特定部分)

取り出したいデータをもつGoogleスプレッドシートを読み込み、objという値に格納します。

sheet = obj.getSheetByName(シート名)

次にobjに格納したGoogleスプレッドシートのうち、取り出したいデータをもつシートをsheetという値に格納します。

values = sheet.getRange(range).getValues()

またsheetに格納したシート内で取り出したいデータを、rangeの範囲でvaluesに格納します。

data = values[行][列]

最後にvaluesに格納したデータのうち、指定した行と列のデータをdataに格納します。

これらを組み合わせて、GoogleスプレッドシートからGASへデータを取り出すことができます。データの取り出し方がわかれば、あとは投稿したい内容に合わせてスクリプトをアレンジするだけです。

また、GASには「トリガー」という、定期的にスクリプトを実行する設定があります。トリガーを利用して、メッセージを定期的に投稿させることが可能です。

私が実際に作成したスクリプトでは、メッセージのほかに投稿日時や投稿するアプリ(bot)の設定を追加して、投稿を装飾しています。

 まとめ

社内でSlack APIを利用した理由とSlack APIを使用した自動投稿の紹介を行いました。Slackに限らず、さまざまなアプリケーションでAPIが公開されていますが、APIを通してアプリケーションとやり取りできるという仕組みは共通しているため、別のアプリケーションでも応用しやすく、使用方法を知っておいて損はありません。

APIに使用できるプログラミング言語も公開されているため、使い慣れた言語であれば効率よくシステムを作成できるかもしれません。はじめての言語であっても、動作を実感できるため、プログラミング言語の勉強で得た知識をアウトプットできる場所にもなります。