Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

3時間でMVP、6時間でデプロイ — Claude Codeで作るインタビューRAGシステム

Avatar for kei4eva4 kei4eva4
December 09, 2025
14

3時間でMVP、6時間でデプロイ — Claude Codeで作るインタビューRAGシステム

AIコーディング道場勉強会 #5(2025/12/9)の発表資料です。 Claude Codeを使って、インタビュー動画をRAG検索可能なナレッジベースに変換するシステムを開発しました。初日3時間でMVP完成、本番デプロイに6時間かかった経緯と、AIコーディングの実践的な知見を共有します。 技術スタック: LangChain / faster-whisper / Chroma / GPT-4.1-mini / Streamlit / Railway

AIコーディング道場勉強会 #5(2025/12/9)
https://ai-coding-dojo.connpass.com/event/377246/

Avatar for kei4eva4

kei4eva4

December 09, 2025
Tweet

Transcript

  1. 自己紹介 新垣圭祐(しんがき・けいすけ) ソーイ株式会社 / YOKUMIRU株式会社 AIコーディング歴 2024年10月〜 Cursor 2025年〜 Claude

    Code 今回の挑戦 Claude Codeだけで実用システム開発 生成AIを使った機能開発 AIコーディング道場 中間発表 Keisuke Shingaki 2
  2. 背景:解決したい課題 インタビュー動画の活用問題 現状の課題 動画が 400本以上、1本30〜60分 「〇〇さん、△△について何て言ってた?」 → 全動画を見直す or 諦める

    手動対応の限界 作業 時間 1本の文字起こし 2〜3時間 全動画の検索 不可能 目的 実用: 社内CSチームで実際に使ってもらう 学習: 生成AIをシステム開発で使う経験 準備: 他アプリへのAI機能追加の前段階 チャレンジ 1. Claude Code でAIコーディング実践 2. RAG パイプラインの実装 3. 本番運用 を見据えた品質 AIコーディング道場 中間発表 Keisuke Shingaki 3
  3. システム概要 動画からナレッジベースを自動構築するRAGシステム 動画ファイル → 音声抽出 → 文字起こし → ベクトルDB →

    RAG検索 → 回答生成 (.mov) (ffmpeg) (Whisper) (Chroma) (OpenAI) 主な機能 機能 説明 動画処理 動画 → 音声 → 文字起こし → ベクトル化を自動実行 RAG検索 質問に対して関連する発言を検索し、GPTが回答生成 マルチユースケース エンジニア/医師/採用など、設定ファイルで切替 運用機能 質問ログ、フィードバック収集、表示/非表示管理 本番対応 認証機能、エラー監視(Sentry) 、Railwayデプロイ AIコーディング道場 中間発表 Keisuke Shingaki 4
  4. 技術スタック コア技術 分野 技術 フレームワーク LangChain / LangGraph 文字起こし faster-whisper

    (small) 埋め込み multilingual-MiniLM-L12-v2 ベクトルDB Chroma LLM OpenAI GPT-4.1-mini UI Streamlit インフラ・運用 分野 技術 デプロイ Railway (Nixpacks) エラー監視 Sentry RAGトレース LangSmith(オプション) 主要ライブラリ langgraph langchain faster-whisper sentence-transformers streamlit openai AIコーディング道場 中間発表 Keisuke Shingaki 6
  5. 技術選定の理由 RAG基盤 技術 選定理由 LangChain RAGのデファクト、情報が豊富 Chroma ローカル完結、セットアップ簡単 GPT-4.1-mini コスト効率、API安定性

    文字起こし 技術 選定理由 faster-whisper OSS、日本語精度◦、無料 インフラ(消去法での選定) 選択肢 判断 AWS/GCP 検証には重すぎる Vercel Pythonサポートが限定的 Heroku 無料枠廃止 Render 永続ストレージが有料のみ → 永続ストレージ無料のRailwayを選択 AIコーディング道場 中間発表 Keisuke Shingaki 7
  6. 開発の流れ Git履歴から見る開発タイムライン 開発期間: 約3週間 総コミット数: 110件 実作業時間: 約20時間 特徴的なパターン 12/01だけで59コミット(全体の54%)

    fix 18件が12/01に集中(全fixの78%) → デプロイで苦戦した証拠 フェーズ別の進行 日付 主な作業 11/13 MVP完成(3h) 11/18-25 機能追加 11/29-30 品質強化 12/01 デプロイ(6h) 12/02 調整・発表準備 AIコーディング道場 中間発表 Keisuke Shingaki 10
  7. 日別コミットヒートマップ 日付 feat fix docs 他 計 時間 主な作業 11/13

    2 1 1 5 9 3h RAGパイプライン構築、WebUI、MVP完成 11/18 2 1 - 3 6 2h バッチ処理UI、評価機能 11/25 4 1 6 - 11 3h ユースケース設定、LLM評価 11/29 - - 2 4 6 1h ドキュメント整備 11/30 4 - - 1 5 2h GPT校正、ガードレール 12/01 14 18 12 15 59 6h Railway本番デプロイ 12/02 3 2 5 4 14 3h スライド作成 ※ 「他」= chore, refactor, perf, improve AIコーディング道場 中間発表 Keisuke Shingaki 11
  8. 機能拡張の様子 主要な機能追加コミット 11/13 feat: rag_core.pyライブラリとWebUIを追加 11/18 feat: 動画バッチ処理WebUIを追加 11/18 feat:

    評価データセットと自動評価機能を追加 11/25 feat: LLM-as-a-Judge による評価システムを実装 11/25 feat: ユースケース別設定システムを実装 11/30 feat: 400人規模対応のためRAG検索を大幅強化 11/30 feat: RAGシステムにガードレール機能を追加 11/30 feat: RAG前処理を大幅改善(GPT校正・チャンク最適化) 12/01 feat: 本番運用向けPhase1機能を実装 12/01 feat: 曖昧な質問に対する明確化機能を追加 12/01 feat: 操作ログ機能を追加しデプロイメントガイドを作成 拡張のポイント MVP → 運用機能 → 本番対応 と段階的に拡張 ユーザーフィードバックを想定した機能追加 AIコーディング道場 中間発表 Keisuke Shingaki 12
  9. 初日の開発ログ(11/13) Git履歴から見る初日の9コミット f3c83d1 init 19f7881 feat: RAG検索アーキテクチャを改善し、CLAUDE.mdを更新 a5c8522 chore: 不要なファイルをgit管理から除外

    6684fcd refactor: サンプルファイルをsamplesディレクトリに整理 e3e5a25 refactor: samplesをdataディレクトリに名称変更 7191996 docs: 全コードファイルに詳細なコメントとdocstringを追加 cf81c94 feat: rag_core.pyライブラリとWebUIを追加、重複を整理 4298e3b fix: app.pyのdocstring誤字を修正 006ee2f chore: LangChainの新パッケージ構造に対応 初日で完了したこと RAGパイプライン構築(feat: RAG検索アーキテクチャを改善 ) WebUI追加(feat: rag_core.pyライブラリとWebUIを追加 ) ドキュメント整備(docs: 全コードファイルに詳細なコメントとdocstringを追加 ) AIコーディング道場 中間発表 Keisuke Shingaki 13
  10. 実際のAIとのやり取り例 Git履歴から見る問題解決の流れ 問題: Railwayビルドが20分でタイムアウト 793b509 fix: Nixpacksビルドに切り替えてタイムアウト回避 ↓ まだタイムアウト("importing to

    docker"で止まる) 15823c6 fix: PyTorch CPU専用ビルドでイメージサイズを削減 やったこと 1. RailwayのビルドログをそのままClaudeに貼り付け 2. nvidia-cublas-cu12 等が2GB → 原因特定 3. 「CPU専用PyTorchに変更」を提案・実装 ポイント: ログやエラーをそのまま貼ると原因特定が早い AIコーディング道場 中間発表 Keisuke Shingaki 14
  11. 技術的な工夫 パフォーマンス最適化 @lru_cache(maxsize=1) def _get_whisper_model(): return WhisperModel(...) モデルの遅延ロード バックグラウンドプリロード RAG品質の改善

    GPT校正: 誤字修正、段落構造化、フィラー除 去 ガードレール: 入力バリデーション、レート制 限 引用形式の強制: 「〇〇さんは『△△』と述べ ています」 AIコーディング道場 中間発表 Keisuke Shingaki 16
  12. デプロイでループする... 12/01だけでfix 18件 — なぜこうなった? AIとの会話ループ 私: ビルド失敗した AI: Dockerfile修正しました

    私: まだ失敗 AI: 別の方法試します 私: それも失敗 AI: ... 3〜4往復で1つの問題を解決 原因 AIはローカル環境を知らない Railway固有の制約を把握していない 「動いた」報告が遅れると堂々巡り 対策 ログを積極的に出して共有 環境差異は人間が判断 「成功/失敗」を明確に伝える AIコーディング道場 中間発表 Keisuke Shingaki 17
  13. Railwayデプロイの落とし穴 見落としがちな設定ポイント .dockerignore問題 .gitignore でファイルをコミット済みでも .dockerignore で除外されているとコンテナ に含まれない config.yamlやベクトルDBで発生 #

    .dockerignoreで除外されていた config.yaml # → 設定が読み込まれない chroma_doctors/ # → DBが空になる メモリ・Volume問題(無料プラン) メモリ1GB制限 Volume 500MB制限 → HFモデルで満杯 解決策: DISABLE_PRELOAD=true → 起動時プリロード 無効 HF_HOME 未設定 → モデルはコンテナ内に保存 AIコーディング道場 中間発表 Keisuke Shingaki 19
  14. Railwayデプロイの落とし穴(続) デバッグのコツ ログで状況を確認 # デバッグログを追加 print(f" config = {config_file}") print(f"

    exists = {config_file.exists()}") 段階的に問題を切り分け 1. Build Logs: ビルド成功? 2. Deploy Logs: 起動時エラー 3. HTTP Logs: ステータスコード 4. Metrics: メモリ・CPU その他の問題 存在しないコマンドを実行するように指示さ れる 結局メモリが足りず、$5プランに課金しまし た... AIコーディング道場 中間発表 Keisuke Shingaki 20
  15. Git履歴から見える「AIあるある」 コードの特徴的なパターン 過剰生成 → 整理 AIは「多機能」を好む傾向 7タブ → 3タブに整理 WebUI統合し個別ファイルを削除

    仕様検討不足による方針転換の多さ 医師 → エンジニア → 汎用(インタビュー対象) Dockerfile → Nixpacks from_documents → add_documents ファイル変更回数トップ5 ファイル 変更回数 CLAUDE.md 26回 main_app.py 24回 rag_core.py 17回 graph_build_index.py 14回 .gitignore 12回 CLAUDE.mdが最多 = AI指示の試行錯誤 AIコーディング道場 中間発表 Keisuke Shingaki 21
  16. 振り返り:この開発で分かったこと 3時間でMVPが動いた理由 AIに「RAGパイプライン作って」で骨格完成 ドキュメント・コメントも自動生成 やったこと: 要件を伝えただけ 6時間デプロイにかかった原因 AIはプラットフォーム環境を知らない 「ビルド失敗」→「修正」→「また失敗」ルー プ

    やるべきだったこと: ログを積極的に出して共 有 AIは「多機能」を好む 7タブ → 3タブに整理が必要だった 過剰生成を人間が取捨選択する必要あり 仕様検討不足で方針転換が多発 医師 → エンジニア → 汎用(インタビュー対 象) Dockerfile → Nixpacks 学び: 最初にしっかり要件を固める AIコーディング道場 中間発表 Keisuke Shingaki 22
  17. 最終発表に向けて Claude Codeの機能をもっと活用したい 今回使えなかった機能: MCP(Model Context Protocol) 外部ツール連携 カスタムスラッシュコマンド プロジェクト固有の定型操作

    サブエージェント 複雑なタスクの分割実行 やりたいこと 機能 活用案 MCP GitHub連携、DB直接操作 カスタムコマンド /deploy , /test 等 サブエージェント コードレビュー自動化 目標: AIコーディングの生産性をさらに上げる AIコーディング道場 中間発表 Keisuke Shingaki 23