rails-testing について
rails-testingは、コミュニティが管理するRuby on Railsのテストガイドです。テストスイートを作成・レビューする開発者向けに、テスト設計、データ準備、信頼性、性能を扱う優先度付きルールをまとめています。
主な機能
- 018カテゴリにわたる優先度付き46ルール
- 02RSpecとFactoryBotのテスト指針
- 03リクエストテストとシステムテストの実践
- 04バックグラウンドジョブのテスト指針
- 05テストスイートの性能と信頼性のルール
活用シーン
- 01Rails機能のRSpecテスト作成
- 02不安定なパターンのテストレビュー
- 03CIテストスイートの性能改善
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill rails-testingインストール後、Claude Code で/rails-testingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdasync-separate-enqueue-from-perform.mdasync-test-after-commit.mdasync-test-job-perform.mdasync-test-mailer-delivery.mdasync-use-fake-mode-default.mddata-avoid-fixture-coupling.mddata-build-over-create.mddata-factory-traits.mddata-minimal-attributes.mddata-sequence-unique-values.mddata-transient-attributes.mddesign-avoid-conditional-logic.mddesign-avoid-mystery-guest.mddesign-behavior-over-implementation.mddesign-descriptive-test-names.mddesign-explicit-subject.mddesign-four-phase-test.mddesign-one-assertion-per-test.mdmodel-avoid-testing-framework.mdmodel-test-associations.mdmodel-test-callbacks-sparingly.mdmodel-test-custom-methods.mdmodel-test-enums.mdmodel-test-scopes.mdmodel-test-validations.mdorg-avoid-deep-nesting.md詳細
Community Ruby on Rails のテストに関するベストプラクティス
Community が管理する、Ruby on Rails アプリケーション向けの包括的なテストガイドです。8 つのカテゴリにわたる 46 のルールを、影響度の高い順にまとめ、自動テストの生成、レビュー、リファクタリングの指針を示します。
適用するタイミング
以下の場合に、このガイドラインを参照してください。
- モデル、リクエスト、システムテスト、ジョブの新しい RSpec スペックを書くとき
- traits やシーケンスを使って FactoryBot ファクトリーを設定するとき
- ユーザーの一連の操作を対象とする Capybara のシステムテストを書くとき
- Sidekiq または Active Job を使ったバックグラウンドジョブをテストするとき
- アンチパターン(正体不明のデータ、フレーキーテスト、遅いスペックなど)がないかテストコードをレビューするとき
- テストスイートのパフォーマンスと CI パイプラインの速度を最適化するとき
- テストファイル、shared examples、カスタムマッチャーを整理するとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | テストの設計と構造 | CRITICAL | design- |
| 2 | テストデータの管理 | CRITICAL | data- |
| 3 | モデルのテスト | HIGH | model- |
| 4 | リクエストとコントローラーのテスト | HIGH | request- |
| 5 | システムテストと受け入れテスト | MEDIUM-HIGH | system- |
| 6 | 非同期処理とバックグラウンドジョブのテスト | MEDIUM | async- |
| 7 | テストのパフォーマンスと信頼性 | MEDIUM | perf- |
| 8 | テストの整理と保守 | LOW-MEDIUM | org- |
クイックリファレンス
1. テストの設計と構造(CRITICAL)
design-four-phase-test- 4 フェーズのテスト構造(セットアップ、実行、検証、後処理)を使用しますdesign-behavior-over-implementation- 内部実装ではなく、観察可能な振る舞いをテストしますdesign-one-assertion-per-test- 失敗の原因を正確に診断できるよう、各テストに論理的な期待を 1 つだけ設けますdesign-descriptive-test-names- 仕様書のように読めるテスト名を付けますdesign-avoid-mystery-guest- すべてのテストデータがテスト自体から分かるようにしますdesign-avoid-conditional-logic- テストコード内で if/else やループを使いませんdesign-explicit-subject- 暗黙の subject を使わず、subject を明示的に名前付けします
2. テストデータの管理(CRITICAL)
data-factory-traits- 個別のファクトリーではなく、組み合わせ可能なファクトリー traits を使いますdata-minimal-attributes- テストに関連する属性だけを指定しますdata-build-over-create- 永続化が不要な場合は、create より build/build_stubbed を優先しますdata-avoid-fixture-coupling- 共有フィクスチャではなくファクトリーを使いますdata-transient-attributes- 複雑なファクトリーのセットアップには transient attributes を使いますdata-sequence-unique-values- 一意性が求められるフィールドにはシーケンスを使います
3. モデルのテスト(HIGH)
model-test-validations- 成功するケースだけでなく、境界値のケースでバリデーションをテストしますmodel-test-associations- dependent の動作も含め、アソシエーションを明示的にテストしますmodel-test-scopes- 条件に一致するレコードと一致しないレコードを使ってスコープをテストしますmodel-test-callbacks-sparingly- コールバックの存在ではなく、副作用をテストしますmodel-test-custom-methods- さまざまなシナリオで、入力と出力の組み合わせを使ってパブリックメソッドをテストしますmodel-avoid-testing-framework- ActiveRecord やフレームワークの動作はテストしませんmodel-test-enums- enum の遷移と、生成されるスコープをテストします
4. リクエストとコントローラーのテスト(高)
request-over-controller-specs- 非推奨のコントローラースペックではなく、リクエストスペックを使用しますrequest-test-response-status- HTTP ステータスコードを明示的に検証しますrequest-test-authentication- 保護されたすべてのエンドポイントについて、認証の境界をテストしますrequest-test-authorization- 各ロールの認可をテストしますrequest-test-params-validation- パラメーターの検証とエッジケースをテストしますrequest-json-response-structure- API エンドポイントの JSON レスポンス構造を検証します
5. システムテストと受け入れテスト(中〜高)
system-page-objects- ページオブジェクトにページ操作をカプセル化しますsystem-use-accessible-selectors- CSS/XPath ではなく、アクセシブルなセレクターを使用しますsystem-avoid-sleep- sleep は決して使用せず、Capybara 組み込みの待機機能を利用しますsystem-test-critical-paths- システムテストは重要なユーザージャーニーに限定しますsystem-database-state- システムテストのデータベースクリーンアップにはトランケーション戦略を使用しますsystem-screenshot-on-failure- システムテストの失敗時にスクリーンショットを撮影します
6. 非同期処理とバックグラウンドジョブのテスト(中)
async-separate-enqueue-from-perform- エンキューと実行を個別にテストしますasync-use-fake-mode-default- Sidekiq のフェイクモードをグローバルなデフォルトにしますasync-test-job-perform- ジョブの perform メソッドを直接テストしますasync-test-mailer-delivery- エンキュー済みメールのマッチャーを使って、メーラーの配信をテストしますasync-test-after-commit- Rails 7.2+ でトランザクションを考慮したジョブのエンキュー処理に対応します
7. テストのパフォーマンスと信頼性(中)
perf-parallel-tests- CPU コアを使ってテストを並列実行しますperf-database-strategy- システムテスト以外ではトランザクション戦略を使用しますperf-profile-slow-specs- 最も遅いスペックをプロファイリングして改善しますperf-quarantine-flaky-tests- 不安定なテストは再試行せず、隔離しますperf-avoid-before-all-mutation- before(:all) で作成した状態を変更してはいけません
8. テストの整理とメンテナンス(低〜中)
org-avoid-deep-nesting- context のネストは 3 階層までに制限しますorg-shared-examples-sparingly- 真の動作契約に該当する場合に限り、共有例を使用しますorg-custom-matchers- 繰り返し使うドメインアサーションは、カスタムマッチャーに切り出しますorg-file-structure-mirrors-app- spec ディレクトリの構成を app ディレクトリの構成に合わせます
使用方法
詳しい説明とコード例については、各リファレンスファイルを参照してください。
- セクション定義 - カテゴリー構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と並び順 |
| assets/templates/_template.md | 新しいルールのテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応