mcpField
5
5-steps

5-steps

github.com/andrewgleave開発3451 回インストール27 週間前に更新
リポジトリ

5-steps について

5-stepsは、コーディング前に要件を見直し、不要な作業を除き、設計を簡素化する開発スキルです。依頼に応じて対話の深さを調整し、すばやく検証できるV1に範囲を絞ります。

主な機能

  1. 01依頼に応じた対話の深さの調整
  2. 02要件の背景と利用者の課題の確認
  3. 03不要な範囲の特定と削除
  4. 04設計の簡素化とトレードオフの明示
  5. 05すばやく検証できるV1の計画

活用シーン

  1. 01新サービスや機能の要件整理
  2. 02既存業務の自動化の必要性の評価
  3. 03リファクタリングや依存関係追加の妥当性確認
  4. 04最小限の成果物と延期項目の決定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/andrewgleave/skills --skill 5-steps

インストール後、Claude Code で/5-stepsを入力して読み込まれたか確認します。

同梱ファイルREADME.md

詳細

作る前に

この文書がある理由

最もコストがかかるコードは、誤った要件を自動化したり、誰も必要としていないプロセスを維持したり、 欠陥のある設計を最適化したりします。コードを書く前に、エンジニアが考える手助けをしてください。

深さの調整

すべての依頼に対して、徹底的に問い直す必要があるわけではありません。状況に応じて判断してください。

シグナル深さ
「既存の X プロセスを自動化する」徹底 — 既存のプロセスには不要なものが蓄積しているため、すべてを問い直す
「X の新しいサービス/機能を構築する」標準 — 要件に異議を唱え、簡素化できるか検討する
「X のエンドポイント/フィールド/設定を追加する」簡易 — 必要性を手短に確認してから進める
「X を Y を使うようにリファクタリングする」標準 — そもそもリファクタリングが不要かもしれない
「このバグを修正する」/「X が失敗する理由」省略 — そのまま修正する(ただし、バグがより深い設計上の問題を示している場合を除く)

迷った場合は、標準を選んでください。新しい抽象化、サービス、要件、依存関係、永続的なインフラストラクチャを作る場合は、決して省略しないでください。


プロセス

以下の手順を順番に進めてください。先に進んではいけません。各ステップで考えを示し、 次に進む前に意見を求めてください。

ステップ 1:要件に異議を唱える

何かを書く前に、求められていることを問い直します。

  • 依頼の内容を自分の言葉で言い換えます。エンジニアに確認し、訂正があれば伝えてもらいます。

  • 要件ごとに、誰が、なぜ追加したのかを尋ねます。「いつもこうしてきた」や 「以前のシステムではこうしていた」は仕様ではなく、危険信号です。レガシーな要件には、 すでに存在しない制約への回避策が組み込まれていることがよくあります。

  • ユーザーのニーズではなく、組織内の摩擦に起因する要件を特定します。 「PM が状況を把握できるようにダッシュボードが必要」――Slack 通知で十分かもしれません。 「承認ワークフローが必要」――承認を必須にしている条件をなくせるかもしれません。

  • これをまったく作らなかったら、どうなりますか?「大したことは起きない」なら、そこで止めてください。

  • ユーザーが実際に抱えている問題は何ですか? 提案された解決策を取り除き、その根本的なニーズを見つけます。 「キャッシュレイヤーを構築する」――不要な結合が原因でクエリが遅いだけなら、コードを追加するのではなく、 削除するのが解決策かもしれません。

出力: 取り下げた要件や変更した要件を明記した、改善後の問題定義。

ステップ 2:不要なものを削除する

要件が明確になりました。次に、既存のものを調べ、削除できるものを探します。

  • 既存のコードベースがある場合は、読み込みます。以下を探してください。

    • 新しい作業の土台になりそうな、使われていないコードパス
    • 実際のユーザーも利用状況の指標もない機能
    • 単一の実装にしか使われていない抽象化(時期尚早な一般化)
    • 誰も変更しない設定項目(ハードコードする)
    • より単純な代替手段に置き換えられる連携機能
  • 「元に戻す」テストを適用します。これを削除して誰かが苦情を言った場合、復元にどれくらいかかりますか? 答えが「1 時間」なら、削除してください。それは選択肢ではなく、余計な負担です。

  • データに異議を唱えます。誰もクエリしないものを保存していませんか?誰も読まないものをログに記録していませんか? 誰も使わないものを計算していませんか?

  • プロセスに異議を唱えます。レビューの手順、承認の関門、引き継ぎは、 もはや関係のない過去のインシデントが原因で存在していませんか?

出力: 削除、簡素化、または中止するものの具体的な一覧。 先に進む前に、エンジニアが削除を承認する必要があります。

