【Google Apps Script】 資格試験の練習問題をSlackに投稿するBotを作ってみた!
弊社の技術部でAWSのソリューションアーキテクト-アソシエイト全員合格を目指そう!ということで、毎日試験の練習問題をSlackに投稿するBotを作ってみました! 完成イメージはこんな感じです↓
今回、試験問題はGoogleスプレッドシートに記載して、Slackに試験問題を投稿するスクリプトはGoogle Apps Scriptで書いてみました。
Google Apps Script(GAS)とは?
Googleが提供しているスクリプト作成・実行ができるサービスです。 言語のベースはJavaScriptです。
試験問題の作成
試験問題は下記のような形でスプレッドシートに記載していきます。
A列 | B列 | C列〜 |
---|---|---|
日付 | 問題 | 選択肢 |
GAS上でスクリプト作成
「ツール」>「スクリプトエディタ」を開きます。
エディタに下記のコードを貼り付けて保存します。 任意の値の箇所は環境に合わせて変更してください!
いざ、実行!
メニューから関数を選択して「実行」をクリックします。
実行するとSlackに投稿されました! 問題文にリアクションをつけてしまうと、自分で解答を考える前にみんながどれを選んでいるのかわかってしまう・・ということで、問題文を投稿したスレッドで解答を選べるようにしました!
日次でSlackへ自動投稿
最後にSlackへ自動投稿するためのトリガーを作成していきます。 トリガー作成もブラウザから設定できるので難しくありません!
メニューから「現在のプロジェクトのトリガー」をクリックします。
別画面が開くので、画面右下の「トリガーを追加」をクリックします。
トリガーの設定をしていきます。 今回は毎日Slackへ投稿したいので下記のような設定をしました。
「保存」をクリックすると、一覧画面に表示されます。
これで設定は完了しました! とっても簡単ですね!!
ハマったところ
スプレッドシートから値を取得してSlackに投稿すると文字化けする
スプレッドシートから取得した値を表示しようとするとこんな表示になることがあります。
そんな時は、下記のようにやるとちゃんと文字列として表示されるようになります。
<変数名>.toString().replace(/,/g , "\n");
また今回は、上記のようにやらなくても文字列と変数を結合することで文字化けせずに表示できました。
57行目 var message = '*問題*' + '\n\n' + questions + '\n\n' + '*選択肢*' + '\n\n';
Slackの数字絵文字は英語表記でないと文字列になる
通常、Slackの絵文字で :1: と入力するとと出ますが、スクリプト内で「:1:」を生成しても、絵文字にしてくれません・・。
仕方がないので今回は数字の英語配列を作成することで対応しました。
2行目 // 選択肢のリアクション 3行目 var reaction = ['one', 'two', 'three', 'four', 'five', 'six'];
何かいい方法があれば是非コメントください!!
GASを今回初めて使ってみましたが、簡単に作成することができました。 これを応用してWeb APIで取得した値をスプレッドシートに書き込んで、集計するなんてことも簡単にできそうですね!