【Google Apps Script】 資格試験の練習問題をSlackに投稿するBotを作ってみた!

弊社の技術部でAWSのソリューションアーキテクト-アソシエイト全員合格を目指そう!ということで、毎日試験の練習問題をSlackに投稿するBotを作ってみました!

完成イメージはこんな感じです↓ f:id:aym413:20190317222212p:plain

今回、試験問題はGoogleスプレッドシートに記載して、Slackに試験問題を投稿するスクリプトGoogle Apps Scriptで書いてみました。

Google Apps Script(GAS)とは?

Googleが提供しているスクリプト作成・実行ができるサービスです。
言語のベースはJavaScriptです。

試験問題の作成

試験問題は下記のような形でスプレッドシートに記載していきます。
f:id:aym413:20190320125357p:plain

A列 B列 C列〜
日付 問題 選択肢

GAS上でスクリプト作成

「ツール」>「スクリプトエディタ」を開きます。

f:id:aym413:20190317232351p:plain:w300

エディタに下記のコードを貼り付けて保存します。
任意の値の箇所は環境に合わせて変更してください!

いざ、実行!

メニューから関数を選択して「実行」をクリックします。

f:id:aym413:20190318233846p:plain:w300

実行するとSlackに投稿されました!

問題文にリアクションをつけてしまうと、自分で解答を考える前にみんながどれを選んでいるのかわかってしまう・・ということで、問題文を投稿したスレッドで解答を選べるようにしました!
f:id:aym413:20190317222836p:plain:w300

日次でSlackへ自動投稿

最後にSlackへ自動投稿するためのトリガーを作成していきます。
トリガー作成もブラウザから設定できるので難しくありません!

メニューから「現在のプロジェクトのトリガー」をクリックします。
f:id:aym413:20190318234030p:plain

別画面が開くので、画面右下の「トリガーを追加」をクリックします。
f:id:aym413:20190320121344p:plain

トリガーの設定をしていきます。
今回は毎日Slackへ投稿したいので下記のような設定をしました。
f:id:aym413:20190320121540p:plain:w350

「保存」をクリックすると、一覧画面に表示されます。
f:id:aym413:20190320122102p:plain

これで設定は完了しました!
とっても簡単ですね!!

ハマったところ

スプレッドシートから値を取得してSlackに投稿すると文字化けする

スプレッドシートから取得した値を表示しようとするとこんな表示になることがあります。
f:id:aym413:20190320113414p:plain:w300

そんな時は、下記のようにやるとちゃんと文字列として表示されるようになります。

<変数名>.toString().replace(/,/g , "\n");

また今回は、上記のようにやらなくても文字列と変数を結合することで文字化けせずに表示できました。

57行目   var message = '*問題*' + '\n\n' + questions + '\n\n' + '*選択肢*' + '\n\n';


Slackの数字絵文字は英語表記でないと文字列になる

通常、Slackの絵文字で :1: と入力するとf:id:aym413:20190320125247p:plain:w20と出ますが、スクリプト内で「:1:」を生成しても、絵文字にしてくれません・・。

f:id:aym413:20190320130516p:plain:w300

仕方がないので今回は数字の英語配列を作成することで対応しました。

2行目   // 選択肢のリアクション
3行目   var reaction = ['one', 'two', 'three', 'four', 'five', 'six'];

何かいい方法があれば是非コメントください!!


GASを今回初めて使ってみましたが、簡単に作成することができました。
これを応用してWeb APIで取得した値をスプレッドシートに書き込んで、集計するなんてことも簡単にできそうですね!