create-engine-installer について
create-engine-installerは、Ruby engineのインストーラー生成器を作成、レビューするスキルです。ホストアプリの生成ファイル、再実行時の冪等性、テスト、インストール文書を順に検証します。
主な機能
- 01ホストアプリでの出力パスを検証
- 02ファイルやルートの挿入をガード
- 03再実行時の冪等性をテスト
- 04生成内容と手動手順を文書化
- 05関連するengineスキルと連携
活用シーン
- 01Ruby engine用インストーラーの作成
- 02生成されたinitializerとルートの確認
- 03再実行によるファイル重複を防止
- 04インストーラー生成器の動作をテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ igmarin/ rails-agent-skills --skill create-engine-installerインストール後、Claude Code で/create-engine-installerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
EXAMPLES.mdassets/installer-template.rbREADME.md詳細
Engine インストーラーの作成
検証ワークフロー(必須ゲート)
インストールジェネレーターを作成またはレビューする際は、以下の手順を順番に実施してください。手順 3 と 4 を完了せずにジェネレーターをリリースしないでください。
- 生成:クリーンなホストアプリでジェネレーターを実行します。初回実行のコマンドとターミナル出力を 観測された出力 として示します。ファイルが正しいホストパスに作成されていることを確認します(イニシャライザーは
config/initializers/、マイグレーションはdb/migrate/、ルートのマウントはconfig/routes.rb)。 - 確認:出力ファイルが正しいホストパスに存在することを確認します。イニシャライザー、ルート、マイグレーションが存在することを確認するシェルコマンドを列挙します。
- 再実行:ジェネレーターを 2 回目に実行し、重複するファイル、ルート、イニシャライザーブロックが挿入されないことを確認します。冪等な動作(スキップ/競合解決)を示すコマンドとターミナル出力を 観測された出力 として示します。テンプレートからそのままコピーするのではなく、シナリオに固有の値を使用します。
- テスト:ジェネレータースペックで、単一実行と再実行の両方の動作をカバーします(下記のスペックテンプレートを参照)。
- ドキュメント化:ジェネレーターが生成したものとユーザーが手動で行う必要があることを列挙します。必須の環境変数、ロールバック手順、インストール手順のドキュメントを含め、ジェネレーターが実際に生成する内容と照合して確認します。
主な実装ルール:
- イニシャライザーのみで設定します(起動時の変更は避けます)。
- 必須の環境変数はすべて、ロールバック手順と併せてドキュメント化します。
- 編集しやすい、妥当なデフォルト値を用意します。
冪等性ガード
すべてのジェネレーターアクションは、複数回安全に実行できる必要があります。各ファイル作成と挿入の実行箇所でガードします。
def create_initializer
return if File.exist?(File.join(destination_root, 'config/initializers/my_engine.rb'))
create_file 'config/initializers/my_engine.rb', <<~RUBY
MyEngine.configure do |config|
config.user_class = "User"
end
RUBY
end
def mount_route
# inject_into_file with force: false skips insertion if sentinel already present
inject_into_file 'config/routes.rb',
"\n mount MyEngine::Engine, at: '/admin'\n",
after: "Rails.application.routes.draw do",
force: false
end
最小限の再実行スペック:
it 'does not duplicate the route mount on rerun' do
2.times { run_generator }
expect(File.read(file('config/routes.rb')).scan('mount MyEngine::Engine').size).to eq(1)
end
大規模なインストーラーでは、拡張ガードパターンとスペックテンプレートをジェネレーターと同じ場所に専用の補助ファイルとして切り出します(例:lib/generators/my_engine/install/install_generator_patterns.rb)。これにより、ジェネレーターを簡潔に保ち、このスキルをワークフローに集中させられます。将来のメンテナーが共有パターンの場所を把握できるよう、そのファイルをジェネレーターのコメントで明示的に参照してください。
連携
| スキル | 連携するタイミング |
|---|---|
| create-engine | インストーラーで設定するエンジン構造を設計する場合 |
| document-engine | インストール手順やアップグレード手順をドキュメント化する場合 |
| test-engine | ジェネレータースペックやダミーアプリのインストールカバレッジを追加する場合 |
コメント
Markdown 対応