laravel:laravel-prompting-patterns について
Laravel 固有のプロンプト作成を支援するスキルです。フレームワークの用語を使った慣用的な解決策を促し、データベースクエリ、バリデーション、API、バックグラウンドジョブ、ドキュメント参照を扱います。
主な機能
- 01Eloquent クエリとリレーションのパターン
- 02バリデーションリクエストとルールの例
- 03REST API リソースのパターン
- 04キューとジョブ設定の例
- 05Laravel ドキュメントの参照方法
活用シーン
- 01リレーションを先読みする Eloquent クエリの依頼
- 02ネストした入力のバリデーション指定
- 03リソースベースの API エンドポイントの計画
- 04キューを使うバックグラウンド処理の説明
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:laravel-prompting-patternsインストール後、Claude Code で/laravel:laravel-prompting-patternsを入力して読み込まれたか確認します。
詳細
Laravel のプロンプトパターン
Laravel の用語を使うと、慣用的なコードを得られます。汎用的な依頼では、フレームワークを活用しない汎用的な解決策が返されます。
データベース操作
汎用的な依頼
「投稿を持つアクティブなユーザーをすべて取得する」
Laravel に特化した依頼
「Eloquent を使って、投稿を Eager ロードしながらアクティブなユーザーをクエリしてください。
User::where('active', true)
->with('posts')
->get();
User モデルに scopeActive($query) スコープを追加してください」
リレーションシップ
「Posts と Tags の多対多リレーションシップを設定してください。
post_tag中間テーブルのマイグレーションを作成する- Post モデルに
belongsToManyを追加する - Tag モデルに
belongsToManyを追加する - 管理には
attach()、detach()、sync()を使う」
クエリの最適化
「投稿一覧で N+1 問題を回避してください。
authorとcategoryのリレーションシップを Eager ロードする- コメント総数には
withCount('comments')を使う published_atとcategory_idにデータベースインデックスを追加する」
バリデーション
汎用的な依頼
「ユーザー入力をバリデーションする」
Laravel に特化した依頼
「バリデーションルールを指定して UserStoreRequest を作成してください。
public function rules(): array
{
return [
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'min:12', Password::defaults()],
'name' => ['required', 'string', 'max:255'],
];
}
messages() メソッドにカスタムエラーメッセージを追加してください」
複雑なバリデーション
「注文作成をバリデーションしてください。
- 商品 ID には
Rule::exists('products', 'id')を使う - ネストされた items 配列をバリデーションする:
items.*.quantityは整数で、最小値は 1 とする - 配送先住所の条件付き指定には
Rule::requiredIf()を使う - 在庫確認用のカスタムルールを追加する:
new HasSufficientStock」
API エンドポイント
汎用的な依頼
「商品用の API を作成する」
Laravel に特化した依頼
「RESTful な商品 API を作成してください。
- リソースコントローラー:
ProductControllerと apiResource ルート - レスポンスの変換には
ProductResourceを使う - ページネーション付きの index エンドポイントに
ProductCollectionを追加する - Sanctum ミドルウェアで保護する:
auth:sanctum - 作成時は 201、削除時は 204 を返す
- バリデーションには
ProductStoreRequestとProductUpdateRequestを使う」
ページネーション
「商品 API にページネーションを追加してください。
- コントローラーで
Product::paginate(20)を使う ProductResource::collection($products)で返すtotal、per_page、current_page、last_pageのメタデータを含める?page=2クエリパラメーターに対応する」
フィルタリング
「商品 API にフィルタリングを追加してください。
?category=electronics&min_price=100クエリパラメーターを受け付ける- 条件付きクエリには
when()を使う - 再利用できるように
ProductFiltersクラスに切り出す - API ドキュメントにクエリパラメーターを記載する」
バックグラウンド処理
汎用的な依頼
「ユーザー登録後にメールを送信する」
Laravel に特化した依頼
「登録後に SendWelcomeEmail ジョブをディスパッチしてください。
SendWelcomeEmail::dispatch($user)
->onQueue('emails')
->delay(now()->addMinutes(5));
ShouldQueueインターフェースを実装する$tries = 3と$timeout = 30を追加するfailed()メソッドで失敗を処理する- Horizon 用にジョブにタグを付ける:
$tags = ['user:'.$user->id]」
キューの設定
「支払い処理用のキューを設定してください。
- 支払いキューには
redis接続を使う queue:work --queue=payments,defaultを設定する- 設定に
retry_afterを追加し、90 秒にする - Horizon ダッシュボードで監視する」
ジョブチェーン
「ジョブチェーンで注文を処理してください。
Bus::chain([
new ValidateInventory($order),
new ChargePayment($order),
new SendConfirmation($order),
])->dispatch();
いずれかのジョブが失敗すると、チェーンは停止します。catch() コールバックで処理してください。」
ドキュメントの参照
効果的な参照
「Laravel の Eloquent リレーションシップのドキュメントに従って実装してください」
「Laravel の Form Request バリデーションパターンに従ってください」
「レスポンスの変換には Laravel の API Resource パターンを使ってください」
「Laravel キューのドキュメントに従ってキューを設定してください」
パターンカタログ
モデルと Eloquent:
- リレーションシップ:
hasMany、belongsTo、belongsToMany、morphMany - スコープ:
scopeActive、scopePublished - アクセサー/ミューテーター:
get{Attribute}Attribute、set{Attribute}Attribute - キャスト:
protected $casts = ['published_at' => 'datetime']
バリデーション:
- フォームリクエスト:
UserStoreRequest、ProductUpdateRequest - ルール:
required、unique:table,column、exists:table,column - カスタムルール:
new Uppercase、Rule::in(['admin', 'user'])
API:
- リソース:
UserResource、ProductCollection - ページネーション:
paginate()、simplePaginate()、cursorPaginate() - レート制限:
throttle:60,1ミドルウェア
ジョブとキュー:
- ジョブ:
ShouldQueue、dispatch()、dispatchSync() - チェーン:
Bus::chain()、Bus::batch() - Horizon:タグ付け、監視、失敗したジョブの処理
Laravel の用語を使いましょう。Laravel の解決策を見つけましょう。