Slide 1

Slide 1 text

/kzlt コマンドとは 2022/11/19 (Sat) Kanazawa.rb meetup#123 muryoimpl

Slide 2

Slide 2 text

おしながき 1. What 2. Why 3. How

Slide 3

Slide 3 text

これは何? ● 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 'エントリ番号' -- エントリ時に返ってきた番号を指定してエントリを削除する

Slide 4

Slide 4 text

これは何? ● 以下のような特徴・制限があります ● /kzlt create したタイミングで、そのChannel 用の シートが作成される ● /kzlt entry <タイトル> を入力すると、シートに追記される ● セルを探して書き込むため race condition がありますが、割り切ってます ● /kzlt shuffle で順番を決め、順番と markdown 用テキストが Channel に書き 込まれます ● /kzlt reset で順番ぎめをなかったことにします ● /kzlt remove で、エントリしたものをなかったことにできます。id はエント リ時のレスポンスに含まれています

Slide 5

Slide 5 text

なぜつくった? ● LT のたびに、運営者がタイトルを訊いて書き込み、シャッフルして、かつ、 markdown に書き込むのたいへんじゃね?と思った ● ↑は運営者の熟練度に左右されそう ● 話す人が任意のタイミングで登録できるほうが、おかわり LT あったときに対応しや すそう ● 年末 LT のネタにしたかった (が、今話してしまっている……)

Slide 6

Slide 6 text

どんな仕組み Slack Apps Script /kzlt を入力 POST リクエスト Webアプリとして公開された Apps Script end- point レスポンス Spread sheet 結果を 書き込む doPost() 関数 hook で呼び出す

Slide 7

Slide 7 text

どんな仕組み? ● AWSやGCPのサービスを利用するとより高性能なものができるが、無料でできるこ とと、特別感のない == 気がねない ものとして、Spreadsheet を採用した ● ↑そのため、運営でなく、利用者側に泣いてもらう仕組みが一部ある ○ シートに書き込む仕様上、 race condition でエントリが登録できない可能性がある (きっと) ● Google Apps Script は Webアプリとして公開することが可能なので、ここで公開さ れたエンドポイントをSlack の Slash command のバックエンドとして指定している。 ● /kzlt create のようなサブコマンドは、Google Apps Script 側で解析して処理してい る。

Slide 8

Slide 8 text

Slashコマンドはどうやってつくる? ● https://api.slack.com/apps?new_app=1 からAppを作り、後の画面で「Add features and functionality」が出てくるので、Slash comands を クリックし、 「Create New Command」をクリックする ● ここでコマンド名(今回は /kzlt) を入力し、Request URL にGoogle Apps Script を 公開した際のURL を設定する。これだけ ● あとは Google Apps Script で頑張るのだ! Google Apps Script はデプロイごとにURLが変わってしまうので、新しくデプロイするの ではなく、一度デプロイしたもののバージョンを更新する必要がある。

Slide 9

Slide 9 text

さすがにいきなり全部理解するのは難しいので ● https://github.com/kanazawarb/kzlt の main ブランチにコミットを積むと GitHub Actions で Google Apps Script のデプロイを更新するようになっているので、変更 を試す場合はこちらに直接変更をpushするのがよいです。 テスト環境はない!ので、commit を revert もしくは歴史改ざんして! ● 神権限を使って直接Spreadsheetに手を入れることもできなくはないが、変更して いる途中にリクエスト来たら……とか考えたくないので、シートごと削除して再度 /kzlt create が現実的 ● 今のところ神はmuryoimplとkiyoharaのみとなってます ● Kanazaw.rb といいつつ、GAS なので JavaScript 書かないといけないのは許して ……

Slide 10

Slide 10 text

さいご 来月(2022年12月) 使ってくれるとうれしい!うれしい!