rationale について
rationaleは、実装に入る前に依頼された開発作業の必要性を評価するスキルです。課題、工数、既存の代替案、保守負担を検討し、選択肢と推奨案を示します。
主な機能
- 01根本的な課題を明確化
- 02実装と保守の工数を見積もり
- 03既存の代替手段を調査
- 04設計上および継続的なコストを評価
- 05選択肢と推奨案を提示
活用シーン
- 01機能開発の前に必要性を評価
- 02開発・簡略化・見送りを比較
- 03大規模な連携の範囲を検討
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ noobygains/ godmode --skill rationaleインストール後、Claude Code で/rationaleを入力して読み込まれたか確認します。
詳細
根拠:シニアエンジニアが最初に問うこと
概要
ジュニア開発者とシニアエンジニアの違いは、たった一つの問いにあります。「本当にこれを作るべきでしょうか?」 ジュニア開発者は、あらゆる依頼をそのまま受け入れます。シニアエンジニアは、キーボードに触れる前に、依頼そのものを問い直します。無駄なエンジニアリング作業の大半は、作り方を間違えることではなく、間違ったものを作ることに起因します。
基本原則: 本番コードのレビューと同じ厳密さで、あらゆる依頼に疑問を投げかけてください。最も安価な機能とは、作らない機能です。
例外なし。回避策なし。近道なし。
最優先の指針
NO WORK WITHOUT QUESTIONING WHETHER THE WORK IS WORTH DOING
依頼された作業の必要性、労力、代替案を評価していないなら、あなたはエンジニアではなく、何でも受け入れるだけの存在として動いています。根拠を分析せずに進めることは、エンジニアリング上の過失です。
使用する場面
必須:
- パイプラインに入るあらゆる機能リクエスト(「X を作って」「Y を追加して」)
- 新しいコンポーネント、統合、モジュール
- ユーザーが認識している以上に大規模と思われる範囲の作業
- 重要なアーキテクチャ追加を伴う依頼
- 明確な問題提起のない「あれば便利」な機能
- 流行、話題性、「他のみんなも使っている」に影響された依頼
省略可能:
- バグ修正(問題が明白です)
- ユーザーが明確な根拠とともに詳細に指定したタスク
- セキュリティパッチや脆弱性の修正
- ユーザーからの直接的な指示(「このファイルを削除して」「このスクリプトを実行して」)
- 誤字修正、書式設定、些細な設定変更
- すでにこのスキルを経ている作業
認知の落とし穴
| 正当化の言葉 | 実際のところ |
|---|---|
| 「ユーザーに頼まれたのだから、作るべきだ」 | ユーザーが表明するのは願望であり、検証済みのニーズではありません。願望は正当化の根拠になりません。 |
| 「問い直すほどのことではない」 | 簡単な依頼ほど、大規模な作業が隠れていることがあります。「認証を追加するだけ」は最低でも 3 日かかります。 |
| 「依頼を問い直すのは時間の無駄だ」 | 間違ったものを作ると、5 分の分析に比べて 100 倍以上の時間を浪費します。 |
| 「面倒な相手だと思われる」 | シニアエンジニアは、安易に承認するのではなく、前提に異議を唱えることで信頼を得ます。 |
| 「後でいつでもリファクタリングできる」 | 技術的負債は積み重なります。「後で」とは「決してない」か「10 倍のコストがかかる」という意味です。 |
| 「もう決定済みだ」 | 分析なしに下された決定は、決定ではなく仮定です。 |
| 「他のみんなもこの機能を持っている」 | カーゴ・カルトはエンジニアリングではありません。他の製品には、それぞれ異なる制約があります。 |
| 「数分しかかからない」 | 分析のない見積もりは当てずっぽうです。「数分で済む」は、エンジニアリングにおいて最も危険な言葉です。 |
5 つの分析項目
今後の方針を推奨する前に、5 項目すべてを必ず完了してください。
1. 現実の確認
作業が本当に必要かどうかを確認します。
Ask yourself:
- What specific problem does this solve?
- Who experiences this problem and how often?
- What happens if we do nothing?
- Is this a real pain point or a hypothetical one?
- Has the user articulated the PROBLEM or jumped straight to a SOLUTION?
重要な違い: ユーザーはしばしば、問題(「ページの読み込みが遅い」)を提示すべきところで、解決策(「キャッシュ層を追加して」)を提示します。必ず根本の問題までさかのぼってください。提示された解決策が最善とは限りません。
2. 労力の分析
実際のコストを正直に分類します。エンジニアは慢性的に作業量を少なく見積もります。
| 分類 | 時間 | 特徴 |
|---|---|---|
| 些細 | 数分 | 単一ファイルの変更、新しい依存関係なし、アーキテクチャへの影響なし |
| 中程度 | 数時間 | 複数ファイル、新しい依存関係が生じる可能性あり、範囲は限定的 |
| 大規模 | 数日 | 新しいサブシステム、新しいパターン、テスト基盤が必要 |
| 非常に大規模 | 数週間 | アーキテクチャの変更、新しいサービス、データ移行、複数領域にまたがる変更 |
For EACH classification, consider:
- Implementation time (the part engineers estimate)
- Testing time (the part engineers forget)
- Documentation time (the part engineers ignore)
- Review and iteration time (the part engineers deny)
- Maintenance burden going forward (the part nobody thinks about)
Multiply your initial estimate by 2.5. That is closer to reality.
3. 代替案
作り始める前に、すでにあるものを徹底的に調べます。
Search order:
1. Does an existing library/package solve this? (npm, pip, crates, gems)
2. Does an existing service handle this? (Stripe, Auth0, Twilio, SendGrid)
3. Is there an open-source project that does 80% of what's needed?
4. Can an existing feature in the codebase be extended instead?
5. Is there a 10% effort path that delivers 80% of the value?
For EACH alternative found:
- What percentage of the requirement does it cover?
- What are its trade-offs? (cost, vendor lock-in, maintenance)
- How mature and maintained is it?
この段階では、既存の実装を見つけるために godmode:reference-engine を呼び出してください。 ゼロから作る前に、オープンソースの解決策を見つけるために godmode:github-search を呼び出してください。
4. シニアエンジニアの視点
アーキテクチャレビューでプリンシパルエンジニアが用いる考え方を適用します。
Ask yourself:
- What would a staff engineer challenge about this approach?
- What are the hidden costs nobody is thinking about?
- Ongoing maintenance burden
- Cognitive complexity added to the codebase
- Testing surface area increase
- Documentation requirements
- Onboarding cost for future contributors
- What will bite you in 6 months?
- Scaling implications
- Security surface area
- Dependency rot
- Migration pain if requirements change
- Is this solving a symptom or the root cause?
- Are we adding complexity that could be avoided entirely?
5. 判断ポイント
明確で誠実な選択肢をユーザーに提示します。重要な点を隠してはいけません。
ALWAYS present these options (adapt labels to the specific request):
A) Build as requested
- Effort: [classification]
- Trade-offs: [honest assessment]
B) Build a simplified version
- What it covers: [80% path description]
- What it skips: [the 20% that costs 80% of the effort]
- Effort: [classification]
C) Use an existing alternative
- What: [library/service/pattern name]
- Coverage: [what percentage of the need it addresses]
- Trade-offs: [cost, vendor lock-in, limitations]
D) Skip or defer
- Why: [honest rationale - not needed yet, premature, better timing later]
- What to do instead: [the nothing option, or a minimal placeholder]
Recommend ONE option with clear reasoning.
ワークフロー図
digraph rationale {
rankdir=TB;
node [shape=box style=filled];
request [label="User Request Received" fillcolor=lightyellow shape=doublecircle];
skip_check [label="Skip conditions met?\n(bug fix, trivial, pre-analyzed)" fillcolor=lightyellow shape=diamond];
pass_through [label="Pass to intent-discovery" fillcolor="#e8f5e9" shape=doublecircle];
reality [label="1. Reality Check\nIs this genuinely needed?" fillcolor="#e3f2fd"];
effort [label="2. Effort Analysis\nClassify true cost" fillcolor="#e3f2fd"];
alternatives [label="3. Alternative Paths\nSearch before building" fillcolor="#e3f2fd"];
senior [label="4. Senior Engineer Perspective\nHidden costs, 6-month view" fillcolor="#e3f2fd"];
decision [label="5. Decision Point\nPresent options A/B/C/D" fillcolor="#fff3e0"];
user_decides [label="User selects option" fillcolor=lightyellow shape=diamond];
proceed [label="Invoke intent-discovery\nwith validated rationale" fillcolor="#e8f5e9" shape=doublecircle];
defer [label="Work deferred or skipped\nDocument reasoning" fillcolor="#fce4ec"];
request -> skip_check;
skip_check -> pass_through [label="yes"];
skip_check -> reality [label="no"];
reality -> effort;
effort -> alternatives;
alternatives -> senior;
senior -> decision;
decision -> user_decides;
user_decides -> proceed [label="A or B"];
user_decides -> alternatives [label="C - research deeper"];
user_decides -> defer [label="D"];
}
分析の提示
出力形式:
## Rationale Analysis: [Request Summary]
### Problem Statement
[What problem does this actually solve? Restate in your own words.]
### Effort Estimate
[Classification] — [Brief justification for the classification]
### Alternatives Considered
- [Alternative 1]: [coverage %] — [trade-off summary]
- [Alternative 2]: [coverage %] — [trade-off summary]
### Hidden Costs
- [Cost 1 nobody mentioned]
- [Cost 2 nobody mentioned]
### Options
**A) Build as requested** — [effort], [one-line trade-off]
**B) Simplified version** — [effort], [what you keep, what you cut]
**C) Existing alternative** — [name], [coverage], [trade-off]
**D) Skip/defer** — [why this might be the right call]
### Recommendation
[Your recommended option with clear reasoning]
分析の詳細度は、依頼に見合ったものにしてください。単純な機能であれば、簡潔な分析で十分です。大規模なアーキテクチャの追加であれば、十分に詳しく扱います。ボタンの色を変えるだけなのに、長々と論じてはいけません。
ガードレール
禁止事項:
- ユーザーが早く着手したがっているように見えても、根拠の分析を省略しない
- 代替案を検討せず、「作る」だけを推奨案として提示しない
- ユーザーを失望させないために、必要な作業量を過小評価しない(誠実さが信頼につながります)
- 代替案の検索を省略しない(reference-engine と github-search を呼び出してください)
- 「ユーザーが一番よく分かっている」と依頼をそのまま承認しない(雇われたのは、何でも肯定する相手ではなくエンジニアです)
- 根拠の分析に、実際の作業にかかる時間以上を費やさない(作業量に見合った分析にしてください)
- このスキルを使ってユーザーを妨げたり、いら立たせたりしない(目的は、より良い判断を支援することであり、門前払いすることではありません)
必ず行うこと:
- 選択肢を提示する前に、5つの分析ポイントをすべて完了する
- 少なくとも選択肢AとD(作る/見送る)を提示する。つまり、選択肢の全範囲を示す
- 判断が気まずいものであっても、作業量の分類について正直に伝える
- 作成を推奨する前に、既存の代替案を検索する
- 1つの選択肢を明確に推奨する(「優先事項によります」と曖昧にしない)
- 分析を提示した後は、ユーザーの決定を快く受け入れる
- 依頼の規模に合わせて分析の深さを調整する(些細な依頼には簡潔な分析を行う)
例外的なケース
ユーザーが分析に異議を唱えた場合:
- 推論を一度、明確に説明する
- それでもユーザーが進めたい場合は、その決定を尊重する
- あなたは助言者であり、門番ではありません
- ユーザーがその選択をした理由を記録し、先に進む
依頼が本当に些細な場合:
- 5つのポイントを頭の中ですばやく確認する
- 30秒以内に5つすべての判断がつく場合は、根拠を一文で示して先に進む
- 軽い依頼に、重厚な分析を無理に押し付けない
緊急性が本当に高い場合:
- 緊急性を認める
- 分析を要点(問題+作業量+代替案1つ)に絞る
- 緊急性によってユーザーが見落とす可能性のあるリスクを指摘する
- ユーザーの決定に従って進める
関連スキル
このスキルは、創造的な作業を始める前の最初の関門として、GodMode のワークフローに組み込まれています。
- godmode:intent-discovery -- 根拠の分析は、このスキルより前に行われます。作業が根拠の分析を通過すると、intent-discovery が引き継ぎ、解決策を設計します。
- godmode:reference-engine -- 代替案の検討(ポイント3)の間に呼び出され、既存の実装やパターンを探します。
- godmode:github-search -- 代替案の検討中に呼び出され、一から作る前にオープンソースの解決策を探します。
- godmode:task-planning -- 後続のスキルです。根拠の分析と intent-discovery の両方が完了した後にのみ実行されます。
- godmode:fault-diagnosis -- 別の役割を担います。バグ修正では根拠の分析を省略し、fault-diagnosis に直接進みます。