Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【ORM不要論の歴史】運用の問題は、いまの責務論に直結する

 【ORM不要論の歴史】運用の問題は、いまの責務論に直結する

Avatar for 赤神青空

赤神青空 PRO

September 11, 2026

Video

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪ORMと呼ばれるライブラリがやっている仕事 7つの責務 a b c d e f g クエリの組み立て

    行とオブジェクトの変換 関連の解決 スキーマの単一情報源 マイグレーション インジェクション対策 トランザクション管理 今ココ 責務の分解 SQL文字列を直接書かずにクエリを作る 取得した行をオブジェクトに詰め替え、書き戻す 関連レコードを属性のように辿る テーブル定義を一箇所に置き、そこから型を導く スキーマの変更を差分として記録し、順に適用する 値をプレースホルダとして扱う 一連の操作をまとめて確定または取り消す 5/11
  2. ▪表で色を付けた2つ 批判が集中するのは b と c 2006年に「解けない」とされた食い違いは、 b(変換)と c(関連) に集中している。 bとc

    構造から来るので解けない。今の不要論もここが中心。 a・d・e 争点にはなるが、別のツールに任せられる。 「ORM不要」と書かれているものの多くは、bとcを指しています。 今ココ 責務の分解 6/11
  3. ▪構成ごとに、どこを誰が持つか 責務の割り当てとして見る a b c d e f g 組み立て

    変換 関連 情報源 移行 注入対策 トランザクション フルスタック ORM a から g までを1つのライブラリが抱える Kysely + Atlas Kysely なし 生 SQL + SafeQL 生SQL なし Atlas なし Kysely dbmate ドライバ 自分で担保 + dbmate 手放しているのは b と c だけ 「ORM を使う/使わない」は、実際にはこの割り当ての問題だった SafeQL は生SQLに型検証を足すもので、いずれかの責務を置き換えるものではない 責務ごとに、別のツールへ割り当て直せる 今ココ 責務の分解 8/11
  4. ▪特定のコミュニティの流行ではない 同じ形が、言語をまたいで並んでいる 【SQL前提の軽量ORM】SQLは開発者が書き、ライブラリはマッピングとバインドだけ Dapper sqlx MyBatis 実態はSQLを書く前提の軽量マッパー 標準ライブラリの薄い拡張 SQLを外に置いて結果を詰める C#

    Go Java 【SQLファーストな型安全ORM】SQLを書く前提で、壊れないよう型で縛る sqlc TypedSQL SQLx jOOQ SQLからコードを生成する Prismaに載っている機能 コンパイル時にクエリを検証 SQL中心で型と高度なクエリ Go TypeScript Rust Java ORMを捨てたというより、ORMに期待しすぎない、という態度に近い 今ココ 責務の分解 9/11