生産性を向上させるメタオブジェクト技術 - 分裂勘違い君劇場

マジレスしにくい日記名だ。


技術的には C# のメタプログラミングとして面白い。ネタも扇情的でいい(はてなブックマークを見ると、途中からより煽る方向へタイトルを変更したようだ)のでつっこむことにした。未整理なままに書き綴っているところに親近感が湧いたし。
違うな。スルーしようと思ったが、消化できないので書くことにした。


フレーム覚悟で言う。

public class Recipe : RailsModel{
	public int id;
 	public String title;
 	public String instruction;
 	public DateTime date;
 	[BelongsTo("Category")] public int category_id;
 	うんちゃらかんちゃら。。。
}
[HasMany("Recipe")] public class Category : RailsModel{
	public int id;
 	public String name;
}

ダサい。


とだけ書くのはずるいので、頑張って言語化してみよう。
重要な順に読めないのがマズイ。HasMany("Recipe") より Category の方が大事でしょ?
一対多関連が増えた場合、頭にクラス属性がいっぱいついてウザイ。外部キー名が規約と違う場合等は?
このクラスを用いて CREATE TABLE 処理を生成することを考えているようだが、String title とかの文字列長とかはどうするの? (DRY の方向性としてコード側にスキーマ定義を持ってくるのはアリだと思う)
public 多すぎ。はいはい public, public、って言いたいぐらい目に付く。


上の「?」付きの疑問は、全て解決「できる」けど、残念ながら C# の記法では「読みやすく」ならない。DSL として用いるには「あそび」が足りない、というべきか。Ruby がいかに DSL として適しているかは「オープンソースマガジン 2006年3月号」の角谷さんの記事を参照の事(宣伝! すげぇ、オレ営業上手)。


C# はマシンリーダブルという意味で読みやすいが、Ruby はヒューマンリーダブルという意味で読みやすい。これは批判じゃなく相対的な差異に過ぎないから気にしないように。C# は誰が書いても見た目はほとんど同じで論理的に読みやすい。Ruby は習熟度によって大きく、大きく差がでる。年季じゃなくて Ruby Way に馴染めるかどうか。同じクラスベース言語の C++, Java, C# みたいな書き方もできるが、それをすると Ruby ではダサい。記法の自由度ゆえに自然にも書けるし大きく逸脱することもできる。それゆえか、私見だが、ユーザーの「読みやすさ」に対するこだわりが他言語と大きく違うと思う。また、「読みやすさ」を大事にする人が集まっているように思う。See:

元々フォーカスが違うからねぇ。C# は「業務」が念頭にあるわけだけど、Rubyは「人間(プログラマ、最終的にはまつもとさん)」が第一。


閑話休題。
アーキテクチャの「陳腐化」はしょうがないでしょう。Rails現状のウェブアプリケーション開発の最適解を狙ってるわけで、最適化されたものの運命ってそんなもん。ウェブアプリケーションというもの自体だってどうなるか。
O/R マッピングなんかできれば誰も使いたくないわけで、RDBMS 以外に高速な格納場所の代替がないから使ってるだけだし。元々オブジェクトとリレーショナルモデルは別世界じゃないか。統合するのは結構なことなのでドンドンやって欲しい。
問題はより良いプラットフォームが、いつ、普及するのかだ。RDBMS との付き合いってすっげ長くね? ここ(O/Rマッパー)まで来るのに何年かかった? Rails は、いま、目の前の問題を解決するモノとしてここにある。


元のエントリとは関係なく「他言語でも実装できる」という意味で「陳腐化」を捕らえてる人へ。
それは全くその通りです。リフレーミングすれば「普及」になりますね。DRY も CoC も他言語でできないものはない。となれば、残るのは Language Matter。C#Rails 風のフレームワーク作っても手触りは同じにならない。Ruby には DSL という観点でみれば大きくアドバンテージがある。


「ラピッド」開発と「アジャイル」開発の違いについて書きたいけど保留。残念ながら力不足。


追記
C# on Rails は実現できない。Ruby on Rails のキモの一つ DSL が実現できないからだ。
開発環境等を考慮せず、ウェブアプリケーション・フレームワークという観点だけで見ても。
C# では良いウェブアプリケーションフレームワークが作れないという意味でもないし、Rails のやり方がベストという意味でもないので注意。現に ASP.NET は最良の部類の一つだと思う。


言語によって道は異なる。その例として「オープンソースマガジン 2006年3月号」の私の記事を読めば PerlCatalyst が独自の道を選んで正解だと言うことがわかる(最終的に言いたいのはこれか!)。id:naoya さんも(Rails 特集全体を)「これは買いだなぁ」って言ってるし! うはwwwオレwアサマスwwww。ソフトバンククリエイティブさんこれでいいですか? 逆効果!?