はじめに
「社内の情報、Slackに埋もれてませんか?」
過去に誰かが回答した質問が、また別の人から飛んでくる。
マネージャーは同じ指示を何度も出す。
ナレッジは蓄積されず、人に聞かないと分からない。
この課題を解決するために、Slack上で動くAI QAボットを開発することにしました。
ただ作るだけではなく、AI開発・GCPインフラ・セキュリティの学習を兼ねた実践プロジェクトとして進めています。
この記事は シリーズの概要編 です。各フェーズの詳細は個別記事で解説します。
シリーズ一覧
| フェーズ | 記事 | 内容 |
|---|---|---|
| 概要 | この記事 | プロジェクト全体像と技術選定 |
| フェーズ1 | 基盤構築編 | Docker + Cloud Run + Secret Manager でデプロイ |
| フェーズ2 | AI連携編 | Vertex AI(Gemini)で質問に自動回答 |
| フェーズ3 | データ収集編 | Slack過去ログの抽出とDB保存 |
| フェーズ4 | RAG実装編 | 社内ナレッジに基づく検索回答 |
| フェーズ5 | ダッシュボード編 | マネージャー向け管理画面の構築 |
このプロジェクトで作るもの
機能1: AI による自動QA回答
Slack上でボットにメンションすると、社内の過去ログをもとにGeminiが回答を生成します。
社員: @QABot 有給休暇の申請方法を教えてください
Bot: 有給休暇の申請は、以下の手順で行います。
1. 社内ポータルの「勤怠管理」にアクセス
2. 「休暇申請」タブを選択 ...
これは RAG(Retrieval-Augmented Generation) と呼ばれる手法で、AIが社内データを検索してから回答を生成する仕組みです。
機能2: マネージャー代理送信ダッシュボード
ここが少しユニークなポイントです。
マネージャーがダッシュボード(Web画面)から入力したメッセージが、Slack上ではボットの名前で送信されます。
┌─────────────────────────────────────┐
│ ダッシュボード(マネージャーが操作) │
│ │
│ 送信先: #general │
│ メッセージ: 今週中に報告書を提出して │
│ [送信] │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Slack(部下が見る画面) │
│ │
│ QABot: 今週中に報告書を提出してください │
└─────────────────────────────────────┘
Slack上ではAIの自動回答もマネージャーの手動メッセージも同じBotから届くため、受信者にはどちらが送ったか分かりません。
なぜこの設計?
上司から部下への直接的な指示は心理的プレッシャーを伴うことがあります。Botを介することで「自動化された業務連絡」に見え、コミュニケーションの心理的負担を軽減する狙いがあります。
技術スタック
┌──────────────────────────────────────────┐
│ フロントエンド │
│ Next.js 14 + TailwindCSS │
│ (ダッシュボード管理画面) │
├──────────────────────────────────────────┤
│ バックエンド │
│ Node.js + TypeScript + Express │
│ Slack Bolt(Slack API連携) │
├──────────────────────────────────────────┤
│ AI │
│ Vertex AI(Gemini 2.0 Flash) │
│ RAG: 過去ログ検索 → プロンプト注入 │
├──────────────────────────────────────────┤
│ データベース │
│ Supabase(PostgreSQL) │
│ Prisma ORM │
├──────────────────────────────────────────┤
│ インフラ / CI │
│ GCP Cloud Run / Cloud Build │
│ Secret Manager / Artifact Registry │
│ GitHub(Private Repository) │
│ Docker(ローカル開発 + 本番ビルド) │
└──────────────────────────────────────────┘
なぜこの構成?
| 技術選定 | 理由 |
|---|---|
| Next.js + Express を1プロセスに統合 | Bot API とダッシュボード画面を別々にホストすると管理が煩雑。1つの Cloud Run サービスで完結させることでコストとメンテナンスを最小化 |
| Slack Bolt | Slack Bot 開発の公式フレームワーク。Socket Mode(開発用)と HTTP Mode(本番用)を切り替え可能 |
| Gemini 2.0 Flash | Gemini Pro より約10倍安い。QAボット用途には十分な品質。1回の質問あたり約0.06円 |
| Supabase(PostgreSQL) | 無料枠(500MB)でスタート可能。Cloud SQL(月$7.67〜)より低コスト。Prisma経由なので将来の移行も容易 |
| Cloud Run | リクエストがない時は自動停止 → 無料枠でほぼ$0。Docker イメージをそのまま動かせる |
| Secret Manager | 会社の共有GCPプロジェクトで環境変数が他の Editor メンバーに見えるのを防ぐ |
開発環境 — AI駆動開発
このプロジェクトの特徴の一つは、開発そのものをAIと一緒に進めていることです。
メインの開発環境: Antigravity (Google Gemini)
Antigravity は Google DeepMind が開発した AIコーディングエージェントです。エディタ上でファイルの作成・編集、ターミナルコマンドの実行、ブラウザ操作までを自律的に行えます。
このプロジェクトでは、以下のような作業を Antigravity と対話しながら進めています:
- 設計の相談: 技術選定(Cloud SQL vs Supabase 等)の比較検討
- コード生成: Dockerfile、server.ts、設定ファイル等の作成
- デプロイ支援: Cloud Shell で実行するコマンドの生成と手順整理
- セキュリティレビュー: IAM権限の確認、Secret Manager の導入判断
- ドキュメント作成: コスト見積もり、この記事自体もAIと共同執筆
サブの開発ツール: Claude Code(統合ターミナル)
エディタの統合ターミナルでは Claude Code(Anthropic)を併用しています。
主に以下の用途で使い分けています:
| ツール | 用途 |
|---|---|
| Antigravity | 設計判断、ファイル編集、デプロイ作業など本格的な開発 |
| Claude Code | ちょっとした疑問の確認、コマンドのテスト実行、コードの動作検証 |
AI駆動開発のメリット
従来の開発フロー:
分からない → ググる → Stack Overflow → 試す → エラー → またググる
AI駆動開発:
分からない → AIに聞く → コード生成 → 実行 → エラーをAIに見せる → 修正
特に GCPやインフラ周り は初学者にとってハードルが高いですが、AIに「なぜこのコマンドが必要なのか」「この権限は何を意味するのか」を都度質問しながら進めることで、手を動かしながら体系的に学べるのが大きなメリットです。
アーキテクチャ
┌──── Slack API ──────┐
│ │
┌──────────┐ Event │ ┌───────────────┐ │
│ Slack │ ────────→│ │ Cloud Run │ │
│ ユーザー │ ←────────│ │ (server.ts) │ │
└──────────┘ Bot応答 │ │ │ │
│ │ Slack Bolt │ │
┌──────────┐ HTTPS │ │ Next.js │ │
│ ブラウザ │ ────────→│ │ Express │ │
│ (管理者) │ ←────────│ │ │ │
└──────────┘ 画面表示 │ └───┬───┬───────┘ │
│ │ │ │
└──────┼───┼──────────┘
│ │
┌──────────┘ └──────────┐
▼ ▼
┌───────────┐ ┌──────────────┐
│ Vertex AI │ │ Supabase │
│ (Gemini) │ │ (PostgreSQL) │
└───────────┘ └──────────────┘
AI回答生成 過去ログ検索
コスト
このプロジェクトの月額ランニングコストです。
開発・テスト期間
| サービス | コスト |
|---|---|
| Cloud Run | $0(無料枠内) |
| Vertex AI テスト100回 | 約6円 |
| 合計 | 約6円/月 |
本番運用(小〜中規模 / 30〜100名利用)
| サービス | コスト |
|---|---|
| Cloud Run | $0(無料枠内) |
| Vertex AI (Gemini) | 約54〜180円 |
| Supabase (DB) | $0(無料枠) |
| 合計 | 約54〜180円/月 |
社内QAボット程度の規模なら、月額200円以下で運用できます。
開発の進め方
このプロジェクトは5つのフェーズに分けて段階的に開発しています。
フェーズ1: 基盤構築 ✅ 完了
Slack Bot の骨格を作り、Docker でローカル開発環境を構築。GCP Cloud Run にデプロイして Slack との疎通を確認するまで。
学べること: Docker, Cloud Run, Secret Manager, IAM, Git
フェーズ2: AI連携(Gemini)
Vertex AI 経由で Gemini API を呼び出し、Slack でメンションされた質問に AI が自動回答する機能を実装。
学べること: Vertex AI, Gemini API, プロンプトエンジニアリング
フェーズ3: ナレッジ収集(過去ログ抽出)
Slack の過去ログを取得し、Supabase(PostgreSQL)に保存するバッチ処理を作成。
学べること: Slack API (conversations.history), Supabase, Prisma ORM, バッチ処理
フェーズ4: RAG実装(検索回答)
ユーザーの質問に対して、DBから関連する過去ログを検索し、その情報をGeminiのプロンプトに注入して回答を生成。
学べること: RAG (Retrieval-Augmented Generation), ベクトル検索, プロンプト設計
フェーズ5: ダッシュボード(マネージャー代理送信)
マネージャーが Web 画面から Bot 名義で Slack にメッセージを送信できる機能と、送信履歴管理を実装。
学べること: Next.js App Router, React, 認証, REST API設計
まとめ
| 項目 | 内容 |
|---|---|
| 作るもの | Slack RAG QAボット + マネージャー代理送信ダッシュボード |
| 目的 | 社内ナレッジの活用 + コミュニケーションコスト削減 |
| 技術 | Next.js, Slack Bolt, Gemini (Vertex AI), Supabase, Cloud Run |
| コスト | 月額約200円以下 |
| 学べること | AI開発, GCPインフラ, Docker, セキュリティ, RAG |
次回の記事では、フェーズ1: 基盤構築編 で Docker + Cloud Run + Secret Manager を使ったデプロイの詳細を解説します。
リポジトリ
⚠️ Private リポジトリのため、コードの主要部分は各記事内で紹介します。