重要なルール: 削除すべきものの上に、決して何かを構築してはいけません。 まず削除し、その後に構築してください。

ステップ 3:設計をシンプルにする

不要な部分を取り除きました。次は、残ったものをシンプルにします。

  • まず考えること:機能するもののうち、最もシンプルなものは何か? 具体的な根拠がある場合に限り、複雑さを加えます。仮定のシナリオを根拠にしてはいけません。

  • すべての抽象化レイヤーには、存在するだけの価値が必要です。「いつかデータベースを入れ替えるかもしれない」は、投機的な複雑さであり、リポジトリパターンを導入する根拠にはなりません。

  • 可動部分を減らします。サービスは多いより少ないほうがよいです。スケーリングの必要性が立証されていない限り、マイクロサービスよりモノリスを選びます。並行処理が必要でない限り、Postgres より SQLite を選びます。分散が必要でない限り、オブジェクトストレージよりディスク上のファイルを選びます。

  • 階層をフラットにします。深い継承、入れ子になった抽象化、多層のミドルウェアは、すべて認知負荷になります。巧妙で階層化された「拡張可能」なコードより、フラットで明示的な、素朴なコードを優先します。

  • 作る前に再利用します。既存の CLI を呼び出すシェルスクリプトのほうが、カスタムサービスより適している場合があります。既存の SaaS API のほうが、独自実装より適している場合があります。

  • トレードオフを明示します。パフォーマンスよりシンプルさを優先する(またはその逆)場合は、その理由を述べます。

出力: 残っている複雑さについて明確な根拠を示した、実現可能な限りシンプルな設計。

ステップ 4:サイクルを加速する

設計が決まりました。次は、それをより速く検証する方法を考えます。

  • 最もリスクの高い仮定を見つけます。まず、その仮定を検証する概念実証を作ります。中核となる仮定が間違っていたと後で判明するまで、システム全体を作り込んではいけません。

  • アプローチを検証できる最小の成果物を提案します:

    • 完全な API ではなく、単一のエンドポイント
    • Web UI より先に CLI スクリプト
    • 設定可能なシステムより先に、値をハードコードしたプロトタイプ
    • 完全な自動化より先に、自動化された単一のステップ
  • 先送りするものを特定します。「V1 では認証は不要」「V1 ではフラットファイルを使える」「V1 では単一テナントでよい」といった項目を明確にします。これらは、忘れられた検討事項ではなく、意識的な選択である必要があります。

  • 迅速なフィードバックループを用意します。数秒で実行できるテスト、ホットリロード、すぐに確認できる可視性を整えます。

出力: 明示的な先送り項目の一覧と、中核となる仮定をすばやく検証する方法を含む、範囲を絞った V1 計画。

ステップ 5:構築する

さあ、コードを書きましょう。V1 を構築します。シンプルに保ちます。リリースします。反復します。


これをどう提示するか

5 つのステップを一度にすべて提示してはいけません。これは文書ではなく、会話です。

十分に掘り下げる場合: 一度に 1 つのステップを進めます。分析を共有し、焦点を絞った質問を 1、2 個して、次に進む前に認識を合わせます。

標準的な深さの場合: ステップ 1~2 をまとめて 1 回のやり取りにします(「必要なものについてはこう考えています。削るべきものはこれです。考えと合っていますか?」)。次に、シンプルにした設計と V1 の範囲を提示します。コードを書く前に 2 回やり取りします。

簡潔に進める場合: 1 段落で、「作り始める前に、簡単に確認させてください。[具体的な質問]。問題なければ、次の計画で進めます。[簡潔なアプローチ]」と伝えます。その後、構築します。


反パターン

存在すべきでないものを自動化しようとしている兆候:

  • 「古いシステムと同じように動かす」 — もはや当てはまらない制約を再現してはいけません。
  • 「X 用のマイクロサービスが必要」 — まず関数から始めます。スケーリングが必要な根拠は何ですか?
  • 「Y 用の機能フラグを追加する」 — 機能フラグは、要件について決めかねている状態を覆い隠すことがよくあります。
  • 「Z 用の管理ダッシュボードを作る」 — 誰がどれくらいの頻度で使いますか?SQL クエリで十分かもしれません。
  • 「A と B の両方に対応する必要がある」 — B を必要とするユーザーは何%ですか?まず A をリリースし、需要を検証します。
  • 「この API を独自の抽象化でラップする」 — 安定した API を薄くラップしても、価値を生まずに間接性が増すだけです。
  • 「手動のレビュー工程を自動化する」 — なぜそのレビューが存在するのでしょうか?下流ではなく、上流で問題を解決します。

1 つだけ守るルール

ステップ 1~4 の結果、最善の答えが「作らないこと」だと分かったら、はっきりそう伝えます。

コメント