GASを利用したSlackBOTの作成

こんにちは、虎の穴開発室です。

 

虎の穴開発室では、ブログ記事の作成を週ごとに持ち回りにて実施しています。しかし皆さん開発業務に熱心なもので、よく忘れてしまう…なんてことがありました。そこで、その週のはじめに自動的にリマインドを入れるようにしよう!ということになりました。

弊社ではコミュニケーションツールとしてSlackを使っていますので、単純にSlackのリマインド機能を使おうかと考えました。しかしそれでは、毎回の担当者まで管理することが出来ません。それじゃあ、リマインドの意味がない。というわけで、GAS(Google Apps Script)でBOTを作ることにしました。

 

なんでGASなの?

  • 他のGoogleサービス(スプレッドシートなど)との連携が簡単にできる
  • Googleサーバ上で動作する
  • 時刻起動がトリガーの設定で簡単にできる
  • 基本的に誰でも触れたことはあるでろうJavaScriptで書ける

これだけ嬉しいことがあって無料で使わせてもらえるってスゴイですよね。

 

GASを組む前の準備

Slackへの投稿を行うには、incomming webhookの設定が必要です。以下のURLから設定をします。

https://my.slack.com/services/new/incoming-webhook/

BOTによる投稿をするチャンネルを選択すると、以下のURLが発行されます。

f:id:toranoana-lab:20171214204834p:plain

このURLに対してメッセージをPOSTすると、選択したチャンネルに対して投稿ができるというわけです。

 

GASからSlackへの投稿

単純に投稿するだけなら簡単です。以下の通り、POSTのパラメータを指定してリクエストを投げるだけになります。

var postUrl = "https://hooks.slack.com/services/XXXXXXXXXX/XXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXX";
function sendSlack() {
// POSTのパラメータ設定 var jsonData = { "username" : "リマインダーBOT", "text" : "@here 今週のブログ担当者さん、忘れないようにしましょう。", "link_names" : 1 };
// パラメータをJSONに変換 var payload = JSON.stringify(jsonData);
// POSTオプションの設定 var options = { "method" : "post", "contentType" : "application/json", "payload" : payload, };
// リクエスト UrlFetchApp.fetch(postUrl, options); }

 このスクリプトを実行すると、以下のようにSlackに投稿されます。

f:id:toranoana-lab:20171215141304p:plain

別にいいと言えばいいんですけど、ちょっと物足りません。そう、せっかくだから、可愛い女の子にリマインドして欲しいですよね。アイコンの設定は大事です。アイコンの設定は以下のコードをPOSTのパラメータに追加すると可能です。 

  // POSTのパラメータに、以下の通りアイコン画像のURLを記述
"icon_url" :"https://xxxxxxxxxxx.png"
,

 実行すると以下の通りになります。

f:id:toranoana-lab:20171215141422p:plain

うーんいいですね。ちなみにアイコンに使ったキャラクターは、弊社のサービス「とらのあなクラフト」のイメージキャラクター、クラフトちゃんです。開発室内でも絶大な人気を誇っています。

 

GASからスプレッドシートへのアクセス

今回の目的は、スプレッドシートで管理している持ち回り担当者を取得して、リマインドすることです。GASによってスプレッドシートにアクセスをする必要があります。GASからスプレッドシートへのアクセスは、以下のように行います。

  // スプレッドシートのIDによってオープン
var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXXXXXXX");

// シート名を指定して、シートを取得
var sheet = spreadsheet.getSheetByName("YYYYYYY");

なお、スプレッドシートのIDは、URLの以下の箇所となります。

https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXX/edit#gid=0

あとはsheetオブジェクトに対しての操作を記述することで、スプレッドシートの値の取得や変更が可能になります。javascriptで処理を記述すれば、見事にスプレッドシート上の値をSlackに投稿できるBOTの完成です。本当にシンプルに扱えて素晴らしいですね。 

 

GASのトリガー設定

最後に、作ったスクリプトを自動的に実行するよう、トリガーの設定を行います。トリガーの設定は、GAS作成ページの左上、時計のアイコンをクリックすることで行えます。

f:id:toranoana-lab:20171215141723p:plain

アイコンをクリックするとトリガー設定ダイアログが表示されますので、スクリプトの実行時間を入力しましょう。今回はブログ作成担当者に週のはじめにリマインドしますので、以下のように設定します。

f:id:toranoana-lab:20171215141843p:plain

設定後に保存ボタンをクリックするだけで、いとも簡単に時刻起動するようになりました。

 

以上のようにBOTを作成することで、無事に開発室メンバーは自分の当番を忘れることがなくなりました。内容はとてもシンプルな物ですが、たったこれだけで日頃の問題が解決できると考えると素晴らしい物ですね。

虎の穴では、現在エンジニアの仲間を絶賛募集しています。このブログを読んでくださったあなたの名前が、SlackBOTによって呼ばれる日が来るのを心待ちにしています。興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。