Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【ORM不要論の歴史】なぜ生まれ、20年前に何を言われたか
Search
赤神青空
PRO
September 10, 2026
Video
Programming
44
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【ORM不要論の歴史】なぜ生まれ、20年前に何を言われたか
赤神青空
PRO
September 10, 2026
Video
More Decks by 赤神青空
See All by 赤神青空
【AWS資格のニュース】SAP が SAP-C03 に変わります
akagami
PRO
0
2
【力学 #5】単振り子と小角近似
akagami
PRO
0
5
【AIニュース】Genie 4 とは何か
akagami
PRO
0
15
【基本情報対策】IPアドレスとサブネットマスク
akagami
PRO
0
15
GPT-6 Cyber とは何か
akagami
PRO
0
15
【AWSの新サービス】Amazon ECS Gateway とは何か
akagami
PRO
0
20
【力学 #4】単振動:ばねの運動方程式を解く
akagami
PRO
0
9
【力学 #4】単振動:ばねの運動方程式を解く
akagami
PRO
0
10
Cloudflare の AI で他人の会話が混ざった?
akagami
PRO
0
27
Other Decks in Programming
See All in Programming
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
170
AmebaブログはKMPから卒業します
kmars0605
0
340
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
Railsバージョンを4倍にした話
optim
0
1k
オーケストレーション記述言語 Katari
yukikurage
0
250
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
250
protojson における文字化けの扱い
kazuki1023
0
310
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
220
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
580
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
2k
Seven New Principles of Software Engineering
yegor256
0
470
Getting Started with Vibe Coding
miccheng
0
200
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.2k
Making the Leap to Tech Lead
cromwellryan
135
10k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
Optimizing for Happiness
mojombo
378
71k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Making Projects Easy
brettharned
120
6.9k
Speed Design
sergeychernyshev
33
2.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Transcript
2026年9月 ORM不要論を、20年ぶんさかのぼる 第2回 なぜ生まれ、20年前に何を言われたか 赤神 青空
02 なぜORMが生まれたか 2005年ごろの現場を見る 今ココ 歴史 2/14
▪JavaでDAOを手書きした場合(一部) ORMなしで書くとこうなる 中身を読む必要はありません。長いということだけが情報です。 java public User findById(long id) throws SQLException
{ Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; final String sql = "SELECT id, name FROM users WHERE id = ?"; try { conn = connectionFactory.getConnection(); ps = conn.prepareStatement(sql); ps.setLong(1, id); rs = ps.executeQuery(); if (rs.next()) return mapRow(rs); return null; } finally { if (rs != null) rs.close(); } 今ココ 歴史 3/14
▪国内のJava・.NETで、ある程度の規模の案件では 2005年より前には一般化していた 当時よく使われていたのは Hibernate、iBATIS、S2Dao あたり。以下は、当時を知る書き手の回想として。 DTOのgetter/setterを全部手で書く Connection / PreparedStatement /
ResultSet を毎回開いて閉じる 入力補完のないテキストエディタで書いている人も多かった 開発PCが貧弱でIDEを使うほうが遅い、という事情もあった 今ココ 歴史 4/14
▪高尚な設計思想から生まれたわけではない 出発点は素朴だった ORMが世に出てきた経緯は、 「DAO/DTOを手で書くのがめんどくせえ」 だと言われています。 この出発点は、今の「AIが書いてくれるなら要らない」と地続きです。 今ココ 歴史 5/14
03 2006年の論争 The Vietnam of Computer Science 今ココ 2006年 6/14
▪講演ではなく、懇親会の立ち話から始まっている いつ、どこで言われたか TechEd 2004(サンディエゴ)のカンファレンス後のイベントでの雑談に人が集まり、即席のBOFになった。その場で出 た一言が発端。 記事として書き下ろされたのは、その2年後の2006年6月 書くきっかけになったのは、当時の2つの動き ADO.NET 3.0 の
entity support の発表 JPA が EJB Entity Beans と JDO の置き換えとして受け入れられたこと つまり最初から、特定の製品ではなく「この方向でいいのか」への疑問だった 今ココ 2006年 7/14
▪Ted Neward「The 20年前に言われたこと Vietnam of Computer Science」(2006年6月) 出だしは順調で、時間とともに複雑になり、やがて抜け出せなくなる。 境界線も、勝利条件も、撤退の道筋も、どこにも定義されていない。 —
Ted Neward(原文では "no clear demarcation point, no clear win conditions, and no clear exit strategy") 今ココ 2006年 8/14
▪上の3つを今回、下の3つを次回に見ていく 原典が挙げている6つの問題 【モデルの構造から来るもの】 継承の写像 同一性 部分取得 どれを選んでも何かを諦める 参照で見るか、状態で見るか オブジェクトは一部だけ持てない 3方式しかない
【運用と組織から来るもの】 別物の基準が違う 半端が作れない スキーマの所有権 二重スキーマ 取得の書き方 開発チームの手を離れて凍結される コードとDDLの両方に同じ知識 どれも一長一短で決着しない 誰のものか 今ココ 2006年 定義が2箇所 QBE / QBA / QBL 9/14
▪原典が最初に挙げている問題 継承の写し方と、関連の写し方 table-per-class … クラスごとにテーブルを作る 派生クラスを1件取るのに、階層の数だけJOINが要る 「Personを全部探す」だけで、派生先の全テーブルにJOINが伸びる table-per-concrete-class … 最派生クラスだけテーブルにする
非正規化のコストを受け入れることになる table-per-class-family … 階層まるごと1テーブル 空の列が大量に出るので、全列をNULL許容にせざるを得ない 原典は、継承の写し方と関連の写し方をひと続きで扱っている 関連先のデータを取るには、結局どこかでJOINが要る いつ取りに行くかは別の問題として、後段で改めて論じられる 今ココ 2006年 10/14
▪クラス階層を、どうテーブルに落とすか 継承の3方式 オブジェクト側 Person テーブル側 table-per-class PERSON Student GraduateStudent 継承は3段
どれを選んでも代償がある STUDENT table-per-concrete-class GRAD STUDENT GRADUATE table-per-class-family PERSON(判別カラム付き) 1件取るのに階層の数だけ JOIN が要る 最派生だけをテーブルにする 非正規化のコスト 階層をまるごと1枚に入れる 全列を NULL 許容に 派生が増えるほど伸びる 同じ列が各所に重複する 整合性制約を自分から捨てる リレーショナルモデルに継承という構造が無いので、写し方は3つしかない 実装が下手だからではなく、モデルの構造がそうなっている 選択肢は3つしかなく、どれも別の代償を払う 今ココ 2006年 11/14
▪「部分取得」から派生する問題(ただし原典の 後から読みに行くとN+1になる N+1 とは別) 最初のSELECTが1本、 user.posts に触れるたびに1本。10人なら11本、100人なら101本。 原典が N+1 と呼んでいるのは列を1つずつ取る話で、いま言う行の
N+1 とは別。 ruby users = User.limit(10) users.each do |user| puts user.posts.count end 今ココ 2006年 12/14
▪2006年のエッセイの核心 実装では消えない これらは実装の出来不出来ではなく、 モデルの構造そのものから来ている。 だから解けない 最初の8割を簡単にする代わりに、残り2割で泥沼になる。 だから撤退できない 2割に入った頃にはすでにORM前提で書かれている。 「30年やって撤退を繰り返している」と言われるのは、この部分です。 今ココ
2006年 13/14
▪第3回 次回 運用の問題は、いまの責務論に直結する 構造から来る問題は、実装では消えない。 では残りの3つはどうなのか。 スキーマの所有権と、二重定義の話に入ります。 今ココ おわりに 14/14