aureuserp-plugin-builder について
既存の `plugins/webkul/*` モジュールの規約に沿って Aureus ERP プラグインを構築するワークフロー型スキルです。Filament 登録、権限、設定、翻訳、インストール検証を案内します。
主な機能
- 01プラグインプロバイダーとパッケージ設定
- 02パネル別の Filament 登録
- 03ACL、ロール、ポリシーの規約
- 04設定、ダッシュボード、テーブルビュー
- 05翻訳とインストール検証
活用シーン
- 01管理者または顧客パネルへのプラグイン追加
- 02既存 ERP モジュールの拡張
- 03権限とインストール手順の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aureuserp/ agent-skills --skill aureuserp-plugin-builderインストール後、Claude Code で/aureuserp-plugin-builderを入力して読み込まれたか確認します。
同梱ファイルreferences/plugin-patterns.md
詳細
プラグインビルダー
既存の plugins/webkul/* モジュールと同じ方法でプラグインを構築するには、次のワークフローに従ってください。
ワークフロー
- まず
references/plugin-patterns.mdを読みます。 - 対象のプラグインと、最も近い関連モジュール(通常は
purchases、sales、projects、website、accounts)を調べます。 - まずサービスプロバイダー(
*ServiceProvider)を、PackageServiceProviderとPackageチェーンを使って実装または調整します。 - パネルに応じた登録(
admin、customer)を行うプラグインクラス(*Plugin)を実装または調整します。 - パッケージの Composer 設定があることを確認します(
composer.jsonの PSR-4、extra.laravel.providers、プラグインのファクトリー/シーダーの名前空間)。 config/filament-shield.phpに ACL の対象を登録します。- 生成された権限が正しく解決されるように、
src/Policiesのポリシーを追加または調整します。 - 機能フラグや設定が必要な場合は、設定用マイグレーション、設定クラス、設定ページを追加します。
- パネルとモジュールの範囲に応じて、ダッシュボード、ページ、ウィジェット、クラスター、リソースを追加します。
HasTableViewsとPresetViewを使って、一覧/管理ページにテーブルビューを追加します。- プラグインの言語フォルダーの規約とネストされたキーに従って、翻訳を追加または調整します。
- インストールコマンドを使って、インストールと権限のライフサイクルを確認します。
必須の規約
- 各プラグインのサービスプロバイダーは、
Webkul\PluginManager\PackageServiceProviderを継承します。 Packageのメソッドチェーンを使って、パッケージのメタデータを設定します。name、hasViews、hasTranslations、hasRoute/hasRoutes、hasMigrations、runsMigrations、hasSettings、runsSettings、hasSeeder、hasDependencies、hasInstallCommand、hasUninstallCommand、icon。- インストール時の依存関係は、次の両方に追加します。
->hasDependencies([...])とインストールコマンドの->installDependencies()。 - 次のプラグインインストールコマンドのパターンを使います。
->hasInstallCommand(fn (InstallCommand $command) => $command->installDependencies()->runsMigrations()->runsSeeders())(プラグインにシーダーがない場合は調整します)。 Panel::configureUsing(fn (Panel $panel) => $panel->plugin(YourPlugin::make()));を使って、プラグインを Filament に登録します。- プラグインクラスで、インストール状態に応じてプラグインの登録を制御します。
if (! Package::isPluginInstalled($this->getId())) { return; }。 - プラグインパッケージの
composer.jsonに、プラグインの名前空間を示すautoload.psr-4、サービスプロバイダーのエントリーを示すextra.laravel.providers、および使用する場合はプラグインのデータベースファクトリー/シーダーの名前空間が含まれていることを確認します。 - 管理画面とフロントエンドを分ける場合は、
register(Panel $panel)でパネル条件を使います。$panel->when($panel->getId() == 'admin', ...)および/または... == 'customer'。 - パネル固有のフォルダーから Filament コンポーネントを検出します。
discoverResources、discoverPages、discoverClusters、discoverWidgets。 - リソース/ページの ACL 管理/除外エントリーを
config/filament-shield.phpに登録します。 PluginManager\PermissionManagerのプラグインキーの命名規則と互換性を保ち、RoleResource/Shield の処理フローを維持します。- Spatie Laravel Settings を使って設定を管理します。
必要に応じて、
database/settings/*に設定用マイグレーションを配置し、src/Settings/*にクラスを配置し、設定 UI としてSettingsPageを使います。 - 一覧/管理ページでは、次のようにテーブルビューを使います。
use HasTableViews;を追加し、PresetViewエントリーを返すgetPresetTableViews(): arrayを実装します。 resources/lang/en以下にプラグインの翻訳構造を使い、UI の領域ごとにキーをネストします(navigation、form.sections、table.columns、table.filters、infolist.sections、actions、notifications)。
管理パネルとフロントパネルの設定
プラグインで両方のパネルが必要な場合は、purchases、website、blogs に合わせます。
- Filament のフォルダーをパネルごとに分けます。
src/Filament/Admin/...およびsrc/Filament/Customer/...。 - プラグインの
register()で、以下を行います。 customer条件のもとで、カスタマーパネルのリソース/ページ/クラスター/ウィジェットを設定します。admin条件のもとで、管理パネルのリソース/ページ/クラスター/ウィジェットを設定します。- パネル固有のナビゲーション項目(設定へのショートカットなど)を、表示条件のチェックとともに追加します。
- カスタマー認証の UX が独自仕様の場合(例:
website)、プラグイン登録時にパネルの認証ページを設定します。 - フロント/カスタマー向けのエクスペリエンスでは、モジュールがカスタマー向けページを公開する場合、
routes/web.php、フロントエンドのビュー、Livewire コンポーネントもパネルの動作に合わせます。
翻訳規約
- プラグインの翻訳ルートは
plugins/<vendor>/<plugin>/resources/lang/enにします。 - Filament の配置を翻訳パスにも反映します。
filament/resources/...、filament/admin/...、filament/customer/...、filament/clusters/...、filament/pages/...、filament/widgets/...に加え、必要に応じてmodels、enums、トップレベルのapp.phpを使用します。 - リソース/ページの翻訳ファイルの配置を明示します。例:
resources/lang/en/filament/resources/product.php(リソースレベルのラベル)resources/lang/en/filament/resources/product/pages/create-product.phpresources/lang/en/filament/resources/product/pages/edit-product.phpresources/lang/en/filament/resources/product/pages/list-products.phpresources/lang/en/filament/resources/product/pages/view-product.php- 管理/カスタマーを分ける場合は、パネルのパスの下に配置します。
resources/lang/en/filament/admin/...resources/lang/en/filament/customer/...- ファイル名はケバブケースにし、リソース/ページ/アクション名と一致させます。
- UI の領域ごとにグループ化した、深くネストされた予測可能な配列を優先します。
navigation.title、navigation.groupform.sections.<section>.titleform.sections.<section>.fieldsets.<fieldset>.titleform.sections.<section>.fields.<field>.label|helper-texttable.columns、table.groups、table.filterstable.record-actions.<action>.notifications.<state>.title|bodytable.toolbar-actions.<action>.notifications.<state>.title|bodytable.empty-state.heading|descriptioninfolist.sections.<section>.entries.<entry>.label|helper-text- キーのスペルを統一します(
filetersではなくfilters)。 - 翻訳キーは安定させ、コードから
__('plugin::path.to.key')を使って参照します。 __()の使用例:- リソースラベル:
__('products::filament/resources/product.navigation.title') - ページタイトル:
__('products::filament/resources/product/pages/create-product.title') - フィールドラベル:
__('products::filament/resources/product.form.sections.general.fields.name')
ベースリソースとモデルの拡張
ベースモジュールでドメインの動作がすでに定義されている場合は、重複させずに拡張することを優先します。
- ソースプラグイン(
accounting、invoices、sales、purchases、contacts、recruitmentsなど)からベース Filament リソースを拡張します。 - 子リソースは差分に絞ります。クラスターの割り当て、ページマップ、軽微なスキーマ/テーブルのオーバーライド、追加アクションなどが対象です。
- モデルでは、プラグイン内のモデル名前空間と既存のトレイト規約(
HasFactory、ソフトデリート、ソート可能、該当する場合は権限トレイト)に従います。
ACL、ロール、権限のライフサイクル
- プラグインの
config/filament-shield.phpで、リソース/ページの権限スコープを定義します。 - クラスター/ページの除外設定を更新し、意図した権限キーだけが生成されるようにします。
- ポリシーメソッドが想定される権限キーと一致することを確認します。
- インストールのライフサイクルで権限が再生成/同期されるようにします(プラグインのインストールコマンドおよび ERP のインストールフロー)。
- ACL の対象範囲を変更する場合は、セキュリティロール管理の UI/ロジックを通じて、ロールへの権限割り当てを検証します。
設定、ダッシュボード、テーブルビュー
- 設定:
database/settingsに設定のマイグレーションを追加します。Spatie\LaravelSettings\Settingsを継承する設定クラスを追加します。Filament\Pages\SettingsPageを継承する設定ページを追加します(一般的には設定の配下にまとめます)。- ダッシュボード/ページ/ウィジェット:
- カスタムダッシュボード/ページでは、ページシールドのトレイトを使用します。
- ダッシュボードページの
getWidgets()/getHeaderWidgets()でウィジェットセットを登録します。 - パネルに適したフォルダーにページ/ウィジェットを配置します。
- テーブルビュー:
- 一覧/管理ページに
HasTableViewsを追加します。 PresetView::make(...)->modifyQueryUsing(...)で名前付きのプリセットタブを定義します。- 該当する場合は、お気に入り/デフォルトのプリセットを使用します。
検証チェックリスト
- プラグインマネージャーにプラグインが表示され、
<plugin>:install --no-interactionでインストールできます。 - 依存関係が正しい順序で自動インストールされます。
- 管理者パネルおよび/または顧客パネルのコンポーネントが、意図したパネルにのみ表示されます。
- Shield の権限に新しいリソース/ページが含まれ、対象外のクラスタ/ページは除外されます。
- ポリシーが解決され、UI のアクションが認可に従います。
- 設定が保持され、設定ページが読み込まれます。
- 権限に関する問題を起こすことなく、ダッシュボードのページ/ウィジェットが表示されます。
- テーブルのプリセットビューに期待どおりのクエリ動作が適用されます。
コメント
Markdown 対応