ものがたり(旧)

atsushieno.hatenablog.com に続く

Linq to SQLが死滅するようです。って当然じゃん。

id:atsushieno:20080609:p1 の時は憶測で終わっていた話だけど、Linq to SQLはどうやらdisconの方向らしい。ADO.NET team blogにUpdate on LINQ to SQL and LINQ to Entities Roadmapという投稿があって、今後はLinq to Entitiesが開発されていくということが書かれている。

上記エントリには大量のフレーミングが押し寄せていて、そのうちのいくつかは、何というか、腹立たしい。

ちょうど良い機会なので裏話?も含めて書いておくと(といっても僕が噂レベルで聞いた話だけど)、Linq to SQLは、C#コンパイラチームがLINQの機能を売り込むために、C#チームの中で開発されたものだった。これは.NET 3.5に組み込まれた。

一方、LINQの機能を真面目にフレームワークに取り込むべく、ADO.NETチームはEntity Framework (Linq to Entities)を開発した。これは3.5 SP1まで間に合わなかったけど、ADO.NET同様、ちゃんとデータベース中立に設計されている。重要なのは、ADO.NETチームが開発したのはLinq to EntitiesであってLinq to SQLではない、ということだ。

これらの目的は大半がかぶっていて、両方を継続的に開発していくメリットはほとんど無い。そしてC#チームの目的はADO.NETの開発ではないのだから、Linq to SQLの継続的な開発にコミットするはずはない。どちらがこの先生きのこるかは、どちらがどこで開発されているかを知っていれば、自明のことだった。

上記ADO.NET team blogのエントリには、「貴様、おれはLinq to SQLの応用技術に投資してるんだぞ」(意訳)だの「これでLinq to SQLがなくなるなら、Entity Frameworkなんて使ってやらないし、新技術が落ち着いて普及するまでは使わねえ」(意訳)だのといったコメントが付いているが、以前のエントリで書いたとおり、新しいライブラリを使うのであれば、それが継続的に開発されなくなる可能性を常に考慮すべきだ。ましてやLinq to SQLの将来性の無さなんて、以前にも書いたとおり、自明のことだ。"It just works"で動作するコンポーネントに、それ以上の過度な期待を勝手に寄せた挙げ句、disconの発表を受けて非難を寄せるなどというのは(それもLinq to SQLを開発したわけでもなんでもないADO.NETチームにだ)愚の骨頂である。

サポートを引き取った挙げ句Entity FrameworkのuseにまでとばっちりをくらうADO.NETチームの心中も大変複雑であろう。

だいたい、Linq to EntitiesよりもLinq to SQLの設計の方が優れていると主張するのなら、Linq to SQLと同等以上の機能を提供し、SQL Server以外のDBMSまでサポートを広げるとしているDBLinqプロジェクトに参加して、自らの主張を自ら立証すべきだろう(DBLinqはMonoサポートのためにAPILinq to SQL互換にまで修正している)。自分はクレームを投げるだけとか、考えが甘すぎるんじゃねえの?

どうせあなたが書くくだらないアプリケーションのライフサイクルなんて、Linq to SQLを含む.NET 3.5のサポートが終了するより早く終わるだろうし、変更のないコンポーネントを使用するコードなんて、放っておいても古いバージョンで動き続けるだろう。何を心配することがあるのか。*1

そんなわけで、僕は以前にも書いたとおり、Linq to SQLは死滅して一向に構わないと思っているし、ひさびさにランタイムへの変更を伴うであろう.NET 4.0において、消えて無くなるわけではないというだけでもありがたく思えよ、くらいに思っている。

追記: コメントとtrackbackをいただいたので書き忘れていたのを思い出した。
http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/
EFもまだいろいろ批判されてはいるのだよという話。ここが話題になったかな。

ついでに書いておくけど、いまMonoではLinq to SQL統合の作業をやっていて、その担当は他ならぬ僕なのである。SoC終わっちゃったし。予想されていた事態ではあるけど学生の子は夏が終わったらハイサヨナラだし。だから僕がポジショントークするなら、今回の決定については大いにADO.NETチームをdisるところなんだろうと思う。dblinqチームから裏切者扱いされちゃうかもしれないし。けどやっぱりそれって不毛じゃん。今回の決定はどう考えても正しいよ。

*1:補足すると、つまるところ、DLinqを使ってきてしまった、先見の明が無かった、といって後悔しなくてもいいだろ、ということを言っておきたい。MSはそういうユーザのサポートはちゃんとしていくところだと思う。