mcpField
F
fusecore

fusecore

github.com/fusengine開発3439 回インストール2 週間前に更新
リポジトリ

fusecore について

fusecoreは、React 19と連携するLaravel 13のモジュラーモノリス構成を扱うスキルです。FuseCoreプロジェクトでモジュールや機能を開発するチーム向けに、検出、分離、実装の規約を説明します。

主な機能

  1. 01module.jsonによるモジュール自動検出
  2. 02モデル・マイグレーション・ルートのモジュール分離
  3. 03モジュール契約とHasModuleトレイトの案内
  4. 04React連携と多言語対応の解説
  5. 05モジュール実装用テンプレート
  6. 06モジュール間依存の宣言方法

活用シーン

  1. 01FuseCoreプロジェクトで新規モジュールを作成
  2. 02モジュールのサービスプロバイダーとルートを設定
  3. 03モジュール専用のマイグレーションとReactリソースを整理
  4. 04契約を通じてモジュール間依存を宣言

インストール

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

$npx skills add https://github.com/fusengine/agents --skill fusecore

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

同梱ファイル

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

references/
architecture.md
contracts.md
creating-module.md
i18n.md
migrations.md
module-discovery.md
module-json.md
module-structure.md
react-integration.md
routes.md
service-provider.md
traits.md
references/templates/
ApiRoutes.php.md
Controller.php.md
Migration.php.md
Model.php.md
module.json.md
ReactStructure.md
Request.php.md
Resource.php.md
Service.php.md
ServiceProvider.php.md

詳細

FuseCore は、Laravel 13 に React 19 を統合したモジュラーモノリスアーキテクチャであり、自動検出(module.json)、SOLID 原則、およびモジュールごとの分離(モデル、マイグレーション、ルート、React リソース、i18n)に基づいて構築されています。新しいモジュールの作成、FuseCore のディレクトリ構造とモジュール検出メカニズムの理解、FuseCore プロジェクト内での機能実装(モジュールコントラクト、トレイト(HasModule)、サービスプロバイダー、モジュール間の依存関係の宣言)を扱います。

FuseCore モジュラーアーキテクチャ

エージェントワークフロー(必須)

FuseCore プロジェクトで実装を行う前に、必ず 3 つのエージェントを並列で起動してください。それぞれ name を指定した Agent 呼び出しを 1 回ずつ行います。

  1. fuse-ai-pilot:explore-codebase - /FuseCore/ 内の既存モジュールを分析します
  2. fuse-ai-pilot:research-expert - Context7 を通じて Laravel 13 のパターンを検証します
  3. fuse-laravel:laravel-expert - Laravel のベストプラクティスを適用します

実装後は、検証のために fuse-ai-pilot:sniper を実行してください。


概要

FuseCore は、Laravel 13 に React 19 を統合したモジュラーモノリスアーキテクチャです。

コンポーネント目的
モジュール自己完結型の機能(User、Dashboard、Blog)
自動検出module.json による自動登録
トレイトリソース読み込みのための HasModule
コントラクトModuleInterface、ReactModuleInterface
React 統合モジュールごとに分離された React
i18n多言語サポート(FR/EN/DE/IT/ES)

重要なルール

  1. すべてのコードは /FuseCore/{Module}/ に配置 - /app/ には絶対に配置しない
  2. モジュールごとに 1 つの module.json - 検出のために必須
  3. モジュールごとに ServiceProvider - HasModule トレイトを使用
  4. ファイルは 100 行未満 - 90 行で分割(SOLID)
  5. インターフェースは /App/Contracts/ に配置 - コンポーネント内には絶対に配置しない
  6. マイグレーションはモジュール内 - /Database/Migrations/
  7. ルートはモジュール内 - /Routes/api.php

アーキテクチャ概要

FuseCore/
├── Core/                    # Infrastructure (priority 0)
│   ├── App/
│   │   ├── Contracts/       # ModuleInterface, ReactModuleInterface
│   │   ├── Services/        # ModuleDiscovery, RouteAggregator
│   │   ├── Traits/          # HasModule, HasModuleDatabase
│   │   └── Providers/       # FuseCoreServiceProvider
│   ├── Config/fusecore.php
│   └── module.json
│
├── User/                    # Auth module
│   ├── App/Models/          # User.php, Profile.php
│   ├── Config/              # Module config (sanctum.php, etc.)
│   ├── Database/Migrations/
│   ├── Resources/React/     # Isolated React
│   ├── Routes/api.php
│   └── module.json          # dependencies: []
│
└── {YourModule}/            # Your new module
    ├── App/
    │   ├── Models/
    │   ├── Http/Controllers/
    │   ├── Services/
    │   └── Providers/{YourModule}ServiceProvider.php
    ├── Config/              # Module-specific config
    ├── Database/Migrations/
    ├── Resources/React/
    ├── Routes/api.php
    └── module.json          # dependencies: ["User"]

リファレンスガイド

アーキテクチャ
トピックリファレンス参照するタイミング
概要architecture.mdFuseCore の設計を理解するとき
モジュール構造module-structure.mdディレクトリ構成を確認するとき
自動検出module-discovery.mdモジュールの読み込み方法を知りたいとき
module.jsonmodule-json.mdモジュールの設定を確認するとき
実装
トピックリファレンス参照するタイミング
コントラクトcontracts.mdModuleInterface、ReactModuleInterface
トレイトtraits.mdHasModule、HasModuleDatabase
ServiceProviderservice-provider.mdモジュールの登録
ルートroutes.mdAPI ルーティング
リソース
トピックリファレンス参照するタイミング
React 統合react-integration.mdモジュールごとのフロントエンド
マイグレーションmigrations.mdモジュールごとのデータベース
i18ni18n.md多言語のセットアップ
ガイド
トピックリファレンス参照するタイミング
モジュールの作成creating-module.mdステップバイステップガイド

