Cloud Functionsを使ってSlack AppのSlash Commandを実装

アプリケーション

概要

Cloud Functionsを使ってSlack AppのSlash Commandを実装する。

今回作ったボイラープレートはこちら。

go-slack-app-on-cloud-functions-boilerplate

Slash Commandの使えるSlack Appを作る方法は色々あるが、安く、簡単に、サーバーレスで作れるということでCloudFront Functionsを使ってみた。

前提

  • Google Cloud Platformが利用できること
  • gcloudコマンドのセットアップが完了していること
    • アプリケーションをデプロイするためにgcloudコマンドが利用できる必要がある
  • Cloud Build APIが有効化されていること
    • Cloud Functionsに関数をデプロイするために、関数をビルドするのだが、そのために必要。

Cloud Functionsで関数を作成

Cloud Functionsのコンソールにて、関数を作成しておく。 トリガータイプはHTTP認証は未認証の呼び出しを許可を選択、HTTPSが必須をチェックする。

あとで関数をデプロイした後に、Cloud Functionsの関数の詳細 > トリガーに記載されているトリガーURLを使うので、メモしておく。

Slack Appの準備

Slack Appを作成

Create an appにて、From scratchを押下する。

スクリーンショット 2022-09-04 17 29 50

App Nameを入力する。

Pick a workspace to develop your app in: にてワークスペースを選択して、 Create Appを押下する。

スクリーンショット 2022-09-04 17 32 07

Slash Commandを設定

設定画面(ex. https://api.slack.com/app/****) にて、Slash Commandsを選択する。

スクリーンショット 2022-09-04 17 33 21

Create New Commandを押下し、CommandShort DescriptionUsage HintEscape channels, users, and links sent to your appを任意で入力する。

Request URLは先程メモしたトリガーURLを入力する。 トリガーURLはhttps://REGION-NAME-PROJECT-ID.cloudfunctions.net/FUNCTION_NAMEという形式になっている。

スクリーンショット 2022-09-04 17 35 59

入力できたらSaveを押下する。

Slack Appをインストールする

設定画面(ex. https://api.slack.com/apps/****) にて、Install Appを押下する。

スクリーンショット 2022-09-04 17 37 16

Install to workspaceを押下して、任意のワークスペースにAppwoインストールする。

Signing Secretを取得

設定画面(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

スクリーンショット 2022-09-04 17 47 11

所感

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になっていると思う。

運用コストも大してかからず、スケーラビリティはちょっと怪しいかも。

数千人超えるような組織でなければ多分問題なく使えると思う。多分。