why について
問題の症状から根本原因をたどる、なぜなぜ分析のスキルです。原因の記録と逆向きの検証、複数の原因の分岐分析、根本原因に対処する解決策の検討を支援します。
主な機能
- 01なぜを重ねる原因分析
- 02原因の逆向き検証
- 03複数原因の分岐分析
- 04根本原因への解決策
活用シーン
- 01本番環境の不具合調査
- 02パイプライン障害の反復分析
- 03機能デプロイの遅延調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ neolabhq/ context-engineering-kit --skill whyインストール後、Claude Code で/whyを入力して読み込まれたか確認します。
詳細
ファイブ・ホワイ分析
「なぜ?」を繰り返し問いかけ、症状から根本原因へと掘り下げて問題を調査する根本原因分析を適用します。
説明
表面的な症状から根本的な原因へと進むため、「なぜ?」を繰り返し問いかけます。応急処置ではなく、システム上の問題を特定します。
使い方
/why [issue_description]
変数
- ISSUE:分析する問題または症状(デフォルト:入力を促す)
- DEPTH:「なぜ?」を繰り返す回数(デフォルト:5、必要に応じて調整)
手順
- 問題を明確に述べます
- 「なぜこれが起きたのか?」と問いかけ、回答を記録します
- その回答に対して、もう一度「なぜ?」と問いかけます
- 根本原因にたどり着くまで続けます(通常は5回です)
- 逆方向にたどって検証します:根本原因 → 症状
- 複数の原因が見つかった場合は、分岐を掘り下げます
- 症状ではなく、根本原因に対処する解決策を提案します
例
例 1:本番環境のバグ
Problem: Users see 500 error on checkout
Why 1: Payment service throws exception
Why 2: Request timeout after 30 seconds
Why 3: Database query takes 45 seconds
Why 4: Missing index on transactions table
Why 5: Index creation wasn't in migration scripts
Root Cause: Migration review process doesn't check query performance
Solution: Add query performance checks to migration PR template
例 2:CI/CD パイプラインの失敗
Problem: E2E tests fail intermittently
Why 1: Race condition in async test setup
Why 2: Test doesn't wait for database seed completion
Why 3: Seed function doesn't return promise
Why 4: TypeScript didn't catch missing return type
Why 5: strict mode not enabled in test config
Root Cause: Inconsistent TypeScript config between src and tests
Solution: Unify TypeScript config, enable strict mode everywhere
例 3:複数分岐の分析
Problem: Feature deployment takes 2 hours
Branch A (Build):
Why 1: Docker build takes 90 minutes
Why 2: No layer caching
Why 3: Dependencies reinstalled every time
Why 4: Cache invalidated by timestamp in Dockerfile
Root Cause A: Dockerfile uses current timestamp for versioning
Branch B (Tests):
Why 1: Test suite takes 30 minutes
Why 2: Integration tests run sequentially
Why 3: Test runner config has maxWorkers: 1
Why 4: Previous developer disabled parallelism due to flaky tests
Root Cause B: Flaky tests masked by disabling parallelism
Solutions:
A) Remove timestamp from Dockerfile, use git SHA
B) Fix flaky tests, re-enable parallel test execution
注意事項
- 症状だけで止めず、システム上の問題を掘り下げます
- 根本原因が複数ある場合があります。別の分岐も掘り下げます
- 後で参照できるよう、「なぜ?」を一つずつ記録します
- 技術的な原因とプロセスに関する原因の両方を考慮します
- 大切なのは「なぜ?」を厳密に5回問うことではありません。真の根本原因にたどり着いたら止めます
- 技術的な詳細だけでなく、システムやプロセス上の問題にたどり着いたら止めます
- 根本原因が複数あることはよくあります。分岐を個別に掘り下げます
- 「ヒューマンエラー」が見つかった場合は、さらに掘り下げます。なぜエラーが起こり得たのでしょうか?
- 後で参照できるよう、「なぜ?」をすべて記録します
- 根本原因には通常、検証の不足、ドキュメントの不足、不明確なプロセス、または自動化の不足が関係します
- 解決策をテストします:実装 → 症状が解消したことを検証 → 再発を監視
コメント
Markdown 対応