当番をランダムに決めて通知してくれるSlack BotをGoogle Apps Scriptで作った
研究室での毎週の当番決めを自動化したいと思い、Google Apps Script(GAS)を使ったSlack botを作成しました。
すでに作ってる人いるだろうなと検索したましたが、スプレッドシートから指定の人数をランダムにピックアップして当番を回していくGASが見つけられなかったです(スプレッドシートの全員に毎回割り当てるGASを書いている人は結構いたのですが)。
なのでこの記事では、作成したSlack Bot用のGASの公開と解説をしようと思います(Slack Botへの連携はこちらのサイトをご覧ください)。
Slack Botの使い方
最初にSlack Botの使い方を載せておきます。とにかく使えれば良いという人は
- スプレッドシートの作成
- 作成したシートのスクリプトエディタに下記のスクリプトをコピペ
- Settingに必要な情報の記入
をすれば使えます。それ以降で、GASを書いていて思ったこととかをつらつらと書いていきます。
用意するスプレッドシートのフォーマット
1列目:SlackのメンバーID(<>で括る)
2列目:SlackのUser名
3列目:選択されたかどうかのマスク値(最初は1に設定する)(0: 割り当て済み, 1: 割当されていない)
Google Apps Script
doPost()
がメインの処理になります。3~7行目に必要情報を追記してください。
1 | function doPost(e) { |
Settingに記載する情報
spreadSheetID
: ‘https://docs.google.com/spreadsheets/d/<IDはここの部分>/edit#gid=0'sheetName
: 読み込みたいスプレッドシートのシート名pickNum
: 毎週の担当に必要な人数slackWebhookUrl
: Incoming Webhookの設定時にできるURL
Slack Botの設定
通知されるメッセージ
通知されるメッセージは以下の通りです。メッセージを編集する場合は、65行目の template
を編集してください。
感想
JavaScriptはほとんど書いたことがなかったので、PythonやJavaと対応する処理ができないかなと思いながら調べつつ書いていきました
(なので非効率的な処理とかも多くあると思うので、あればぜひご指摘お願いします)。
また、GASがJavaScript 1.6ベースで作られているため、それ以降で実装されている機能が使えないのも割と不便だと感じました(例えばアロー関数)。
このSlack Botの作成を通して、普段自分がいかにPythonが色々な機能・ライブラリを使っているのかを痛感しました。
Pythonではパッとできるのになあという処理ができないことが多くて、それの実装を追加したのもいい勉強になったなと思います。
以上でこの記事を終わります。
参照
当番をランダムに決めて通知してくれるSlack BotをGoogle Apps Scriptで作った
https://sishida21.github.io/2020/01/27/role-assign-slack-bot/