🐰

Slackからクエリを生成する方法

2024/09/23に公開

はじめに

だいぶ昔になってしまったのですが、以前こういうSlack Appを作ったことがありました

https://github.com/kromiii/tbls-ask-agent-slack

一言で言うと Slack からクエリを生成してくれるSlack Botです

https://youtu.be/bcTLiIFCMWk?si=0R-mFgPHECQcTGlq

会社のテックブログで紹介したところ、一部では話題になったのですが詳しい動かし方などは書かなかったので、参考までにメモしておきます

ここではチュートリアルとしてサンプルの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 の内容をそのままコピペします

https://github.com/kromiii/tbls-ask-agent-slack/blob/main/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によるスキーマファイルの生成の詳細はこちらをご覧いただくとして

https://zenn.dev/yumemi_inc/articles/6caf17872b6521

今回はk1Low/tbls-askにあるサンプル用DBスキーマを使って動作を確認してみます

https://github.com/kromiii/tbls-ask-agent-slack/blob/main/schemas/config.yml.sample

こちらのコマンドを実行して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 ファイルも用意しています

https://github.com/kromiii/tbls-ask-agent-slack/blob/main/manifests/deployment.yml

必要に応じて使ってください

Discussion