| name | five-whys |
| description | Five Whys分析で問題の根本原因を特定し、本質的な解決策を導出する。問題の原因分析、根本原因の特定、なぜなぜ分析、トラブルシューティング、障害分析、インシデント振り返り、ポストモーテムなど、「なぜこの問題が起きたのか」を深掘りして解決策を考えたい場面で使用する。ユーザーが問題の原因について悩んでいたり、表面的な対処ではなく根本的な解決を求めている場合にも発動する。 |
| user-invocable | true |
Five Whys 根本原因分析
問題の表面的な症状ではなく、根本原因を特定し、本質的な解決策を導出する。
入力
$ARGUMENTS で問題の記述を受け取る。引数がない場合は、直前の会話コンテキストから問題を抽出する。
核心原則: 事実に基づく分析
Five Whys分析は事実の連鎖でなければならない。推測や仮説で因果関係を埋めた分析は無価値であり、誤った結論と的外れな対策を生む。
各「なぜ?」の回答は、以下のいずれかの事実に裏付けられていなければならない:
- ユーザーが提供した情報
- ログ、メトリクス、コード、ドキュメントなど検証可能なデータ
- 関係者の証言・報告
事実が不足している場合、分析を推測で進めてはならない。代わりに:
- 自分で収集できる情報は収集する(コード調査、ログ確認、設定ファイル確認など)
- 自分で収集できない情報はユーザーに依頼する(「次の情報がないと分析を進められません: ...」と明示する)
分析プロセス
Step 1: 問題の定義
問題を1文で明確に定義する。具体的・観察可能な事象として記述する。
- 悪い例: 「システムが遅い」
- 良い例: 「注文確定APIのレスポンスタイムが平均2秒を超え、SLOを違反している」
ユーザーの記述が曖昧な場合は、定義を明確化するための質問をする。
Step 2: 事実の収集
分析を始める前に、利用可能な事実を整理する。
- ユーザーから提供された事実を列挙する
- 自分で収集可能な追加情報があれば収集する(コードベースの調査、設定確認、ログ分析など)
- 不足している情報を特定し、分析に不可欠なものはユーザーに提供を依頼する
収集した事実が分析を進めるのに十分かどうかを判断してから、Step 3に進む。
Step 3: Five Whys の実行
事実に基づいて「なぜ?」を繰り返し、因果関係の連鎖を掘り下げる。
実行ルール:
- 各「なぜ?」の回答には、裏付ける事実を明記する。事実がないまま回答を書いてはならない。
- 途中で事実が不足した場合は、その時点で分析を一旦停止し、必要な情報を明示する。
- 5回は目安。根本原因に到達すればそこで止める。到達しなければ続ける。
- 因果関係が分岐する場合は、最も影響の大きい経路を優先しつつ分岐も記録する。
- 「人のミス」で止めない。人がミスした背景にある仕組み・プロセス・環境の問題まで掘り下げる。
- 「自己の解釈ミス」でも止めない。既存ルール(CLAUDE.md、スキル記述等)自体が暴走を誘発している可能性を常に問え。字義通り解釈して問題が起こるならルール側に欠陥がある。
Step 4: 根本原因の特定
Five Whysの連鎖から根本原因を特定する。判定基準:
- 除去可能性: これを取り除けば問題の再発を防げるか?
- 制御可能性: 自分たちの行動で変えられるか?
- 構造性: 個別の事象ではなく、構造的・システム的な要因か?
3つすべてを満たすものが根本原因。事実の連鎖で到達できなかった場合は、根本原因を「未確定」とし、確定に必要な追加調査を提示する。
Step 5: 解決策の導出
根本原因が特定できた場合のみ、解決策を検討する。3層で提案する:
| 層 | 説明 | 例 |
|---|
| 即時対処 | 今起きている症状を止める応急措置 | ホットフィックス、手動リカバリ |
| 直接対策 | 根本原因を直接解消する施策 | 設計変更、プロセス改善 |
| 再発防止 | 同種の問題が将来発生しない仕組み | 自動検知、ガードレール、教育 |
解決策の評価基準:
- 効果: 根本原因をどの程度解消するか
- 実現性: 実行可能か、コストは見合うか
- 副作用: 新たな問題を生まないか
出力フォーマット
事実が十分にある場合
## 問題定義
[1文で定義した問題]
## 確認済みの事実
- [事実1: 出典]
- [事実2: 出典]
- ...
## Five Whys 分析
| # | なぜ? | 回答 | 裏付ける事実 |
|---|--------|------|-------------|
| 1 | なぜ[問題]が起きたのか? | ... | [具体的な事実への参照] |
| 2 | なぜ[Why1の回答]なのか? | ... | [具体的な事実への参照] |
| ... | ... | ... | ... |
> **分岐**: [因果関係が分岐した箇所と、選択しなかった経路の簡潔な記録]
> (分岐がない場合は省略)
## 根本原因
[特定した根本原因]
- 除去可能性: [評価]
- 制御可能性: [評価]
- 構造性: [評価]
## 解決策
### 即時対処
- [施策]: [効果 / 実現性 / 副作用の簡潔な評価]
### 直接対策
- [施策]: [効果 / 実現性 / 副作用の簡潔な評価]
### 再発防止
- [施策]: [効果 / 実現性 / 副作用の簡潔な評価]
## 推奨アクション
[最も優先すべきアクションを1-3個、具体的に記述]
事実が不足している場合
## 問題定義
[1文で定義した問題]
## 確認済みの事実
- [事実1: 出典]
- ...
## Five Whys 分析(途中)
| # | なぜ? | 回答 | 裏付ける事実 |
|---|--------|------|-------------|
| 1 | ... | ... | [事実] |
| 2 | ... | ... | [事実] |
| 3 | ← ここで事実が不足 | — | — |
## 分析を進めるために必要な情報
以下の情報が得られれば、分析を継続できる:
1. [必要な情報1]: [なぜこの情報が必要か]
2. [必要な情報2]: [なぜこの情報が必要か]
### 情報の収集方法(提案)
- [情報1の収集方法: ログの確認先、確認すべきメトリクス、聞くべき人など]
- [情報2の収集方法]
注意事項
- ソフトウェアに限らず、あらゆるドメインの問題に適用可能。コンテキストに応じて用語や例を調整する。
- 問題の規模や複雑さに応じて分析の粒度を調整する。単純な問題に過剰な分析をしない。
- 分析が途中で止まることは失敗ではない。事実なしに結論を出すことの方がはるかに有害。