デファクトに乗っかりながらそれを超えるというRubyの話

ひがさんが思考停止を批判している

実際良く見かけるんだけど「最新の技術についていくのは疲れた」「なにかスーパーなデファクトが現れてそれで統一されて欲しい」「考えるのめんどくさいから標準で統一したほうが無難」なんてのは、おやじ予備軍シンドロームだと思う。

で、Railsにもその虞ありとのことだ。

Javaの世界はフレームワークが乱立していて適切な組み合わせを選ぶのが大変だからRailsで統一されているRubyがいいんだと。

これには、全然賛成できません。悩みたくないからスーパーなデファクトを望むのは、危険だと思うんですよね。ライバルがいないとどうしても進歩の速度が鈍ります。Rails一党独裁よりも、いくつかのフレームワークが競い合うほうが健全なのではないかと思います。

これについてのRailsサイドからの言い分はあかさたさんが「本筋には大賛成です。枝葉末節についてです。」と断った上で「 Railsユーザーだっていろいろ考えているんだけどなぁ・・・ 」で述べていて、

前の Rails 勉強会では Merb というフレームワークが紹介されていました。こちらの記事が詳しいです。このフレームワーク自体はまだ実用には時間かかりそうですが、Rails ユーザも一党独裁問題に対しては、バランスを取り始めています。言い換えると、Rails ユーザはいい意味で Rails に対して批判的です。

うん。そう思う。で、以下はその「枝葉末節について」のさらに蛇足みたいな話だ。

Ruby的な何か

以前日経ソフトウェアに書かせていただいた けど、RubyRailsにはPythonとはまた違った意味で拘束的な「これがこの文化のやり方だ」という何かがある。その記事では触れなかったけど、私はRSpecにもそれを感じていて、だからTest::UnitよりもRSpecが好きだ。

これらは「そのプロダクトが形作る世界にとって自然な考え方」というものがあって、その考え方の範囲でなら何をしても許される。その考え方からはみ出ることを誰も否定はしないけれども、それは恐ろしく不便な茨の道だ。そして、プロダクトは「自然な考え方」に沿う人を全力で支援してくれる。

そして、プロダクトの現在の実装は完成形ではない。「自然な考え方に照らしてどうよ?」と問えば開発陣は答えてくれる。

私は以前、RSpecの癖のある例の記法について会社でこう言った。

RSpecの記法は、なんとなくそれっぽく書けばいいんだよ。それっぽく書いてRubyとしてparseも通って、それでもうまく動かないならそれはRSpecが間違ってるからpatch送れ。

今ならpatchの前に「Matcher書け」というところだけれども。

Railsもそうだ。「これおかしくね?」と言って、それが開発陣の間に共有されている世界像にマッチすれば開発陣はもの凄い速度で動いていく。ActiveRecordなんかは特に「何となく書けば動く」し、それで動かなければプラグインかpatchを書くときだ。あ、これも会社で言ったことがあるなぁ。

ActiveRecordの呼び出しは基本を覚えたらあとはなんとなくそれっぽく書けばいいんだよ。それで動かなければRailsを直せ

と。Cacaded Eagar Loadingなんかはまさにそうして生まれたと思う。同様にして「Rails的にはこの分野ではこう動くべきだよね」という種類のプラグインもたくさんある。acts_asシリーズはまあそうだよね。

Rubyもそうだ。ruby-devではそんな議論がよく為されている。日経ソフトウエアの記事で言及しているように、「驚き最小の法則」は今は禁句だけど精神は生きている。生きているどころか、それがRubyの開発をリードし続けている。

Ruby way

Ruby/RSpec/Railsに、「デファクトを受け入れる」という姿勢は希薄だ。いや、無い訳じゃない。Lispを差し置いてRubyなんかが目立ってしまったのはデファクトスタンダードなALGOL風記法によるところも大きいだろう。ただ、今あるものを粛々と受け入れる姿勢はない。いまあるものの本質を理解して、それに反するものは本家本元であろうと容赦なく批判し、本家もそれを受け入れていく。それがRuby wayである。

ひがさんの論は「今Railsに飛びついている人にはそういう思考停止に陥る虞があるよね」だから、上記の私の話は微妙にずれた議論ではあると思う。けれども、Rubyに脈々と流れる気質はきっと思考停止の害毒を打ち消す方向に作用するだろう。