Customer Discovery ワークフロー (Stage 1: D1-D4)
位置付け: ADR-0034 §2.1 で正式採用された Stage 1 (Customer Discovery) の運用詳細。 ADR-0028 全体 6 段ワークフローの Stage 1 = 問題発見フェーズ の内部サブ手順 (D1-D4)。 後段 (Stage 2 = Backlog Pipeline / A1-A5) は
backlog_pipeline_workflow.mdを参照。
0. このドキュメントの読み方
- 目的: Steve Blank Customer Development の Customer Discovery フェーズを bizlp 文脈 (一人法人 + GAS 内製開発 + 監査要件) に適用し、属人化していた問題発見プロセスを 4 段の追跡可能な手順に明文化する
- 対象読者: 起案者 (代表取締役) / Jr 入社後の後任 / Claude Code (D2 メタプロンプト作成補助)
- 完了の判定: D4 まで通過した RQ-NNN は判定区分 (「解く価値あり」/「対象外」/「再調査必要」) が明記され、
docs/_internal/research_prompts/RQ-NNN_*_synthesis.mdに記録されている
Stage 1 全体像 (D1-D4)
| # | 段 | 担当ツール / 担当者 | 完了条件 (要約) |
|---|---|---|---|
| D1 | 問題空間スキャン | 手動 (月次振り返り + 運用ログ集計) | 痛みポイント候補 ≥ 3 件を TODO_future.md に記録 |
| D2 | 調査依頼起案 | scripts/5_generate_rq_prompt.js (Gemini で RQ プロンプト生成) | RQ-NNN_*_prompt.md 作成済 |
| D3 | 並列 Deep Research 実施 | Gemini Deep Research + Claude Research (Web UI 経由) | RQ-NNN_*_result_{gemini,claude}.md 両方保存済 |
| D4 | 結果合成 + 価値判定 | 手動 (synthesis 作成、Mom Test 観点で再検証) | RQ-NNN_*_synthesis.md 完成、判定区分明記 |
1 サイクル所要時間目安: D1 (1h 月次振り返り内) + D2 (15min Gemini 生成 + メタプロンプト調整 30min) + D3 (Deep Research wait ≈ 30min × 2 並列、人間作業時間は 30min) + D4 (1-2h 合成 + 判定) = 約 3-4 時間 / RQ-NNN
所要時間目安の補足 (PR #692 Claude/GPT-4o 指摘反映、2026-05-14 追記):
- D3 Deep Research の待機時間 (各 30 分〜数時間) は async、人間作業時間ではない
- 実時間カウント = D1 (1h) + D2 (45min) + D3 人間作業 (30min、起動 + 投入) + D4 (1-2h) = 3-4 時間
- Deep Research 待機中は他作業 (別 RQ 起案 / Stage 2 進行 / Spec Pipeline / 月次決算等) を並列で実行可能
- ADR-0034 §影響 §5.3 「D1 → A5 通過時間 (中央値) < 4 時間」は 人間作業時間の中央値を指し、Deep Research の wall-clock wait は除外する
1. D1: 問題空間スキャン
1.1 目的
業務運用・月次決算・既存仕様書の隙間から、「次に解くべき問題候補」を構造的に発見する。仮説の語り (○○があったら便利) ではなく 過去の行動 (先月 N 回手作業した / 検算で M 回ズレた) に基づく痛みを抽出する。
1.2 担当ツール / 担当者
- 担当者: 代表取締役 (現状の単独運用者)
- ツール: なし (月次振り返り + 運用ログ手動集計)
- 入力源:
docs/_internal/changelog.mdの直近 30 日分の障害対応docs/_internal/BUG_tracking.mdの未解決バグdocs/_internal/TODO_future.mdの未着手 MAS のうち月次運用で痛みを感じた項目- 直近月次の決算実行ログ (
90_test_resultsシートで時間超過した処理)
1.3 完了条件
- 痛みポイント候補 ≥ 3 件を
docs/_internal/TODO_future.mdの月次振り返りセクションに追記 - 各候補に「いつ・何回・どれくらいの時間」を具体記述 (Mom Test 形式の前段)
- 候補ごとに「D2 起案候補」フラグ (☆) を付ける/付けない判断を記録
- ☆ 付き候補ごとに、属する JTBD が
docs/_internal/01_discovery/customer_insight/_jtbd_list.mdの承認済みエントリに存在することを確認する。既存エントリに存在しない場合は 3 軸テスト(ADR-0043 §2)を適用し、独立 JTBD として成立するなら PR で_jtbd_list.mdに追加してから D2 へ進む
1.4 例: 「請求書 OCR 自動仕訳の自動化」候補抽出
2026-04 月次振り返りで以下を記録:
- 2026-04 中の発生回数: 紙請求書受領 12 件 → 全件手入力 (1 件あたり 5 分 = 60 分)
- 過去 3 ヶ月の傾向: 月 8-15 件で安定推移、コピー&ペースト時の打鍵ミスで月 1-2 件は仕訳訂正発生
- 既存代替: クラウド会計 SaaS の OCR は精度 70% (内製で 90% を目指したい)
- D2 候補: ☆ (Pain Score 想定 = 頻度 12回/月 × 痛み 3/5 × 影響 2/5 = 72。比較対象として MAS-145 銀行 CSV (済) は当初 144 点だった)
1.5 アンチパターン
| やってはいけない | なぜ |
|---|---|
| 「あったら便利だろう」レベルの仮説を ☆ 付けて D2 へ | Mom Test 違反、Deep Research コスト ($1-3 × 2 engines) が無駄になる |
| 痛み候補を頭の中だけで保持 | D2-D4 通過後に「あれ何だっけ」となり追跡不能 RQ 化 (現状の主因) |
| 障害ログを見ずに直感だけでスキャン | 自分の記憶バイアス (印象が強い問題に偏る)、月次決算の本当のボトルネックを見落とす |
1.6 観測指標
- D1 → D2 進出率 (目標 50-70%): 「全部 ☆ を付けて Deep Research に投入」では Pain Ranking の前段で詰まる
- 「いつ・何回・どれくらいの時間」記述率 (目標 100%): 過去行動形式の徹底
2. D2: 調査依頼起案
2.1 目的
D1 で抽出した痛み候補のうち ☆ 付き項目について、Deep Research に投入できる完成版プロンプトを生成する。bizlp の事実パッケージ (該当 dev_mas-NNN_*.md / spec_*.md / ADR-NNNN.md) を引用形式で含め、調査の前提を共有する。
JTBD 粒度確認(ADR-0043 前提条件): RQ 起案前に、対象の痛みが
docs/_internal/01_discovery/customer_insight/_jtbd_list.mdの承認済み JTBD に紐付いていることを確認する。紐付いていない場合は D1 §1.3 の条件 4 に戻る。各 RQ ファイルの frontmatter にはjtbd: JTBD-NNNタグを必ず付与する(adr-lint.mjs --check-jtbd-refで CI 検証される)。
2.2 担当ツール / 担当者
- ツール:
scripts/5_generate_rq_prompt.js(Gemini 2.5 Pro で完成版プロンプトを生成) - 担当者: 代表取締役 + Claude Code (メタプロンプト下書き補助)
- 入力:
docs/_internal/research_prompts/RQ-NNN_{slug}_meta_prompt.md(手動作成のメタ指示)--contextで参照ファイル指定 (関連 dev_mas / spec / ADR)
- 出力:
docs/_internal/research_prompts/RQ-NNN_{slug}_prompt.md(Deep Research 投入用)docs/_internal/research_prompts/RQ-NNN_{slug}_result.md(空テンプレ)tasks/rq_prompts/{timestamp}_RQ-NNN_raw.md(デバッグ用)
2.3 完了条件
RQ-NNN_{slug}_prompt.mdが存在 (scripts/5実行成功)- プロンプト本文に 事実パッケージ (関連 dev_mas / spec / ADR の引用ブロック) が含まれる
- プロンプト末尾に「相談者ペルソナ」「求める出力形式」「参考リンク要求」が明記される
- RQ-NNN の番号採番が既存と衝突しない (
ls docs/_internal/research_prompts/RQ-*で事前確認) - RQ ファイルの先頭 frontmatter に
jtbd: JTBD-NNN(例:jtbd: JTBD-001)が記載されている(_jtbd_list.mdの承認済みエントリの ID)
2.4 RQ-NNN 採番ルール
- 連番 3 桁ゼロパディング (
RQ-001〜RQ-999) - 採番は
docs/_internal/research_prompts/の既存ファイルの最大番号 + 1 - メタプロンプト作成時に番号を確定 (Deep Research 投入後の renumber は不可、リンク腐敗の原因)
2.5 メタプロンプトの書き方 (重要)
メタプロンプト (RQ-NNN_*_meta_prompt.md) は以下の構造で作成:
# RQ-NNN メタプロンプト: <調査タイトル>
## 0. 用途・調査背景
- 起票日 / 起票者 / 関連 MAS or ADR
## 1. 事実パッケージ (Deep Research に渡す前提)
- 関連 dev_mas / spec / ADR への参照 (相対パス、`scripts/5` が自動展開する)
- bizlp 文脈の制約 (1 人法人 / GAS / 監査要件)
## 2. 調査項目
- Q1. ...
- Q2. ...
- (調査項目は **5-8 個**、各項目に「結論 → 根拠 → 比較表 → 推奨案 → 参考リンク」を要求)
## 3. 求める出力形式
- 文量 (8,000-15,000 字)
- 章立て
- 参考リンク必須
## 4. 除外論点
- 「○○ は調査範囲外」と明示
2.6 例: RQ-035 (Agentic AI 金融計画 / 投入実績)
docs/_internal/research_prompts/RQ-035_agentic_ai_financial_planning_meta_prompt.md を参考に: 関連 dev_mas-056 / MAS-067 を --context 指定、Gemini が事実パッケージを抽出してプロンプト本文に引用ブロックで埋め込んだ。出力 12,000 字、両エンジン投入後 D4 で synthesis 化済。
2.7 アンチパターン
| やってはいけない | なぜ |
|---|---|
| メタプロンプトに事実パッケージを書かず、Deep Research にいきなり質問だけ投入 | Gemini/Claude が bizlp 文脈を知らずに一般論回答、D4 で「使えない」と判定されコスト無駄 |
--context 指定なしで scripts/5 を実行 | 自動抽出は相対パス限定、肝心の参照が欠落しやすい (RQ-001 〜 020 で頻発した) |
| メタプロンプトを「ChatGPT に書かせて」と指示する | bizlp の事実誤認 (存在しない MAS 番号引用等) が混入、Deep Research が嘘前提で調査する |
2.8 観測指標
- メタプロンプト作成時間 (目標 30 分以内)
- 事実パッケージ抽出ファイル数 (目標 3-7 ファイル、これ未満だと文脈不足、これ超だと焦点ボケ)
2.9 PII マスキング規約 (機微情報の外部送信リスク管理)
GPT-4o 指摘反映 (PR #692)、2026-05-14 追記
- メタプロンプト + 投入 prompt の事実パッケージに 取引先名 / 金額 / 個人氏名 / 口座番号 を含めない (
[MASKED:PARTNER]/[MASKED:AMOUNT]/[MASKED:PERSON]形式に置換) - 機密データ (creds.json / .clasp*.json / 個人 PII / 本番スプレッドシート ID) は
scripts/5の--context指定対象から除外、参照源はマスク済のスペック・ADR・公開ドキュメントに限定 - Deep Research の
result_*.mdにマスク逆引き可能な記述が混入していないか、コミット前に検出:grep -nE "(株式会社|有限会社|[0-9]{4}/[0-9]{2}/[0-9]{2}|[0-9,]+円|@[a-z0-9.-]+\.(co|com|net))" \ docs/_internal/research_prompts/RQ-*_result_*.md - 検出時は該当箇所をマスクして再コミット (履歴に残った場合は別途 BFG / git-filter-repo で除去判断)
3. D3: 並列 Deep Research 実施
3.1 目的
RQ-NNN_*_prompt.md を Gemini Deep Research と Claude Research の両方に並列投入し、独立した 2 つの調査回答を得る。両者の 完全一致部分 を採用根拠の強い証拠とし、相違点 を bizlp 文脈で判断する材料とする。
3.2 担当ツール / 担当者
- 担当者: 代表取締役 (Web UI 経由、両エンジンを並列起動)
- ツール:
- Gemini Deep Research: aistudio.google.com (Deep Research モード) — 出力 6,000-12,000 字
- Claude Research: claude.ai (Research モード) — 出力 8,000-15,000 字
- 保存先:
docs/_internal/research_prompts/RQ-NNN_{slug}_result_gemini.mddocs/_internal/research_prompts/RQ-NNN_{slug}_result_claude.md
3.3 完了条件
- 両エンジン結果が
RQ-NNN_{slug}_result_{gemini,claude}.mdに保存済 - 各結果ファイル冒頭に 投入先 / 投入日 / Generated from のヘッダ記載 (renumber 防止のため)
- 出力が極端に短い (< 2,000 字) 場合は再投入を試みる (調査不十分の兆候)
3.4 並列起動の運用
両エンジンを同時に投入する目的は「独立した 2 つの調査」を得ること:
- 順次 (Gemini → Claude) に投入すると、人間が無意識に Gemini の回答に引きずられた質問追加を Claude にしがち → 独立性が損なわれる
- 同じ
RQ-NNN_*_prompt.mdを両方にコピペ、追加質問なしで投入、結果が出るまで待つ - 「Claude には Gemini と違う追加質問を投げよう」と思った時点で D3 を逸脱 → D2 に戻ってプロンプト改訂
3.5 アンチパターン
| やってはいけない | なぜ |
|---|---|
| 片方のエンジンだけで判断 (Gemini オンリー / Claude オンリー) | 単一エンジンのバイアスが synthesis に流入、両者一致点による「採用根拠の強さ」を放棄 |
| 結果の renumber (RQ-040 を後から RQ-041 に変更等) | リンク腐敗、Git 履歴の追跡不能化、synthesis 内部参照が壊れる |
| Deep Research の待ち時間に追加質問を入れる | 独立性破壊、両エンジン回答の比較可能性が損なわれる |
3.6 観測指標
- 両エンジン保存完了率 (目標 100%、片方欠落の場合は D4 進めない)
- 平均出力字数 (両エンジンとも 6,000 字以上が目安)
4. D4: 結果合成 + 価値判定
4.1 目的
D3 の両エンジン結果を 論点ごとに突き合わせ、bizlp 文脈の採択方針案を整理する。Mom Test 観点で再検証し、「解く価値あり (Backlog 行き)」/「対象外 (Closed)」/「再調査必要 (D2 戻り)」のいずれかに判定する。
4.2 担当ツール / 担当者
- 担当者: 代表取締役 (手動合成、Claude Code に補助依頼可)
- 出力:
docs/_internal/research_prompts/RQ-NNN_{slug}_synthesis.md
4.3 完了条件
RQ-NNN_{slug}_synthesis.mdが存在- 冒頭に TL;DR (両者一致核心 / 相違点 / bizlp 採択方針)
- 完全一致部分 (採用根拠) と 相違点 (bizlp 文脈で判断) を章として分離
- 末尾に 判定区分 を明記 (下記 4.4)
- 判定区分が「解く価値あり」の場合は A1 への引き継ぎ情報 (痛み記述 + ユーザー + 影響) を 3 行以内で記録
4.4 判定区分 (3 値)
| 判定 | 意味 | 次のアクション |
|---|---|---|
| 解く価値あり (Backlog 行き) | Mom Test 観点で過去行動の痛みが検証され、解決策の概念も妥当 | → Stage 2 (A1-A5) へ、usecase_dev_mapping.md に新規行追加 |
| 対象外 (Closed) | Deep Research の結論として「解かない方が良い」「外部 SaaS で十分」「YAGNI」 | → synthesis に Closed 理由記録、Backlog には積まない |
| 再調査必要 (D2 戻り) | 両エンジン回答が浅い / 事実誤認多発 / 調査項目が外れた | → メタプロンプトを改訂、新しい RQ-NNN を採番して再投入 (古い RQ-NNN は「Withdrawn」として保持) |
4.5 Mom Test による再検証
D4 で synthesis.md 起草中に、以下のチェックを実施:
- 「過去の行動」根拠が synthesis 内に再記述されているか?
- YES → そのまま進行
- NO → D1 の TODO_future.md エントリを参照、痛みの定量データを再掲載
- 両エンジン回答に「○○があったら便利」レベルの仮説が混入していないか?
- 混入あり → synthesis でその部分を「仮説 (未検証)」と注釈
- 全体が仮説ベース → 判定は「対象外」または「再調査必要」へ
- 「代表取締役自身が先月実際に行動した」根拠で説明できるか?
- 説明可能 → Mom Test PASS
- 説明不可能 → 痛みは存在しない or 観測不足、判定再考
4.6 例: RQ-040 (開発組織化パラダイム)
docs/_internal/research_prompts/RQ-040_dev_organization_paradigm_synthesis.md を参考に:
- TL;DR で「両者完全一致: Walking Skeleton + Now/Next/Later + UC スライス採用」を明記
- 相違点 3 件 (進捗管理ツール / 二重ビュー / Wardley Mapping) を独立章で整理
- bizlp 採択方針として「Claude 案ベース + Gemini の Q4/Q7 補強」を提示
- 判定: 「解く価値あり → ADR-0021 起案準備資料」 (Stage 2 ではなく直接 ADR 起案、メタ ADR のため例外)
4.7 D4 → A1 引き継ぎ
「解く価値あり」と判定されたら、以下の最低限情報を A1 に渡す (synthesis の末尾セクション「Stage 2 引き継ぎ情報」として記載):
## Stage 2 引き継ぎ情報 (A1 入力)
- **痛み記述**: 紙請求書受領時の手入力作業
- **ユーザー (誰が困るか)**: 代表取締役 (現状単独運用)
- **影響 (どのくらい困るか)**: 月 12 件 × 5 分 = 60 分/月、打鍵ミスで月 1-2 件の仕訳訂正発生
- **関連 RQ**: RQ-NNN
A1 で usecase_dev_mapping.md に新規行を追加する際の元情報となる。
4.8 アンチパターン
| やってはいけない | なぜ |
|---|---|
| 判定区分を書かず synthesis を「完了」とする | Stage 2 への引き継ぎ点が再び暗黙運用に逆戻り、追跡不能 RQ 化 |
| 両エンジン回答を片方だけ採用して synthesis 化 | 独立 2 エンジン投入の意味がなくなる、Confirmation Bias |
| 「対象外」と判定したのに Backlog に積む | 価値判定ゲートの形骸化、Now/Next/Later の信頼性低下 |
4.9 観測指標
- 「対象外 (Closed)」判定率 (目標 30-50%): これ未満だと Mom Test が形骸化、超過は D2 でフィルタしきれていない
- 「再調査必要」判定率 (目標 5-10%): 多すぎる場合は D2 メタプロンプト品質が低い
5. 観測指標 (Stage 1 全体)
ADR-0034 §影響 §5.3 で定義された月次集計指標:
| 指標 | 目標値 | 集計方法 |
|---|---|---|
| D1 → A5 通過時間 (中央値) | < 4 時間 | RQ-NNN ごとの起票日 → A5 完了日の elapsed |
| D4 「対象外 (Closed)」判定率 | 30-50% | grep -l "判定: 対象外" docs/_internal/research_prompts/RQ-*_synthesis.md |
| 追跡不能 RQ 数 (D4 結論なし) | 0 件 | synthesis.md が存在しない RQ-NNN を ls で照合 |
6. References
- ADR: ADR-0034 Stage 1-2 ワークフロー定義
- 関連 ADR:
- 関連ファイル:
scripts/5_generate_rq_prompt.js(D2)docs/_internal/research_prompts/README.md(RQ 採番ルール)docs/_internal/TODO_future.md(D1 痛み記録先)
- 外部資料:
- Steve Blank "Customer Development Model" (Customer Discovery)
- Rob Fitzpatrick "The Mom Test"
- ADR-0034 §5 完了条件 #5 の検証手順正規化 (GPT-4o 指摘反映):
- ADR 本文の
grep -cE "customer_discovery_workflow|backlog_pipeline_workflow" docs/_config.jsonは同一行に両語混在時に過小カウントするため、以下を使用: grep -oE "customer_discovery_workflow|backlog_pipeline_workflow" docs/_config.json | wc -l→2python3 -c "import json; n=json.load(open('docs/_config.json'))['nav']; files=[p['file'] for g in n if 'pages' in g for p in g['pages'] if 'file' in p]; assert sum(1 for f in files if 'customer_discovery_workflow' in f or 'backlog_pipeline_workflow' in f)==2"- 本 ADR 本文はイミュータブル原則のため未変更、将来 ADR-NNNN の corrigendum で本文側の補正を検討
- ADR 本文の