クラスター株式会社でテクニカルアーティスト(TA)をしているtoyakunです。
今回は、社内のナレッジ検索を効率化するために開発したSlack bot「kanisan」について紹介します。
背景: TAチームへの問い合わせの多さ
前提として、テクニカルアーティスト(TA)という役職についてご存知でしょうか。業界や企業によって業務内容は様々かとは思いますが、以前のtech blog記事クラスターでのテクニカルアーティストのおしごとでは「デザイナーとエンジニアのコミュニケーションを円滑にするための通訳係」と紹介されています。
クラスター社のTAチームには、日々たくさんのメンションが飛んできます。UnityやGitに関する質問、社内ツールに関する問い合わせ、フィジビリ相談など、内容は様々です。回答にかかる時間もまちまちですが、たとえ短時間で回答できる内容であってもコンテキストスイッチが発生します。これらを効率化するため、社内のナレッジを蓄えたAI Chatbotを作ることができないかと考えていました。
社内のSlackには、既にノーコードのワークフロー構築ツールを活用したAI Chatbotがいくつか存在していました。当初はその仕組みを使うことも考えていたのですが、ナレッジのメンテナンスの面で不安がありました。Web上のGUIからmarkdownファイルを手動でアップロードするような運用は継続しづらいでしょう。いっそ、自律的に社内から情報を集めて、自動でナレッジを更新できないかと考えました。
そこで、ナレッジとなるmarkdownファイルをGitHub上で管理し、GitHub Actionsで調査や回答、ナレッジ更新を行うSlack Bot「kanisan」を作成しました。
Slackでkanisanにメンションすると、調査を行って回答します。画像では、clusterの機能である「テスト用スペース」について質問しています。

アーキテクチャ
kanisanのアーキテクチャは以下のようになっています。

- AWS Lambda
- Slackのメンションを受け取る
- Slackに調査開始メッセージを投稿する
- メンションがあったスレッドを取得する
- GitHub Actionsを起動する
- GitHub Actions
- Claude Codeを起動する
- ナレッジベースを参照する
- slack-explorer-mcpでSlack検索する
- Google Driveを検索する
- Slackに回答を投稿する
AWS Lambda
Slack Events APIでは3秒以内にレスポンスを返さないとリトライが発生します。Claude Codeの処理には数十秒〜数分かかることがあるため、Lambdaですぐに「受け付けました」と返し、実際の処理はGitHub Actionsで行う形にしました。スレッドの途中でメンションが発生したときは、そのスレッドの履歴も取得して、GitHub Actionsに渡しています。
GitHub Actions
GitHub ActionsでBedrock経由でClaude Codeを起動します。この際、--allowedToolsで使用を許可するツールを指定します。現状ではSlack、GitHub、Google Driveの3つを使用しています。
Slack (shibayu36/slack-explorer-mcp)
社内のエンジニアの
id:shiba_yu36さんが公開しているSlack検索MCPサーバーです。Slackのメッセージを検索したり、Canvasの情報を取得したりすることができます。
GitHub (modelcontextprotocol/server-github)
公式のGitHub MCPサーバーです。これを使用することで、kanisanが自身のGitHubリポジトリにPRやIssueを作成することができるようになります。
Google Drive (内製MCP)
社内のGoogle DriveのDocumentやSpreadSheetの情報を取得できるMCPサーバーです。サードパーティ製のMCPを使用するセキュリティリスクを踏まえ、簡易的なMCPを実装しています。
記事執筆時点で、Claude CodeのモデルにはOpus 4.6を使用しています。正直なところ、単に社内ナレッジの調査をするためならOpusはリッチすぎるようにも感じます。ですが、kanisanにはコードを書いてもらうこともあるので、Opusで運用しながら様子を見ています。ClusterScript Referenceがナレッジに含まれているので、簡単なClusterScriptであれば書いてもらうこともできます。


まとめ
Claude Code × GitHub Actions × Slackを組み合わせることで、自律的に動くナレッジボットを実現しました。運用を開始して1ヶ月ほど経ちますが、1日あたり平均23件の呼び出しに対応しています。
リモートワークが中心の弊社では、Slackでのオープンなテキストコミュニケーションが推奨される文化があり、Slackに多くのナレッジが蓄積しています。slack-explorer-mcpによるSlack検索が社内で手軽に利用できるようになったことで、過去の会話の掘り起こしや経緯の調査にもよく使われるようになりました。
kanisanがより優秀なメンバーになってくれるよう、引き続き育てていきたいと思います。