mcpField
R
resource

resource

github.com/mwguerra開発36214 回インストール26 週間前に更新
リポジトリ

resource について

resourceは、FilamentPHP v4開発者向けにリソースを生成するスキルです。フォーム、テーブル、リレーションマネージャー、ページを公式ドキュメントのパターンに沿って作成し、認可設定とテストファイルも含めます。

主な機能

  1. 01FilamentPHP v4リソースの生成
  2. 02フォーム項目とレイアウトの設定
  3. 03テーブル列とオプションの設定
  4. 04リレーションマネージャーとページの作成
  5. 05認可ロジックとテストファイルの追加

活用シーン

  1. 01Laravelモデル用の管理リソース作成
  2. 02リソースで関連データを管理
  3. 03認可付きFilament画面の生成

インストール

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

$npx skills add https://github.com/mwguerra/claude-code-plugins --skill resource

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

詳細

FilamentPHP リソース生成スキル

概要

このスキルは、フォームスキーマ、テーブル設定、リレーションマネージャー、カスタムページを含む FilamentPHP v4 の完全なリソースを生成します。生成されるコードはすべて、公式ドキュメントのパターンに従います。

ドキュメントの参照

重要: リソースを生成する前に、以下を読んでください。

  • /home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/docs/references/general/03-resources/
  • /home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/docs/references/forms/
  • /home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/docs/references/tables/

ワークフロー

ステップ 1:要件を収集する

以下を特定します。

  • モデル名と名前空間
  • フォームに含めるフィールド
  • テーブルに表示する列
  • 管理するリレーションシップ
  • 必要なカスタムアクション
  • 認可要件
ステップ 2:基本リソースを生成する

Laravel artisan を使ってリソースを作成します。

# Basic resource
php artisan make:filament-resource ModelName

# With generate flag (creates form/table from model)
php artisan make:filament-resource ModelName --generate

# Soft deletes support
php artisan make:filament-resource ModelName --soft-deletes

# View page only
php artisan make:filament-resource ModelName --view

# Simple resource (modal forms instead of pages)
php artisan make:filament-resource ModelName --simple
ステップ 3:フォームスキーマをカスタマイズする

フォームフィールドのドキュメントを読み、以下を実装します。

use Filament\Forms;
use Filament\Forms\Form;

public static function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\Section::make('Basic Information')
                ->schema([
                    Forms\Components\TextInput::make('name')
                        ->required()
                        ->maxLength(255),
                    Forms\Components\Textarea::make('description')
                        ->rows(3)
                        ->columnSpanFull(),
                ]),
            Forms\Components\Section::make('Settings')
                ->schema([
                    Forms\Components\Toggle::make('is_active')
                        ->default(true),
                    Forms\Components\Select::make('status')
                        ->options([
                            'draft' => 'Draft',
                            'published' => 'Published',
                        ]),
                ]),
        ]);
}
ステップ 4:テーブルをカスタマイズする

テーブルのドキュメントを読み、以下を実装します。

use Filament\Tables;
use Filament\Tables\Table;

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('name')
                ->searchable()
                ->sortable(),
            Tables\Columns\IconColumn::make('is_active')
                ->boolean(),
            Tables\Columns\BadgeColumn::make('status')
                ->colors([
                    'warning' => 'draft',
                    'success' => 'published',
                ]),
            Tables\Columns\TextColumn::make('created_at')
                ->dateTime()
                ->sortable()
                ->toggleable(isToggledHiddenByDefault: true),
        ])
        ->filters([
            Tables\Filters\SelectFilter::make('status')
                ->options([
                    'draft' => 'Draft',
                    'published' => 'Published',
                ]),
            Tables\Filters\TernaryFilter::make('is_active'),
        ])
        ->actions([
            Tables\Actions\ViewAction::make(),
            Tables\Actions\EditAction::make(),
            Tables\Actions\DeleteAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
                Tables\Actions\DeleteBulkAction::make(),
            ]),
        ]);
}
ステップ 5:リレーションマネージャーを追加する

リレーションシップ用に、リレーションマネージャーを作成します。

php artisan make:filament-relation-manager ResourceName RelationName column_name

リソースに登録します。

public static function getRelations(): array
{
    return [
        RelationManagers\CommentsRelationManager::class,
        RelationManagers\TagsRelationManager::class,
    ];
}
ステップ 6:ページを設定する

リソースのページを定義します。

public static function getPages(): array
{
    return [
        'index' => Pages\ListModels::route('/'),
        'create' => Pages\CreateModel::route('/create'),
        'view' => Pages\ViewModel::route('/{record}'),
        'edit' => Pages\EditModel::route('/{record}/edit'),
    ];
}
ステップ 7:認可を追加する

ポリシーメソッドを実装します。

public static function canViewAny(): bool
{
    return auth()->user()->can('view_any_model');
}

public static function canCreate(): bool
{
    return auth()->user()->can('create_model');
}

フォームフィールドのリファレンス

テキストフィールド
  • TextInput::make() - 1 行のテキスト
  • Textarea::make() - 複数行のテキスト
  • RichEditor::make() - WYSIWYG エディター
  • MarkdownEditor::make() - Markdown エディター
選択フィールド
  • Select::make() - ドロップダウン選択
  • Radio::make() - ラジオボタン
  • Checkbox::make() - 単一のチェックボックス
  • CheckboxList::make() - 複数のチェックボックス
  • Toggle::make() - トグルスイッチ
日付/時刻フィールド
  • DatePicker::make() - 日付のみ
  • DateTimePicker::make() - 日付と時刻
  • TimePicker::make() - 時刻のみ
ファイルフィールド
  • FileUpload::make() - ファイルのアップロード
  • SpatieMediaLibraryFileUpload::make() - メディアライブラリ
リレーションシップフィールド
  • Select::make()->relationship() - BelongsTo 選択
  • CheckboxList::make()->relationship() - BelongsToMany
  • Repeater::make()->relationship() - HasMany のインライン表示
レイアウトコンポーネント
  • Section::make() - カードセクション
  • Fieldset::make() - フィールドセットのグループ化
  • Tabs::make() - タブ付きセクション
  • Grid::make() - グリッドレイアウト
  • Split::make() - 分割レイアウト

テーブル列のリファレンス

テキスト列
  • TextColumn::make() - 基本的なテキスト
  • IconColumn::make() - ブール値アイコン
  • ImageColumn::make() - 画像サムネイル
  • BadgeColumn::make() - バッジのスタイル
  • ColorColumn::make() - 色見本
列の修飾子
  • ->searchable() - 検索を有効化
  • ->sortable() - 並べ替えを有効化
  • ->toggleable() - 表示/非表示を切り替え可能
  • ->wrap() - テキストを折り返す
  • ->limit() - テキストを省略する

出力

各リソースについて、以下を生成します。

  1. リソースクラス - app/Filament/Resources/ModelResource.php
  2. ページ - app/Filament/Resources/ModelResource/Pages/
  3. リレーションマネージャー - app/Filament/Resources/ModelResource/RelationManagers/
  4. テストファイル - tests/Feature/Filament/ModelResourceTest.php

コメント