mcpField
R
rails-tdd-slices

rails-tdd-slices

github.com/midudevテスト・品質7.0k55 回インストール1 週間前に更新
リポジトリ

rails-tdd-slices について

Rails 開発で、重要な振る舞いを最小限の準備で検証できるテスト境界を選ぶスキルです。変更内容に応じたスペックの種類とパスを示し、実装前に適切な理由で失敗することを確認します。

主な機能

  1. 01振る舞いに基づくテスト境界の選択
  2. 02スペック種別とパスの提案
  3. 03失敗確認の実装ゲート
  4. 04テスト設計レビューのチェックポイント
  5. 05バグ再現スペックの指針

活用シーン

  1. 01API 契約変更に適したリクエストスペックの選択
  2. 02サービス境界での処理フローのテスト
  3. 03報告されたバグの回帰スペック選定

インストール

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

$npx skills add https://github.com/midudev/autoskills --skill rails-tdd-slices

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

詳細

Rails TDD スライス

タスクで最も難しいのが、TDD をどこから始めるかの判断である場合に、このスキルを使用します。

基本原則: 不必要なセットアップを最小限に抑えながら、振る舞いを証明できる最も価値の高い境界から始めます。

クイックリファレンス

変更の種類最初のスペックパス理由
API コントラクト、パラメーター、ステータスコード、JSON の構造リクエストスペックspec/requests/実際の HTTP コントラクトを証明できます
一貫性のあるレコードまたは値オブジェクトに関するドメインルールモデルスペックspec/models/ドメインの振る舞いをすばやくフィードバックできます
複数のコラボレーターにまたがる複数ステップのオーケストレーションサービススペックspec/services/ワークフローの境界に焦点を当てます
エンキュー/実行/再試行/破棄の振る舞いジョブスペックspec/jobs/非同期のセマンティクスを直接捉えます
重要な Turbo/Stimulus またはブラウザーで見えるフローシステムスペックspec/system/ブラウザー操作が実際のリスクである場合にのみ使用します
エンジンのルーティング、ジェネレーター、ホストとの統合エンジンスペックspec/requests/ またはエンジンのパス通常のアプリスペックではエンジンの配線を見落とします。rails-engine-testing を参照してください
バグ修正再現スペックバグが確認される場所修正を証明し、再発を防ぎます
レイヤーの判断に迷う場合まず上位の境界—詳細に踏み込む前に、実際の振る舞いを証明するほうが簡単です

ハードゲート

DO NOT choose the first spec based on convenience alone.
DO NOT start with a lower-level unit if the real risk is request, job, engine, or persistence wiring.
ALWAYS run the chosen spec and verify it fails for the right reason before implementation.

プロセス

  1. 振る舞いを明確にする: 証明すべき、ユーザーから見える結果または不変条件を述べます。
  2. 境界を特定する: 振る舞いが最初に観測される場所を判断します。HTTP リクエスト、サービスのエントリーポイント、モデルルール、ジョブの実行、エンジン統合、外部アダプターのいずれかです。
  3. 最小限で強力なスライスを選ぶ: 無関係なレイヤーを巻き込まずに振る舞いを証明できるスペックの種類を選びます。
  4. パスを提案する: 通常の Rails の規約に従って、想定されるスペックのパスを示します(例:spec/requests/...、spec/services/...、spec/jobs/...、spec/models/...)。
  5. 失敗する例を 1 つ書く: 最小限に保ちます。ゲートを開くには 1 つの例で十分です。
  6. 実行して検証する: セットアップの不具合ではなく、振る舞いが欠けていることが原因で失敗することを確認します。
  7. 引き継ぐ: その後は、スライスに合った rspec-best-practices、rspec-service-testing、rails-engine-testing、または実装スキルを続けて使用します。

例

良い例:新しい JSON エンドポイント
# Behavior: POST /orders validates params and returns 201 with JSON payload
# First slice: request spec
# Suggested path: spec/requests/orders/create_spec.rb

RSpec.describe "POST /orders", type: :request do
  let(:user) { create(:user) }
  let(:valid_params) { { order: { product_id: create(:product).id, quantity: 1 } } }

  before { sign_in user }

  it "creates an order and returns 201" do
    post orders_path, params: valid_params, as: :json
    expect(response).to have_http_status(:created)
    expect(response.parsed_body["id"]).to be_present
  end
end
良い例:新しいオーケストレーションサービス
# Behavior: Orders::CreateOrder validates inventory, persists, and enqueues follow-up work
# First slice: service spec
# Suggested path: spec/services/orders/create_order_spec.rb

RSpec.describe Orders::CreateOrder do
  subject(:result) { described_class.call(user: user, product: product, quantity: 1) }

  let(:user)    { create(:user) }
  let(:product) { create(:product, stock: 5) }

  it "returns a successful result with the new order" do
    expect(result).to be_success
    expect(result.order).to be_persisted
  end
end

テストフィードバックのチェックポイント

最初の失敗するスペックを書いて実行した後、実装に進む前に一度立ち止まり、レビュー用にテストを提示します。

CHECKPOINT: Test Design Review

1. Present: Show the failing spec(s) written
2. Ask:
   - Does this test cover the right behavior?
   - Is the boundary correct (request vs service vs model)?
   - Are the most important edge cases represented?
   - Is the failure reason correct (feature missing, not setup error)?
3. Confirm: Only proceed to implementation once test design is approved.

重要な理由: 設計の悪いテストをもとに実装すると、TDD のサイクルを無駄にします。今ここで 2 分かけてテストをレビューすれば、後で全面的に書き直すのを防げます。

引き継ぎ: テスト設計が確認されたら、TDD ゲートサイクル全体には rspec-best-practices を使用します。

落とし穴

落とし穴対応方法
簡単だからと PORO のスペックから始める簡単であることは、信号が強いことを意味しません。実際の振る舞いを証明できる境界を選びます
実行前に 3 種類のスペックを書くスライスを 1 つ選び、実行して失敗を証明してから進めます
何でもリクエストスペックにするドメインルールによっては、モデルまたはサービスレイヤーで証明するほうが適しています
コントローラーの振る舞いにモデルスペックを使うコントローラーと API には、リクエストレベルでの証明が必要です
HTTP のエントリーポイントとしてコントローラースペックを既定で使うリポジトリに既存の理由がない限り、リクエストスペックを優先します
システムスペックに早々に進む下位レイヤーでは証明できない重要なブラウザーフローに限って使用します
「リクエストスペックは後で追加します」スペックがゲートです。最初のスライスが正しい理由で失敗してから実装します
最初のスペックに過剰なファクトリーのセットアップが必要になる過剰なセットアップは境界が間違っている兆候です。簡素化するか、スライスを移動します

統合

スキル連携するタイミング
rspec-best-practices最初のスライスを選んだ後、TDD のループを正しく実施するため
rspec-service-testing最初のスライスがサービスオブジェクトのスペックの場合
rails-engine-testing最初のスライスがエンジンに属する場合
rails-bug-triage既存のバグレポートが出発点の場合
refactor-safelyタスクの大部分が構造的なもので、まず特性テストが必要な場合

コメント