テンプレート (コード例)
テンプレート目的
module.json.mdモジュール設定
ServiceProvider.php.mdモジュールサービスプロバイダー
Controller.php.mdAPI コントローラー
Model.php.mdEloquent モデル
Migration.php.mdデータベースマイグレーション
ReactStructure.mdReact モジュール構造
ApiRoutes.php.mdAPI ルートファイル
Resource.php.mdAPI リソース
Request.php.mdフォームリクエスト
Service.php.mdビジネスロジックサービス

クイックリファレンス

新しいモジュールを作成する
# 1. Create directory structure
mkdir -p FuseCore/{ModuleName}/{App/{Models,Http/Controllers,Services,Providers},Database/Migrations,Resources/React,Routes}

# 2. Create module.json
# 3. Create ServiceProvider with HasModule trait
# 4. Create routes/api.php
# 5. Run: php artisan fusecore:cache-clear
module.json
{
    "name": "ModuleName",
    "version": "1.0.0",
    "enabled": true,
    "isCore": false,
    "dependencies": ["User"]
}
ServiceProvider
class ModuleNameServiceProvider extends ServiceProvider
{
    use HasModule;

    public function boot(): void
    {
        $this->loadModuleMigrations();
    }
}
ルート
Route::middleware(['api', 'auth:sanctum'])->group(function () {
    Route::apiResource('items', ItemController::class);
});

モジュールチェックリスト

  • /FuseCore/{Module}/ ディレクトリを作成した
  • name、version、dependencies を含む module.json がある
  • HasModule トレイトを使用した {Module}ServiceProvider.php がある
  • ルートが /Routes/api.php にある
  • マイグレーションが /Database/Migrations/ にある
  • モデルが /App/Models/ にある
  • コントローラーが /App/Http/Controllers/ にある
  • 必要に応じて React が /Resources/React/ にある
  • i18n が /Resources/React/i18n/locales/ にある

SOLID 準拠

ルールFuseCore での実装
単一責任1 モジュール = 1 機能
開放閉鎖ModuleInterface を介して拡張
リスコフの置換ReactModuleInterface extends ModuleInterface
インターフェース分離コントラクトを分離
依存性逆転ServiceProvider を介して注入

ファイル制限: すべてのファイルは 100 行未満。90 行で分割します。


命名規則

種類規則例
モジュールフォルダーPascalCaseBlogPost
module.json namePascalCase"name": "BlogPost"
ServiceProvider{Module}ServiceProviderBlogPostServiceProvider
Controller{Resource}ControllerPostController
Model単数形Post
Migrationcreate_{table}_tablecreate_posts_table
ルートファイルapi.php常に api.php

Laravel 13 の注意点

スタック FuseCore L13
  • Laravel 13 (stable 13.33) + PHP 8.3 以上
  • React 19 + TypeScript 7 (モジュールフロントエンド側) — TS 7.0 にはコンパイラー API がありません: typescript-eslint (peer typescript <6.1.0) にはエイリアス "typescript": "npm:@typescript/typescript6@^6.0.2" + "@typescript/native": "npm:typescript@^7.0.2" が必要です (npx tsc = 7.0)
  • Inertia 3 (inertiajs/inertia-laravel ^3.0) を React ↔ モジュール間のブリッジとして使用
モジュール ServiceProvider と L13

バインディングは register() で、オブザーバー/フックは boot() で行います。L13 の注意: モデルをそれ自身の boot 中にインスタンス化する (モデルの boot() 内やトレイトの boot*() 内で new static() を呼び出す) と、LogicException がスローされます。

public function register(): void
{
    $this->app->bind(PostRepositoryContract::class, EloquentPostRepository::class);
}

public function boot(): void
{
    Post::observe(PostObserver::class);
}
モジュールごとのキャッシュプレフィックス

L13 ではデフォルトでハイフンを使用します。FuseCore では、module.json を介してモジュールごとにプレフィックスを設定しても互換性が保たれます:

{
  "name": "BlogPost",
  "cache_prefix": "blogpost-"
}

ベストプラクティス

すべきこと
  • 1 モジュール = 1 つの完全な FuseCore/<Module>/ フォルダー (Contracts/、Services/、Http/、Models/)
  • モジュール間のすべての依存関係は Contracts を介して宣言する (具象クラスは決して使用しない)
  • モジュール DTO には final readonly class を使用する (PHP 8.3+)
  • すべての Model ロジックを register() から boot() に移動する
  • UI を持つモジュールには Inertia 3 + React 19 を優先する
すべきでないこと
  • Contract を経由せずに別のモジュールからクラスをインポートする
  • ビジネスロジックを Controller に置く (モジュールの Service に抽出する)
  • モデルをそれ自身の boot 中にインスタンス化する (boot() 内の new static() → L13 では LogicException)
  • 1 ファイルあたり 100 行を超える (サブモジュールまたは Services に分割する)
  • モジュール間でマイグレーションを共有する (各モジュールが自身のテーブルを所有する)

コメント