$30 off During Our Annual Pro Sale. View Details »

/kzlt コマンドとは

muryoimpl
November 26, 2022

/kzlt コマンドとは

Kanazawa.rb meetup #124 向けに作った、Slack の slash command /kzlt がどんなものかを記述したもの。meetup #123 で発表した。

muryoimpl

November 26, 2022
Tweet

More Decks by muryoimpl

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 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が変わってしまうので、新しくデプロイするの
    ではなく、一度デプロイしたもののバージョンを更新する必要がある。

    View Slide

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

    View Slide

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

    View Slide