Slackからクエリを生成する方法
はじめに
だいぶ昔になってしまったのですが、以前こういうSlack Appを作ったことがありました
一言で言うと Slack からクエリを生成してくれるSlack Botです
会社のテックブログで紹介したところ、一部では話題になったのですが詳しい動かし方などは書かなかったので、参考までにメモしておきます
ここではチュートリアルとしてサンプルのDBスキーマを対象にSlackでクエリの生成を試してみるところまでやってみます
下準備
まずはこちらのレポジトリをクローンします
私は普段 ghq
コマンドを使っていますが、必要に応じて git clone
などに置き換えてください
% ghq get git@github.com:kromiii/tbls-ask-agent-slack.git
次にSlack Appをつくります
https://api.slack.com/apps にアクセスして、Create Apps から From manifest を選んでください
インストールする workspace を選んだら manifest を入力するフォームが起動するので、clone したレポジトリ直下にある manifest.yml
の内容をそのままコピペします
ここまででレポジトリのCloneとSlack App の作成が完了しました
環境変数の設定
tbls-ask-agent-slack の実行に必要な環境変数は以下の3つです
- OPENAI_API_KEY: API key for OpenAI
- SLACK_APP_TOKEN: App token for Slack
- SLACK_OAUTH_TOKEN: OAuth token for Slack
まずは環境変数を設定するためのファイルを生成します
私はdirenvを使っているので、レポジトリ直下の.envrc.sample
をコピーして雛形を作成しています
% cp .envrc.sample .envrc
ここからはコピーした .envrc
の方を編集していきます
まずはご自身のOPENAI_API_KEYを取得して
export OPENAI_API_KEY=sk-***
の部分にセットしてください
次にSlack Appの画面に戻って、OAuth & Permissions の項目からxoxb-
で始まる SLACK_OAUTH_TOKEN を環境変数SLACK_OAUTH_TOKEN
に設定します
同じく Basic Information からxapp-
で始まるSLACK_APP_TOKEN
をコピーして環境変数にセットします
サンプル用スキーマの設定
tbls-ask-agent-slackにはtblsによって作成されたDBのスキーマファイルが必要です
tblsによるスキーマファイルの生成の詳細はこちらをご覧いただくとして
今回はk1Low/tbls-ask
にあるサンプル用DBスキーマを使って動作を確認してみます
こちらのコマンドを実行してconfig.yml
を生成します
$ cp schemas/config.yml.sample schemas/config.yml
もしプライベートリポジトリにあるファイルを参照したい場合は適宜GITHUB_TOKEN
などを環境変数に追加してもらえれば読めるようになります
ボットの実行
ここまでできたらボットを実行してみましょう
ローカルにGolangの実行環境が整っていれば、以下のコマンドで実行できるはずです
go run main.go
しばらく待つとターミナルに
Connecting to Slack with Socket Mode...
Connected to Slack with Socket Mode.
と言うメッセージが出てくるので、これが出てきたら接続完了です
Slackのアプリを開いて、適当なチャンネルにbotをinviteし、メンションして話しかけてみましょう
メンションするとスキーマを選ぶように言われるので、ここでは wordpress を選びます
しばらく待つと、以下のように説明文と共に目的のクエリが返ってきます
おわりに
いかがでしたでしょうか?
実際に会社のSlackにインストールする場合など、安定して動かしたい方用に k8s の manifests ファイルも用意しています
必要に応じて使ってください
Discussion