読者です 読者をやめる 読者になる 読者になる

JavaからRubyへ 読了

JavaからRubyへ ―マネージャのための実践移行ガイド

JavaからRubyへ ―マネージャのための実践移行ガイド


JavaからRubyへ移行するためのガイド本。ただし、何でもかんでもRubyのほうがいいよ、ということではなく、特にWebアプリケーションの開発を中心に、JavaRubyのメリット・デメリットについて述べ、JavaからRubyへ移行するための戦略について紹介している。
なぜJavaよりもRubyがよいかというと、

  • Javaは生産性が低い。JavaC++の遺産を引きずっているし、膨大な数のフレームワークが混乱を招く。Rubyは動的型付け言語であるため、ステップ数は少なくなり複雑性が減る。
  • JavaStrutsHibernate、Spring、JSFなどなど、フレームワークが乱立していて、複雑すぎる。環境を構築するだけでも大変で、立ち上がりが遅い。一方、Rubyであれば、フレームワークとしての選択肢はRailsだけであり混乱することはない。導入も簡単で立ち上がりが早い。
  • Javaは再利用を実現するための仕組みが複雑すぎる。Rubyであれば、再利用を実現するようなコストをかけている間に、新規でもどんどん開発を進められるし、JRubyを使えばJavaの資産も利用できる。

などなど。生産性が4倍〜10倍アップしたとか、メンバを減らしてもJavaより早く開発できたとか、とにかくRailsはスゴイというのが何度も出てくる。Railsの採用実績もずいぶん増えてきているみたいだし。そういえば今月の日経ソフトウェアRuby特集でした。

ただ、動的型付けの言語だと、コンパイル時にエラーをチェックできないから、品質面では不利じゃないのかなと思ったんだけど、それに対しては、「Railsではテストの仕組みも組み込まれているし、静的型付け言語ではコンパイルでチェックするようなエラーもRubyではテストでチェックするべきだ。」とあった。それでいいのかなぁ?ということは、常にカバレッジ100%のテストをやらなくてはならないのだろうか?JavaのObject型みたいのを使うよりも、Genericsを使って、事前にエラーを検出することは大事だと思うんだけどな。
あとは、Javaでは有効なツールがたくさん揃っているというのは、すごいメリットだと思うんだけど、その辺の記述はあまりなかった。Rubyもこれからいろいろなツールが出てくるんだろうか。


僕自身のJavaRubyの経験はというと、入社1年目でStrutsとかJavaScriptを使って、位置情報を更新表示する(今で言うAjaxみたいな)Webアプリのプロトタイプを作ったのですが、ApacheStrutsをインストールして、サンプルが動かすだけでも大変苦労した思い出があります。
一方のRuby on Railsは、1年位前に流行っているのを知って触ってみたのですが、立ち上がりがすごく早くて、「あぁ、確かにこれならJavaの10倍の生産性があると宣伝されているのもうなずけるな。」と思いました。それに、「DRY(Don't Repeat Yourself)」とか「設定より規約」のような設計思想を知れたのも面白かったですね。それ以来、Railsはあまり触ってないのですが、ちょっとしたソースコードの自動生成ツールとかはRubyで作ったりしてます。あと、Rubyはプログラムを書くのが楽しいっていうのが大きい。


僕がこの本の中で一番大事だと感じたことはこれ。Javaを象を撃つための銃に例えて、

こんにち、無邪気にJavaで解決しようとしている問題の多くは象ではありません。Javaで解決している問題のほとんど―――リレーショナルデータベースにWebベースのユーザインターフェイスを配したもの―――は象ではないのです。せいぜい、ふわふわした毛のウサちゃんかリスちゃんです。ウサギを仕留めるのに象撃ち銃は不要です。ウサギに象撃ち銃を使えば、目も当てられない結果が待っています。

つまり、自分の使える技術だけで何とかしようと考えるのではなく、常日頃から技術に対してアンテナを張っておいて、問題を解決するために最も適した技術を採用すべきだということ。
だから、この本を読んで、「Ruby最強!」と何でもかんでもRubyを使おうとするのではなくて、状況に応じてはJavaを選択することも考える必要がある。
僕の周りでは、WebアプリもGUIアプリもJavaでいいじゃんとか、データ構造ならXMLでしょとか、そういう意見も多いんだけど、WebアプリならRailsの導入を検討したのか、GUIアプリなら.NETを検討したのか。(マルチプラットフォームを理由にJavaを押す人も多いけど、最近ではMonoという選択肢もあるし。) データ構造に至ってはほぼXML一本になっている気がする。まぁ、YAMLとかJSONは、まだまだ知名度も低いからしょうがないとは思うけど、ちょっとしたアプリの設定ファイルとかにXMLを使うのは大げさすぎるんだよなぁ。まぁ、自分の使える技術を推すという気持ちも分らなくはないが、そうならないように、普段からいろんな技術に触れることが重要だなと。

あと、ちょっと悲しかった記述があった。

そういえば、CORBAの名で知られる絶滅したアーキテクチャもメッセージ通信が基点でした。

えっと・・・、CORBAって絶滅したの・・・?