laravel:transactions-and-consistency について
Laravelで複数段階のデータベース変更を原子的に実行し、リトライを安全に扱うためのスキルです。トランザクション境界、コミット後の処理、冪等なジョブ、行ロックを扱います。
主な機能
- 01関連する書き込みをトランザクション化
- 02コミット後にイベントやジョブを実行
- 03冪等なジョブの設計
- 04行ロックによる書き込み調整
- 05トランザクション前の不変条件検証
活用シーン
- 01レコードと関連項目の一括更新
- 02コミット成功後にのみジョブをキュー投入
- 03ジョブのリトライによる重複処理の防止
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:transactions-and-consistencyインストール後、Claude Code で/laravel:transactions-and-consistencyを入力して読み込まれたか確認します。
詳細
トランザクションと一貫性
複数ステップの変更をアトミックにし、リトライを安全に行えるようにします。
コマンド
DB::transaction(function () use ($order, $payload) {
$order->update([...]);
$order->items()->createMany($payload['items']);
OrderUpdated::dispatch($order); // or flag for after-commit
});
// Listener queued after commit
class SendInvoice implements ShouldQueue {
public $afterCommit = true;
}
パターン
- 書き込み処理と関連する副作用をまとめるには、
DB::transactionを使用します - イベント/ジョブには
$afterCommitまたはdispatchAfterCommit()を優先します - ジョブを冪等にします(既存の状態を確認し、一意制約を使用します)
- 必要に応じて、行レベルの調整に
lockForUpdate()を使用します - トランザクションを開始する前に、境界で不変条件を検証します
- Laravel 13 以降:
upsert()はuniqueByが空の場合にInvalidArgumentExceptionをスローします。必ず実際の一意列を渡してください
コメント
Markdown 対応