mcpField
C
create-engine-installer

create-engine-installer

github.com/igmarin開発2838 回インストール4 週間前に更新
リポジトリ

create-engine-installer について

create-engine-installerは、Ruby engineのインストーラー生成器を作成、レビューするスキルです。ホストアプリの生成ファイル、再実行時の冪等性、テスト、インストール文書を順に検証します。

主な機能

  1. 01ホストアプリでの出力パスを検証
  2. 02ファイルやルートの挿入をガード
  3. 03再実行時の冪等性をテスト
  4. 04生成内容と手動手順を文書化
  5. 05関連するengineスキルと連携

活用シーン

  1. 01Ruby engine用インストーラーの作成
  2. 02生成されたinitializerとルートの確認
  3. 03再実行によるファイル重複を防止
  4. 04インストーラー生成器の動作をテスト

インストール

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

$npx skills add https://github.com/igmarin/rails-agent-skills --skill create-engine-installer

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

EXAMPLES.md
assets/
installer-template.rb
README.md

詳細

Engine インストーラーの作成

検証ワークフロー(必須ゲート)

インストールジェネレーターを作成またはレビューする際は、以下の手順を順番に実施してください。手順 3 と 4 を完了せずにジェネレーターをリリースしないでください。

  1. 生成:クリーンなホストアプリでジェネレーターを実行します。初回実行のコマンドとターミナル出力を 観測された出力 として示します。ファイルが正しいホストパスに作成されていることを確認します(イニシャライザーは config/initializers/、マイグレーションは db/migrate/、ルートのマウントは config/routes.rb)。
  2. 確認:出力ファイルが正しいホストパスに存在することを確認します。イニシャライザー、ルート、マイグレーションが存在することを確認するシェルコマンドを列挙します。
  3. 再実行:ジェネレーターを 2 回目に実行し、重複するファイル、ルート、イニシャライザーブロックが挿入されないことを確認します。冪等な動作(スキップ/競合解決)を示すコマンドとターミナル出力を 観測された出力 として示します。テンプレートからそのままコピーするのではなく、シナリオに固有の値を使用します。
  4. テスト:ジェネレータースペックで、単一実行と再実行の両方の動作をカバーします(下記のスペックテンプレートを参照)。
  5. ドキュメント化:ジェネレーターが生成したものとユーザーが手動で行う必要があることを列挙します。必須の環境変数、ロールバック手順、インストール手順のドキュメントを含め、ジェネレーターが実際に生成する内容と照合して確認します。

主な実装ルール:

  • イニシャライザーのみで設定します(起動時の変更は避けます)。
  • 必須の環境変数はすべて、ロールバック手順と併せてドキュメント化します。
  • 編集しやすい、妥当なデフォルト値を用意します。

冪等性ガード

すべてのジェネレーターアクションは、複数回安全に実行できる必要があります。各ファイル作成と挿入の実行箇所でガードします。

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ジェネレータースペックやダミーアプリのインストールカバレッジを追加する場合

コメント