mcpField
D
doctrine-transactions

doctrine-transactions

github.com/dev-toolingsデータ・データベース22798 回インストール3 週間前に更新
リポジトリ

doctrine-transactions について

doctrine-transactionsは、Symfony Doctrine ORMのトランザクション処理を支援するスキルです。トランザクション境界やロック方式、ロールバック後の復旧を案内し、操作ごとの単一flushと短時間のトランザクションを重視します。

主な機能

  1. 01サービス層で境界を設定
  2. 02wrapInTransaction()の使用
  3. 03楽観ロックまたは悲観ロックの選択
  4. 04ロック競合と制約エラーへの対処
  5. 05ロールバック後のEntityManager整理と再取得

活用シーン

  1. 01関連する複数の書き込みを一括コミット
  2. 02同時編集による上書きの防止
  3. 03flush失敗や接続切断からの復旧

インストール

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

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill doctrine-transactions

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

同梱ファイルreference.md

詳細

Doctrine Transactions(Symfony)

使用する場面

  • 複数の書き込みをまとめて成功または失敗させる必要がある場合。
  • 2 人のユーザーまたはワーカーが同じ行を同時に編集できる場合。
  • フラッシュする場所と、トランザクション境界を管理する主体を決める場合。
  • フラッシュの失敗、制約違反、接続切断の後に復旧する場合。

デフォルトのワークフロー

  1. トランザクション境界はコントローラーではなく、サービス層に設定します。
  2. 関連する変更をまとめ、wrapInTransaction() の中で 1 回だけフラッシュします。
  3. 同時実行制御の戦略を選択します。編集には楽観的ロックの #[ORM\Version]、短時間のクリティカルセクションには PESSIMISTIC_WRITE を使用します。
  4. OptimisticLockException と制約違反を明示的に処理します。
  5. ロールバック後は EntityManager をクリアし、引き続き必要なデータを再取得します。

ガードレール

  • ORM 3 では EntityManager::transactional() は廃止されています。wrapInTransaction() を使用してください。
  • 明示的なトランザクションの外では、フラッシュのたびにコミットされるため、1 つの操作で複数回フラッシュするのは避けてください。
  • トランザクションと悲観的ロックは短時間に保ち、その中で HTTP 呼び出しやメール送信を行わないでください。
  • 失敗した作業単位のエンティティを再利用しないでください。

段階的な情報開示

  • 実行時の方針とリスク管理には、このファイルを使用します。
  • 実装の詳細が必要な場合は、リファレンスを参照してください。

出力要件

  • 1 回の操作につき、単一のフラッシュでトランザクション境界を設定します。
  • エンティティごとに選択したロック戦略と、競合がユーザーに伝わる方法を示します。
  • ロールバックの処理と、その後の EntityManager の状態を示します。

参考資料

  • reference.md

コメント