ActiveRecordの呪縛を越えて:DataMapperと不変性の間で「コシ」のある設計のバランスを模索する by katzumi

PHPカンファレンス香川2026
レギュラートーク (30分)
PHPの話 PHP以外の言語の話

ActiveRecordの呪縛を越えて:DataMapperと不変性の間で「コシ」のある設計のバランスを模索する

katzchum katzumi katzchum
2

ActiveRecordは爆速開発を支える「手軽さ」の象徴ですが、プロジェクトの成長と共に「DB構造とロジックの密結合」という呪縛を生みます。本セッションでは、クリーンアーキテクチャの理想を掲げ、Laravel Eloquent(ActiveRecord)からDoctrine(DataMapper)への移行を試みる中で私たちが直面している、「手軽さと堅牢さの折り合い」についての葛藤を共有します。

移行の大きな動機は、インフラ層での「Eloquentモデルとドメインモデル」の二重管理による、泥臭い値の詰め直し(インピーダンスミスマッチ)を解消することにありました。DataMapperがマッピングを吸収することで、ドメインは純粋なPOPOとして振る舞い、開発者は「値の移し替え」という苦行から解放されるはずでした。

しかし、そこで待ち受けていたのは、一筋縄ではいかない設計の「コシ」でした。不変条件を守るための「イミュータブルな設計」を目指すと、DataMapperの核心である「Unit of Work(変更検知)」の仕組みと真っ向から衝突します。「手軽さを維持したいが、堅牢さも譲れない」。この両者の間で、私たちは今まさに最適なバランスを模索しています。

・EntityとValue Objectの役割分担をどう定義し直すべきか ・セッターを排しつつ、UoWとも共存できる「制御されたミュータビリティ」の探求 ・ドメインイベントを明示的に扱うことで、設計の透明性をどう確保するか

本セッションでは、現在進行系で理想のアーキテクチャと選定技術の「相性」にどう折り合いをつけ、チームで納得感のある設計を言語化してきた内容を紹介します。「手軽さ」と「堅牢さ」。その間で揺れ動きながら、長く愛されるシステムのための「最高のコシ」を共に考えてみませんか。