自治体職員の暗黙知を可視化する AI インタビューアプリ。 AI が業務についてヒアリングし、その場で React Flow キャンバス上にフロー図を生成する。
Sprint 0-1 (MVP v0.1) の段階。テキストチャットのみ・固定 5 問の業務概要把握フェーズ。
- Next.js 16 (App Router) / React 19 / Tailwind v4 / shadcn
- Hono (
app/api/[[...route]]) + Drizzle ORM + Postgres - OpenAI Structured Outputs (zod) で業務情報を抽出
- @xyflow/react でフロー図を描画
このリポジトリを渡されたら、Claude に「セットアップして」と言うだけで環境が整います。
- Claude デスクトップ をインストールしてログイン
- このリポジトリのフォルダを Claude に共有(ドラッグ&ドロップ または「Add files」)
- 「セットアップして」と送信 → Claude が手順を案内してくれます
Claude はコマンドを提示するので、それを Mac の「ターミナル」アプリに貼り付けて実行してください。
ターミナルの開き方: Spotlight(Cmd+Space)→「ターミナル」と入力 → Enter
機能開発は「〇〇機能を作って」と言えば Claude が対応します。
前提: Docker Desktop のみ(Node / pnpm / Supabase CLI は不要)
git clone <このリポジトリの URL>
cd workflow-interviewercp .env.example .env.local.env.local をテキストエディタで開き、OPENROUTER_API_KEY= の右側に API キーを貼り付ける。
キーは https://openrouter.ai/keys で取得できます。
使う AI モデルは OPENROUTER_MODEL で切り替えられます(省略時は google/gemini-3.1-flash-lite)。
モデル名は https://openrouter.ai/models の一覧から選んでそのまま貼り付けるだけです。
docker compose up -d初回はイメージのビルドと依存パッケージのインストールで 3〜10 分 かかります。
データベースのマイグレーションも自動で適用されます。
ブラウザで http://localhost:3000 を開く。または:
curl http://localhost:3000/api/health
# {"ok":true} が返れば完了docker compose downdocker compose down -v # データも含めて削除
docker compose up -d # 新しく起動(マイグレーション自動適用)- トップで「新しいセッションを開始」
- AI から最初の質問が表示される
- チャットに業務名・目的・根拠法令・主要ステップ・関係者を順に入力
- 各ターンで右側のキャンバスにノードが増えていく
- 5 問終わったら「完了して JSON 出力」ボタンが押せるようになる
- クリックで
session-{id}.jsonがダウンロードされる
app/
page.tsx トップ (セッション開始)
sessions/[id]/page.tsx セッション画面
api/[[...route]]/route.ts Hono mount
components/
session/SessionView.tsx 2カラムレイアウト + 状態管理
chat/{Transcript,ChatInput}.tsx チャット UI
canvas/FlowCanvas.tsx React Flow 描画
ui/ shadcn 生成物
lib/
db/{client,schema}.ts Drizzle
server/
app.ts Hono ルート集約
routes/sessions.ts REST エンドポイント
interview/{questions,schema,extract,controller}.ts
openai.ts
drizzle/ マイグレーション
docker-compose.yml ローカル開発環境 (app + postgres)
- supabase.com で新規プロジェクトを作成(リージョンは Tokyo
ap-northeast-1推奨)。DB パスワードを控える。 - プロジェクトの Connect から 2 種類の接続文字列を控える:
- Session / Direct(port
5432)… マイグレーション適用用 - Transaction pooler(port
6543、末尾?pgbouncer=true)… アプリ実行用(サーバーレス向け)
- Session / Direct(port
DATABASE_URL="<Session/Direct 接続文字列 (5432)>" pnpm db:migrateSupabase Studio の Table Editor で sessions / messages ができていれば OK。
- Vercel で GitHub リポジトリをインポート(Framework は Next.js が自動検出。
mainブランチを指定)。 - Environment Variables を設定:
DATABASE_URL… Transaction pooler 接続文字列(port6543,?pgbouncer=true)OPENROUTER_API_KEY… OpenRouter API キーOPENROUTER_MODEL… 使うモデル名(任意。省略時はgoogle/gemini-3.1-flash-lite)
- Deploy。
KB(
docs/kb/)は実行時にファイル読み込みするため、next.config.tsのoutputFileTracingIncludesでサーバー関数にバンドルしている。
https://<デプロイ先>/api/healthが 200 を返す- 新規セッション → 業務選択 → 回答 でキャンバスにフロー図が描画される
- Vercel の Function ログに
KB workflow not found/DATABASE_URL is not setが出ていない
- 音声 / LiveKit / STT / TTS
- 認証 / ユーザー管理
- 動的質問生成 (深掘り)
- ファシリテータによる手動ノード編集 / リアルタイム同期
- Markdown / Mermaid / tldraw エクスポート
- dagre / ELK 自動レイアウト