ひがやすを技術ブログ

電通国際情報サービスのプログラマ

DIを意識させたらキャズムは超えられない

Java でも比較的先進的な考えを持つフレームワークがたくさんあります。そして、先進的なフレームワークは作者でさえ、流行っている、たくさん利用されていると錯覚する場合があります。利用者となるプロジェクトには大抵、新しいことが好きな先進的な人がいて、アーキテクチャを決めてしまいます。そういう人はよくネットなどで情報を発信します。また先進的であれば、記事や書籍でこぞって取り上げられ(もちろん中の人の努力もあります)、流行ってるように見えてしまいます。実際には出来れば新しいことには手をつけたくない人のほうが圧倒的に多いにも関わらず。

どこかの掲示板で、DIは疎結合のためにあるとか、そのためにインターフェースと実装を分離するんだとか、再コンパイルせずに、設定ファイルの変更のみで実装を変更できるんだとか、書いている人を見て、懐かしく思いました。
こんないいもの(たとえばDI)を理解できないのは、理解できないやつがだめだからみたいな。


でも実際のところは、id:cypher256さんが、書いているように、新しいことには手をつけたくないと思っている人が大多数。実際はそれほど使われていないにもかかわらず、はやっているように見えるのは、声の大きい人がそう主張しているから。
例えば、ネットにそのフレームワークの記事が多く出たりすると、なんかはやっているように見えます。その記事の中で、「はやっているフレームワーク」だとか「デファクトスタンダードフレームワーク」だとかそう書くと、実際にそうなんだと、みんな思い込む。
でもそれは、新しいもの好きのごく一部ではやっているに過ぎないのです。デファクトスタンダードなのもごく一部でだけ。
だから、DIについて、小難しいこといっても、ほとんどの人はついてこない、理解しない。もっと誰でも理解できるようにメリットを話さないとだめ。
その証拠にある大手調査期間が2008年5月に行った調査だと、Seasarを使っている割合が0.9%、Springを使っている割合が0.4%。この調査は、Java以外のフレームワークもすべて含まれているので、Javaだけに限るとこれを3倍した数値になりますが、SeasarとSpringを足しても4%弱、DIコンテナはたくさん利用されているとはとてもいえませんね。はやっているように見えるにもかかわらず。

そこでデファクト化するにはキャズムを埋めるような考慮が必要になると思うのですが、これは明らかに相反するものです。「先進的な機能や用語が満載」かつ「機能が枯れていて小難しい用語がない」ものがデファクトになり得る。ところで DI コンテナ上で動く SAStruts の機能リファレンスには「DI コンテナ」や「インジェクション」という用語が登場しませんね。ここまで意識して書くのは大変だったんではないでしょうか。

DIのような技術用語は、説明がどうしても難しくなるし、普通の人はメリットを理解しづらいので、最近は、ほとんど使っていません。
とはいえ、何のアピールポイントもないと、誰も使ってもらえないので、HOT deployに的を絞って、さくさく開発することによって、開発者自身の生産性を向上させるんだよということをアピールしています。
HOT deployが可能になると、ちょっとコードを書いてはすぐに確認ということを短期間で繰り返すことができます。確認してOKなら、自分のやったことに自信が持て、モチベーションアップにつながります。仮に結果がNGだったとしても、直前に書いたコードは少ししかないので、どこが間違ったかすぐに気付くことができます。デバッグで試行錯誤する時間をほとんどなくすことができるのです。


この狙いは今のところ、うまくいっているのではないかと思います。今、Seasar2を使っている人で、DIがどうだとか考えている人はほとんどいないと思います。また、HOT deployによって、気持ちよく開発できることを実感しているのではないかと思います。


多くの人に使ってもらう(キャズムを超えるため)ためには、小難しいことはいわず、わかりやすくメリットを伝える必要があるのです。


難しいことをいってて損しているフレームワークは結構ある。例えば、Wicketは、ステートフルがアピールポイントだと思うけど、普通の人には、伝わりづらいと思うよ。Javaで書けるってのも良さは伝わりづらいかな。もっとわかりやすい、アピールポイントを見つけたほうがいいと思う。