Cloud Functionsを使ってSlack AppのSlash Commandを実装する。
今回作ったボイラープレートはこちら。
go-slack-app-on-cloud-functions-boilerplate
Slash Commandの使えるSlack Appを作る方法は色々あるが、安く、簡単に、サーバーレスで作れるということでCloudFront Functionsを使ってみた。
Cloud Functionsのコンソールにて、関数を作成しておく。 トリガータイプはHTTP、認証は未認証の呼び出しを許可を選択、HTTPSが必須をチェックする。
あとで関数をデプロイした後に、Cloud Functionsの関数の詳細 > トリガーに記載されているトリガーURLを使うので、メモしておく。
Create an appにて、From scratchを押下する。
App Nameを入力する。
Pick a workspace to develop your app in: にてワークスペースを選択して、 Create Appを押下する。
設定画面(ex. https://api.slack.com/app/****) にて、Slash Commandsを選択する。
Create New Commandを押下し、Command、Short Description、Usage Hint、Escape channels, users, and links sent to your appを任意で入力する。
Request URLは先程メモしたトリガーURLを入力する。 トリガーURLはhttps://REGION-NAME-PROJECT-ID.cloudfunctions.net/FUNCTION_NAMEという形式になっている。
入力できたらSaveを押下する。
設定画面(ex. https://api.slack.com/apps/****) にて、Install Appを押下する。
Install to workspaceを押下して、任意のワークスペースにAppwoインストールする。
設定画面(ex. https://api.slack.com/apps/****) にて、Basic Infomationを押下する。
App Credentialsという項目にSigning Secretがあるので、値をメモしておく。
Cloud Functionsにデプロイする関数を実装する。
若干ハマりどころ(go mod vendorする部分とか)はあったりするが、実装詳細は割愛する。
ソースコードは以下参照。
go-slack-app-on-cloud-functions-boilerplate
go-slack-app-on-cloud-functions-boilerplateのREADMEに従って、環境変数の準備とデプロイを実施する。
作成したSlash CommandをSlackで使ってみる。
ex. /hello Bob
Slack Appを作る部分をコード化できると嬉しい。
仕事で勤怠管理のためのSlack Commandを作りたかったのでgo-slack-app-on-cloud-functions-boilerplateをベースに、akashi-slack-slash-commandというのを作ってみた。
この実装では、ストレージをSpreadsheetにしているが、Google Workspaceを使っていると権限周りでSpreadsheetの共有設定が柔軟に調整できないという管理上の問題があって、職場ではストレージをSpreadsheetからCloud Storageに差し替えて実装を調整して使っている。
勤怠管理でAkashi、チャットツールでSlackを使っている組織があれば簡単に利用できるSlack Commandになっていると思う。
運用コストも大してかからず、スケーラビリティはちょっと怪しいかも。
数千人超えるような組織でなければ多分問題なく使えると思う。多分。