Kanazawa.rb meetup #124 向けに作った、Slack の slash command /kzlt がどんなものかを記述したもの。meetup #123 で発表した。
/kzlt コマンドとは2022/11/19 (Sat) Kanazawa.rb meetup#123muryoimpl
View Slide
おしながき1. What2. Why3. How
これは何?● Slack の スラッシュコマンドを利用した、Kanazawa.rb むけの LT エントリ & シャッフル用のコマンドです。Slack のアプリとして登録されています● バックエンドは Google の Spreadsheet です (ここで Spreadsheetをみせる)● 以下のようなコマンドをサポートしています/kzlt create -- 今回のLT大会用の枠を作成する/kzlt entry 'LTタイトル' -- 自分のLTを登録する/kzlt my -- 自分のエントリしたLTを自分にだけ表示する/kzlt list -- エントリー済みのLTをchannelに出力する(順番を決めたものを除く)/kzlt all -- エントリー済みのLTを出力する(順番決めた/決めてない関係なく)/kzlt shuffle -- 順番を決め、channelに出力する (次のshuffleに出てこない)/kzlt reset -- 順番決めたものすべてを順番決めていないことにする/kzlt remove 'エントリ番号' -- エントリ時に返ってきた番号を指定してエントリを削除する
これは何?● 以下のような特徴・制限があります● /kzlt create したタイミングで、そのChannel 用の シートが作成される● /kzlt entry <タイトル> を入力すると、シートに追記される● セルを探して書き込むため race condition がありますが、割り切ってます● /kzlt shuffle で順番を決め、順番と markdown 用テキストが Channel に書き込まれます● /kzlt reset で順番ぎめをなかったことにします● /kzlt remove で、エントリしたものをなかったことにできます。id はエントリ時のレスポンスに含まれています
なぜつくった?● LT のたびに、運営者がタイトルを訊いて書き込み、シャッフルして、かつ、markdown に書き込むのたいへんじゃね?と思った● ↑は運営者の熟練度に左右されそう● 話す人が任意のタイミングで登録できるほうが、おかわり LT あったときに対応しやすそう● 年末 LT のネタにしたかった (が、今話してしまっている……)
どんな仕組みSlackAppsScript/kzlt を入力POSTリクエストWebアプリとして公開された AppsScriptend-pointレスポンスSpreadsheet結果を書き込むdoPost() 関数hook で呼び出す
どんな仕組み?● AWSやGCPのサービスを利用するとより高性能なものができるが、無料でできることと、特別感のない == 気がねない ものとして、Spreadsheet を採用した● ↑そのため、運営でなく、利用者側に泣いてもらう仕組みが一部ある○ シートに書き込む仕様上、 race condition でエントリが登録できない可能性がある (きっと)● Google Apps Script は Webアプリとして公開することが可能なので、ここで公開されたエンドポイントをSlack の Slash command のバックエンドとして指定している。● /kzlt create のようなサブコマンドは、Google Apps Script 側で解析して処理している。
Slashコマンドはどうやってつくる?● https://api.slack.com/apps?new_app=1 からAppを作り、後の画面で「Addfeatures and functionality」が出てくるので、Slash comands を クリックし、「Create New Command」をクリックする● ここでコマンド名(今回は /kzlt) を入力し、Request URL にGoogle Apps Script を公開した際のURL を設定する。これだけ● あとは Google Apps Script で頑張るのだ!Google Apps Script はデプロイごとにURLが変わってしまうので、新しくデプロイするのではなく、一度デプロイしたもののバージョンを更新する必要がある。
さすがにいきなり全部理解するのは難しいので● https://github.com/kanazawarb/kzlt の main ブランチにコミットを積むと GitHubActions で Google Apps Script のデプロイを更新するようになっているので、変更を試す場合はこちらに直接変更をpushするのがよいです。テスト環境はない!ので、commit を revert もしくは歴史改ざんして!● 神権限を使って直接Spreadsheetに手を入れることもできなくはないが、変更している途中にリクエスト来たら……とか考えたくないので、シートごと削除して再度 /kzltcreate が現実的● 今のところ神はmuryoimplとkiyoharaのみとなってます● Kanazaw.rb といいつつ、GAS なので JavaScript 書かないといけないのは許して……
さいご来月(2022年12月)使ってくれるとうれしい!うれしい!