1.はじめに
みなさんは,大学で先輩から研究を引き継いだときや,新しいプロジェクトにアサインされたとき,コード全体を把握するのに思った以上に時間がかかった経験はありませんか?
分からないことだらけで,「ここはどういう意図なんですか?」「この関数どこから呼ばれていますか?」と先輩に質問しまくる……そんな状況になったことがある人も多いと思います.
さらに近年はリモートワークやオンライン活動が当たり前になり,オフィスや研究室にいれば気軽に言えた「ちょっといいですか?」が,画面越しではぐっと言い出しにくくなりました.
特に新人だと,「今忙しいかな?」「こんな初歩的なこと聞いていいのかな?」と躊躇してしまい,一人でエラーログとにらめっこする時間だけが増えていく……そんな経験もあるかもしれません.
こうした 「心理的ハードル」や「物理的な距離」,そして会話の中で消えていくナレッジ を技術でなんとかしたいと思い,今回は Gemini × RAG × Slack Bot を組み合わせて,「新人とともに成長していく新人開発支援Bot」 を作成しました.
このBotは,単にコードの質問に答えるだけではありません。Slack 上で行われた技術的な会話を,スタンプをトリガーにして「記憶」し,チーム(研究室)の知識として蓄積していく,いわば 逆RAG 的な仕組み を持っています.
もし興味のある方や実際に使用してみたい方などいましたら以下のリポジトリをクローンして使用してみてください!(AI Studio, Vertex AIともに対応しています
手っ取り早く使いたい場合は Google AI Studio 推奨
入力データの機密性を担保したい場合は Vertex AI 推奨
2.完成品
以下が完成品です.Slackのチャットを通して「新人開発支援Bot」をメンションすると事前に指定していたGithubリポジトリを参照しながら質問に答えてくれます.デモ動画では「Linebotリポジトリ(自作したリポジトリ)におけるsummarize_one_articleメソッドがどのような処理をするのか,またリポジトリ内のどこで呼ばれているか」について質問しています.
3.機能紹介
本アプリケーションは,主に以下の2つの機能を実装しました。
3.1.リポジトリ参照機能(GitHub RAG)
事前に指定した GitHub リポジトリのソースコードを読み込み,コードの仕様や実装意図について回答する機能です.Slackで投稿する際に「新人開発支援Bot」をメンションすることで使用することができるようになります.単なるキーワード検索ではなく、コードの 文脈(Context) を理解して回答してくれるため,新人が一人でコードリーディングをする際の強力な補助となります.
また,普段使いとしては「Gemini Flash」を使用していますが,投稿内で「/why」であったり「深く考えて教えて」などを含むと,「Gemini Pro」を用いて生成することもできます.そのため,要所要所で使い分けることもできます!
Gemini Flash では速度重視の生成が行えます.
Gemini Pro では生成品質重視の生成が行えます.
3.2.知識蓄積機能(逆RAG)
新人エンジニアと一緒に 「一緒に成長していく」 というコンセプトを体現するのがこの機能です.
開発現場や研究室では,コードには書かれていない「運用ルール」や「ハマりポイント」が Slack 上の会話で解決されることがよくあります.しかし,その貴重な情報はすぐに流れてしまい,後から来た人がまた同じ質問をしてしまう……ということが起きがちです.
しかし,このアプリケーションでは,解決したスレッドにスタンプを押すだけで、Botがその会話を学習し,知識として蓄積 します.
例えば,以下のような会話のスレッド(一部)があったとします.ちなみに会話のトピックは,「デプロイをAWS SDKを用いて自動化してみよう」といった内容です.
このスレッドを忘れないようにしたいであったり,モデルの生成時に考慮してほしいと思った際に,以下のように親スレッドに「メモ」のリアクションをすると,
新人開発支援Botがスレッドの内容を要約し,DBに格納してくれるようになります(画像は,スレッドの内容の一部です).
このように,人間がドキュメントを書かなくても,日々の会話の中でスタンプを押すだけでBotが賢くなっていく.これが「新人とともに成長する」仕組みです.
4. 使用技術
今回の使用技術は大きく分けるとSlack BotとAI関連になります.以下では技術スタックに触れた後,SlackBot、AI関連について詳細に説明します.
技術スタック
本プロジェクトで使用している主要な技術スタックは以下の通りです。
| カテゴリ | 技術・ツール | バージョン / 詳細 |
|---|---|---|
| 開発言語 | Python | 3.12 |
| Bot フレームワーク | Slack Bolt |
slack-bolt (Socket Mode 使用) |
| RAG フレームワーク | LlamaIndex | llama-index-core |
| LLM (推論・解説) | Gemini | gemini-3.0-pro-preview |
| LLM (要約・高速処理) | Gemini | gemini-1.5-flash |
| Embedding モデル | Gemini / Vertex AI | text-embedding-004 |
| Vector DB | ChromaDB |
chromadb (Persistent Client) |
| AI プラットフォーム | Google AI Studio / Vertex AI | google-genai |
| 仮想環境 | Docker | Docker Compose |
| 設定管理 | Pydantic | pydantic-settings |
4.1 Slack Bot
Slackアプリの開発には,公式フレームワークである Slack Bolt for Python を採用しました.通信方式として,Webhook型とSocket Modeがあるため,この違いについて少し説明します.
- Webhook型:HTTPSエンドポイントを設定し,Slack ⇔ サーバ間で通信を行い,処理を行う形式です.
- Socket Mode:ローカルPCや社内サーバーからでも外部にポートを解放せずに安全に使用することができる方式.
今回は,上記の内,Socket Mode を使用して開発を行いました.Socket Mode を利用することで,プロジェクト単位であったり個人単位で,AIにどのようなデータを参照させるかを変更することが可能になっており,かつ独自ドメインを取得する必要がない点から Socket Mode を採用しました.
4.2 AI関連
リポジトリのコード,ドキュメントを参照しながら生成できるように,検索型拡張生成技術であるRAGをGeminiに導入しました.RAGの構築には LlamaIndex を採用しています.Supportbotでは,単に回答するだけでなく,Slack上の会話から自律的に知識を学習(インデックスへ動的追加)する機能を持たせたかったため,データの更新・管理機能に長けた LlamaIndex を採用しました.Geminiのモデルとしては生成速度の速い Gemini Flash と生成品質の高い Gemini Pro系のモデルの2つを採用しています.
なお,Gemini に LlamaIndex を用いて RAG を導入する部分の技術的な詳細については,以前作成した以下のCLIツールの記事で詳しく解説しています.もし,興味のある方がいましたら,こちらも併せてご覧ください.
5.事前準備
まずは,本アプリケーションを使用するために必要なツールとAPIキーを準備します.以下では,それぞれについて簡単に説明します.
5.1.Docker,docker-compose のインストール
Docker,docker-composeのがインストールされていない場合は,以下のリンクのサイトを参考にインストールしてください.
5.2.各種APIキーの取得
本アプリケーションの動作には以下の3つのサービスのAPIキーが必要となります.取得の際には,各参考サイトを適宜参照しながら実施してみてください.
-
Gemini API Key
Google AI Studio を使用する場合:Google AI StudioからGeminiAPIのAPIキーを取得してください.(無料枠で利用可能です).
Vertex AI を使用する場合:GCPプロジェクトの認証情報(IAMの認証情報)を用意し,service-account.jsonとして保存してください.
Google AI Studio / Vertex AI参考サイト
-
Slack Bot Token & App Token
Slack APIアプリでアプリを作成し,Slack Bot Token と App Token を取得してください.
Slack Bot Token:xoxb- で始まる Bot User OAuth Token
App Token:xapp- で始まる App-Level Token
必要な権限 (Scopes): app_mentions:read, chat:write, channels:history, reactions:read
SlackBot参考サイト
-
Github Token
GitHub Settings から Personal Access Token (Classic) を取得します.
読み込みたいリポジトリがPrivateの場合は repo 権限が必要です.Publicなら権限なしでも可ですが,APIレート制限回避のために設定を推奨します.
Github Token参考サイト
6.使用方法
6.1.SlackのチャネルにBotを追加
事前準備にて作成したSlackのチャネルがあると思うので,そこに以下のコマンドを入力してSlack APPのBotを追加します(下記のコマンドのbotの部分は,Slack APPの作成時に指定したものに置き換えてください.)
/invite @bot
6.2..envファイルの準備
以下の.envファイルを作成します.Google AI Studio関連を使用する場合は,USE_VERTEX_AI=False にすることを忘れずにしてください.また,Google AI Studio,Vertex AIは使用する方のみを入力するだけで十分です.
# 各環境変数(APIキー)
# SlackBotの設定
SLACK_BOT_TOKEN=xoxb_slack_bot_token
SLACK_APP_TOKEN=xapp_slack_app_token
# Google AI Studio関連
GEMINI_API_KEY=your_gemini_apikey
GEMINI_REGION=global
# GCP設定
GOOGLE_APPLICATION_CREDENTIALS=/backend/service-account.json
GCP_PROJECT_ID=your_gcp_project_id
GCP_LOCATION=your_gcp_location
# Vertex AI使用フラグ
USE_VERTEX_AI=True # Google AI Studioを使用する場合はFalse
# Geminiモデル名設定
GEMINI_FLASH_MODEL_NAME=gemini-2.5-flash
GEMINI_PRO_MODEL_NAME=gemini-2.5-pro
# Github関連の環境変数
GITHUB_TOKEN=your_github_token
GITHUB_REPO_OWNER=github_repo_ower_name
GITHUB_REPO_NAME=github_repo_name
GITHUB_BRANCH_NAME=github_branch_name
# Vector DBの保存先
CHROMA_DB_PATH=./vector_db
CHROMA_COLLECTION_NAME=supportbot_collection
6.3.コンテナの起動
以下のコマンドを実行すると,Slack Bot が起動します.
docker compose up -d
ログに ⚡️ Bolt app is running! と表示されれば起動完了です!
SlackでBotにメンションを送ったり,会話スレッドに
スタンプを押したりして動作を確認してみてください.
初回起動時はライブラリのインストールやリポジトリのインデックス作成が行われるため,数分かかる場合があります.
7.おわりに
今回は Gemini × RAG × Slack で新人とともに成長していく「新人開発支援Bot」を作ってみました.リモートワークがスタンダードになって生きている昨今では,Slackのようなチャットアプリを通して壁打ち相手にできるBotの存在が大きくなっていくんじゃないかなとも思っています.もちろん先輩やベテランエンジニアさんに聞くことが一番手っ取り早くかつ正確な情報を得ることができるとは思いますが,生成AIの性能がかなり向上している今では,まず「AIレビュー」を挟んでみるのも一手だと思います!
8.参考文献
Slack Bot について





