mcpField
E
extract-engine

extract-engine

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

extract-engine について

extract-engineは、Railsアプリケーションの既存コードをengineへ移すためのスキルです。小さな単位で動作を保ったまま抽出し、ホスト依存をアダプターで扱いながら回帰テストを続けます。

主な機能

  1. 01範囲を限定した抽出計画
  2. 02依存関係と境界の分析
  3. 03Web層より先にドメインロジックを移行
  4. 04ホスト依存向けアダプター
  5. 05回帰テストのチェックポイント

活用シーン

  1. 01Railsアプリからサービスを抽出
  2. 02アダプターによるホスト依存の分離
  3. 03段階的なengine移行の計画

インストール

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

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

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

同梱ファイル

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

assets/
checklist.json
examples.md
references/
adapter_examples.md

詳細

抽出エンジン

既存のコードを Rails アプリからエンジンに移すタスクでは、このスキルを使用してください。 一度にすべてを書き換えるのではなく、段階的な抽出を優先してください。まず動作を維持し、その後に設計を改善します。

クイックリファレンス

フェーズ焦点
準備境界のある機能とホストの依存関係を特定する
ロジック安定したドメインロジック(PORO、サービス)を最初に移す
境界ホストの依存関係に対するアダプター/設定を追加する
Webコントローラー、ルート、ビューは最後に移す

ハードゲート

DO NOT extract and change behavior in the same step.
Extraction must preserve existing behavior; refactoring and improvements belong in a separate step after the move is complete and verified.

基本プロセス

  1. 抽出する境界のある機能を特定します。一貫性のある責務をひとつ選びます。
  2. ホストアプリへの強い依存関係(モデル、サービス、設定)をリストアップします。
  3. 将来のエンジン境界とホストとの契約を定義します。
  4. 安定したドメインロジックを最初に移します。PORO、サービス、値オブジェクト、ポリシー、クエリオブジェクトが対象です。ホストモデルへの直接参照、認証、ルートの所有、アセットの統合は後回しにします。
  5. ホストが所有する依存関係に対して、アダプターまたは設定の境界を追加します。ハードコードされたホスト参照を、設定値、アダプターオブジェクト、またはサービスインターフェースに置き換えます。
  6. 境界が明確になってから、コントローラー、ルート、ビュー、ジョブを移します。
  7. 各段階を通じて、回帰テストがすべて成功する状態を維持します。

各段階には、一貫性のある責務、最小限の新しい公開 API、成功する回帰テスト、明確な次のステップが必要です。

拡張リソース

落とし穴

落とし穴対処方法
一度に多くを抽出する各ステップで境界のある範囲をひとつに絞る
エンジン内からホストを直接参照するアダプターまたは設定を使用する
抽出と動作変更を同時に行うまず動作を維持し、その後にリファクタリングする
循環依存を導入する各段階の前にインポートグラフを確認する
ホストとの契約が暗黙的であるホストアプリとの契約を明示的に文書化し、テストする

例

最初の段階(PORO を移し、ホストモデルにはまだ依存しない):

mkdir -p my_engine/app/services/my_engine
mv app/services/pricing/calculator.rb my_engine/app/services/my_engine/pricing_calculator.rb
# Before (in host app): module Pricing; class Calculator
# After (in engine):
module MyEngine
  class PricingCalculator
    def initialize(line_items)
      @line_items = line_items
    end

    def total
      @line_items.sum { |item| item.price * item.quantity }
    end
  end
end

次に進む前に、回帰テストが引き続き成功することを確認します:

bundle exec rspec spec/services/pricing/ spec/requests/orders/

ホストの依存関係に対するアダプター:

module MyEngine
  def self.current_user_for(request)
    config.current_user_provider.call(request)
  end
end

# usage
OrderCreator.for_request(request) # resolves via MyEngine.current_user_for(request)

出力スタイル

  1. 一度にひとつずつ、小さく範囲の明確な抽出段階を提案します。
  2. 移動するファイル、新しい境界、実行する回帰テストの概要を示します。
  3. 言語 — 明示的に別の言語を求められない限り、英語を使用する必要があります。

統合

スキル連携するタイミング
create-engine抽出後のエンジン構造、ホストとの契約、名前空間の設計
test-engineダミーアプリ、回帰テスト、統合の検証
refactor-code抽出段階の前後に行う、動作を維持したリファクタリング

コメント