review-engine について
既存の Rails エンジンを評価し、改善案を検討する開発者向けのレビュー用スキルです。アーキテクチャ、ホスト連携、初期化の安全性、マイグレーション、統合テストを優先し、指摘を重大度別に整理します。
主な機能
- 01名前空間の分離と公開 API の確認
- 02ホストアプリ連携の接点をレビュー
- 03初期化と再読み込みの安全性を検査
- 04マイグレーションとインストール用ジェネレーターの監査
- 05ダミーアプリと統合テストの確認
- 06重大度順に指摘を整理
活用シーン
- 01既存 Rails エンジンのレビュー
- 02ホストとの結合や起動時の副作用の評価
- 03マイグレーションとジェネレーターの安全性確認
- 04レビュー指摘に基づくエンジン改善の計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ igmarin/ rails-agent-skills --skill review-engineインストール後、Claude Code で/review-engineを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
FINDINGS.mdassets/examples.mdfinding-schema.json詳細
レビューエンジン
既存の Rails エンジンをレビューする場合や、改善案を提案する場合にこのスキルを使用します。
クイックリファレンス
| レビュー項目 | 主な確認事項 |
|---|---|
| 名前空間 | isolate_namespace が使用されているか。境界が明確か。ホストの定数が漏れていないか |
| ホストとの統合 | 設定の接点、アダプターがあるか。ホストのモデルに直接アクセスしていないか |
| 初期化 | 読み込み時に副作用がないか。config.to_prepare にリロードセーフなフックがあるか |
| マイグレーション | 文書化され、ジェネレーター経由でコピーされるか。暗黙的または破壊的な手順がないか |
| ダミーアプリ | spec/ に存在するか。統合テストで使用されているか。実際のマウントと設定を検証しているか |
厳格な必須条件
Before writing findings, confirm every row in the Quick Reference table has been addressed:
- [ ] Namespace isolation verified
- [ ] Host integration points checked
- [ ] `engine.rb` initializer blocks inspected
- [ ] Migration/generator flow confirmed
- [ ] Dummy app presence and usage confirmed
- [ ] Integration tests exercise real mount
If any box cannot be checked (e.g., file not provided), record it as an open assumption.
基本的な手順
- エンジンの種類と目的を特定します。
lib/<engine_name>/engine.rbとlib/<engine_name>/railtie.rbを読みます。名前空間が分離されているか、プレーンなエンジンかを確認します。 - 名前空間と公開 API の範囲を調べます。
isolate_namespaceと、修飾されていないトップレベルの定数参照を確認します。 - ホストアプリとの統合箇所を確認します。 ホストの定数への直接参照を指摘します。ホストへの依存が設定の接点を介して渡されていることを確認します。
- 初期化とリロード時の動作を確認します。
initializer、config.to_prepare、ActiveSupport.on_loadを調べます。イニシャライザブロック外で、require時にグローバル状態を変更する処理があれば指摘します。 - マイグレーション、ジェネレーター、インストール手順を確認します。 マイグレーションがジェネレーター経由でコピーされることを確認します。破壊的、またはロールバックできないマイグレーションがないか確認します。
- ダミーアプリと統合テストを確認します。
spec/dummy/が存在し、マウントポイントを検証していることを確認します。 - 重要度別に指摘事項を要約します。 重要度の高い指摘を最初に示します。アーキテクチャ上の問題より先に、重要度の低い指摘を挙げないでください。
重要度の高い指摘の例(エンジンがホストに直接アクセスしている場合):
# Bad: engine assumes host model
class MyEngine::SomeService
def call
User.find(current_user_id) # User is host app; engine is coupled
end
end
修正方法:設定(MyEngine.config.user_finder = ->(id) { User.find(id) })を導入して使用します。
適切な例(設定の接点):
# Good: engine uses configured dependency
class MyEngine::SomeService
def call
MyEngine.config.user_finder.call(current_user_id)
end
end
不適切な例(require 時のパッチ適用 — リロードセーフではありません):
# Bad: patches at require time — double-includes on code reload
ActionController::Base.include(MyEngine::ControllerHelpers)
適切な例(ActiveSupport.on_load による遅延読み込み):
# Good: patches only when the framework component is ready, reload-safe
ActiveSupport.on_load(:action_controller) do
include MyEngine::ControllerHelpers
end
出力スタイル
エンジンのレビューを依頼された場合、出力する answer.md は次の要件を必ず満たす必要があります。
- 指摘事項を最初に記載する:具体的な成果物
answer.mdの最初のセクションに(計画が求められている場合は短い計画の直後に)、重要度の高い順(HIGH → MEDIUM → LOW)で指摘事項を記載します。各指摘には、重要度、該当するファイルまたは領域、リスク、実行可能な最小限の修正を含めます。 - 検証コマンド:使用した検証コマンドを記載します。名前空間の分離には
grep -r "isolate_namespace" lib/を含め、破壊的またはロールバックできない変更の監査にはgrep -R "remove_column\|drop_table\|change_column" db/migrate lib/**/db/migrateのようなコマンドを含めます。また、初期化のリロードセーフ性を確認するため、grep -r "ActiveSupport.on_load" lib/またはgrep -r "initializer" lib/を含めます。 - 未確認の前提と、次に推奨する変更を記載します。
- 意味のある指摘事項がない場合は、その旨を明記し、残っているテスト上の不足にも触れます。
- 言語 — 明示的に別の言語を指定されない限り、英語で記述する必要があります。
連携
| スキル | 連携するタイミング |
|---|---|
| create-engine | 提案した修正の実装やエンジンのリファクタリングを行う場合 |
| test-engine | 不足しているダミーアプリや統合テストのカバレッジを追加する場合 |
| upgrade-engine | Rails/Ruby のバージョンサポートや非推奨化の影響を評価する場合 |
拡張リファレンス
補足情報です。コアプロセスを完了してから参照してください。
重大度の分類
- 高 — 本番環境での障害やホストとの統合不全を引き起こします(例:ホストの定数への直接的な依存、安全でない起動時の副作用、
downメソッドのない取り消し不能なマイグレーション)。 - 中 — 保守性を損なう、またはホストアプリ間でエンジンが不安定になります(例:文書化されていない設定の接点、インストールジェネレーターの欠如、ダミーアプリがない)。
- 低 — スタイルや軽微な明瞭さの問題です。アーキテクチャ上の指摘より先に取り上げないでください。
よくある間違い
- アーキテクチャより先にコードスタイルをレビューする。
- ダミーアプリのカバレッジ確認を忘れる(ダミーアプリが存在し、使用されている必要があります)。
engine.rbを見落とす(起動時の副作用が含まれていることがよくあります)。
拡張リソース(段階的な開示)
各ファイルの内容が必要な場合にのみ読み込んでください。
- FINDINGS.md — 指摘の形式や重大度分類の例が必要な場合に使用します
- assets/examples.md — 指摘と推奨事項を含む、エンジンレビューの完全な例が必要な場合に使用します
- assets/finding-schema.json — エンジンレビューの指摘出力に使用する構造化スキーマが必要な場合に使用します
コメント
Markdown 対応