Claude CodeとRSpecでRailsテストを書く最短ルート

ClaudeCode

Rails開発において、テストは品質を保つための重要な工程です。しかし、RSpecの記述は構造やシンタックスに慣れるまで時間がかかり、ゼロから書くと学習コストが高いのも事実。
Claude Codeを使えば、自然言語で仕様を伝えるだけで、RSpecのテストコードを自動生成できます。
この記事では、Claude CodeとRSpecを組み合わせて最短ルートでRailsテストを書く方法を解説します。

なぜRSpecとClaude Codeは相性が良いのか

RSpecはテストの記述パターンがある程度決まっているため、AIによるコード生成と非常に相性が良いです。
Claude Codeにテスト仕様を伝えると、以下を一度に作成できます。

  • spec/modelsspec/controllersのテストファイル
  • 適切なdescribe / context / it構造
  • FactoryBotを使ったテストデータ生成
  • バリデーションや関連付けの検証コード

Claude Codeを使ったRSpec導入の準備

Gemfile

group :development, :test do
  gem 'rspec-rails'
  gem 'factory_bot_rails'
  gem 'faker'
end

インストール

bundle install
rails generate rspec:install

モデルテスト生成の例

Claude Codeへの依頼例

UserモデルのRSpecテストを書いてください。
- nameとemailを持つ
- nameは必須
- emailは必須かつ一意
FactoryBotを使ってください。

生成されるコード例

require 'rails_helper'

RSpec.describe User, type: :model do
  it "is valid with a name and email" do
    user = build(:user)
    expect(user).to be_valid
  end

  it "is invalid without a name" do
    user = build(:user, name: nil)
    expect(user).not_to be_valid
  end

  it "is invalid without an email" do
    user = build(:user, email: nil)
    expect(user).not_to be_valid
  end

  it "is invalid with a duplicate email" do
    create(:user, email: "test@example.com")
    user = build(:user, email: "test@example.com")
    expect(user).not_to be_valid
  end
end

コントローラテスト生成の例

Claude Codeへの依頼例

ArticlesControllerのRSpecテストを書いてください。
- index, show, create, update, destroyを持つ
- 認証済みユーザーのみアクセス可能

生成されるコード例

RSpec.describe ArticlesController, type: :controller do
  before { sign_in create(:user) }

  describe "GET #index" do
    it "returns a success response" do
      get :index
      expect(response).to be_successful
    end
  end

  describe "POST #create" do
    it "creates a new Article" do
      expect {
        post :create, params: { article: attributes_for(:article) }
      }.to change(Article, :count).by(1)
    end
  end
end

機能テスト(Feature Spec)生成の例

Claude Codeへの依頼例

ユーザーが記事を投稿できるFeature Specを書いてください。
- ログイン済み
- 記事タイトルと本文を入力
- 投稿後に一覧ページにリダイレクト

生成されるコード例

RSpec.feature "Article management", type: :feature do
  scenario "User creates a new article" do
    user = create(:user)
    login_as(user, scope: :user)

    visit new_article_path
    fill_in "Title", with: "My First Article"
    fill_in "Body", with: "This is the body of the article."
    click_button "Create Article"

    expect(page).to have_content("My First Article")
    expect(current_path).to eq(articles_path)
  end
end

プロンプト例集

  • バリデーションテスト

Productモデルのprice0未満の場合は無効になるRSpecテストを書いてください。
  • APIテスト

Tasks APIのindexエンドポイントのRSpecリクエストテストを書いてください。
  • リファクタリング依頼

このRSpecコードをDRY原則に沿ってリファクタリングしてください。

まとめ

Claude Codeを活用すれば、RSpecの初期学習コストを大幅に削減できます。
次回は「Claude CodeでのRailsエラー解析&修正依頼のベストプラクティス」を解説します。

コメント

タイトルとURLをコピーしました