4月末に予定されている1.5へのバージョンアップに向けて、JRubyプロジェクトはJavaとRubyの相互運用性を改善し続けている。これによって、Ruby開発者はJavaプラットフォームの利点をもっと強力に利用できるようになる。一方でJava開発者は既存のプロジェクトにRubyのツールを利用する利点を見つけるようになるだろう。
JRuby 1.5の最大の特徴のひとつは構成管理の分野に現れている。JRuby 1.5ではAntとMavenのリポジトリとの包括的な統合が行われる。JRubyがMavenと統合することによって、JavaのライブラリがGemとしてインストールできるようになり、その結果、数万の新しいGemがJRubyプラットフォームで利用できるようになる。
Sonatype社のTamas Cservenak氏のおかげで、不可能だと思われていたことが実現しました。RubyGemsとMavenのアーティファクトが完全に統合されたのです。
JRuby 1.5では、Mavenリポジトリに既に公開されているJavaライブラリをインストールしたり利用したりできます。つまり、60000を超える新しいライブラリがすぐに利用できるようになるのです。
この統合はMavenサーバを通じて実現される。MavenサーバはJRubyにとってのRubyGemsリポジトリのようなものだ。普通のRubyのライブラリを利用するのと同じくらい簡単にJavaのライブラリが利用できるようになるのでJRubyの利用者ははっきりと便利になったのがわかるだろう。またこれによって、技術の進化の中でライブラリのサポートが重要視されるエンタープライズ分野でもJRubyはより有効な選択肢となるだろう。
さらに、JRuby 1.5はJava開発者の依存性管理の改善を支援する。JRuby 1.5にはAntが統合されるからだ。JRubyのリードの1人であるCharles Nutter氏は最近のブログで、Java開発者がRubyのビルドツールRakeとApacheの依存性管理ツールIvyを使って依存性を管理する方法を披露した。Ivyは普通はAntから利用されるが、RakeはIvyをダウンロードしてインストールできるので、Ivyを使ってリモートのリポジトリからjarやその他のリソース(そしてその依存物)をフェッチしてビルドに利用する。JRuby 1.5では、RakeからAntのタスクをコールできるのでこの方法が実現できる。
しかし、Ant上の依存関係を少なくしたいと考えているJava開発者はすべてのビルドファイルを最初から書き直す必要はない。RakeからAntのタスクを実行できるのに加えて、AntからRakeを呼び出すこともできるのだ。また、RakeのタスクをAntのターゲットとしてインポートすることも可能だ。JRubyのリードの1人であるTom Enebo氏は次のように書いている。
新しい機能に対応するRakefileを別に作っておいて、チームのメンバに好きなだけそのファイルを編集してもらいます。こうしておけば、Rakeの能力により依存したビルド方法を実行できます。RakeのタスクをAntの依存グラフに注入できるからです。メインのビルドにはAntを使い続けながら、一部のビルドをRakeにまかせることができるのです。
Rake/Ant統合によって開発者はRakeと/Antの双方の利点の恩恵を受ける。
私が思うに、多くの開発者はAntを構文的にはちょっと汚いが仕事はしっかりやってくれるビルドツールだと見なしています。手続き型プログラミングの制御をほとんどサポートしないことも惜しまれているようです。これは設計の結果ですが、多くのプログラマはこれによって決して幸せにはなっていないようです。
反対にRakeはAntよりも優れた構文を持っています。Rubyの構文をつかって構築することも可能です。.... 一方で、Javaの世界でプラットフォームに依存しないタスクを実行する必要がある場合、RakeにはAntに含まれているような標準的なロスプラットフォームのタスクがありません。したがって、シェルコマンドをごりごり書いてこの問題を自力で解決する必要があります... この方法でもきちんと動作しますが、例えばWindows上でビルドしようとすると....
Rakeは手続き型プログラミングの環境を完全にサポートするので、Antでは扱いにくい(またはカスタムのAntタスクを記述しなければ実現できない)ちょっとしたことを実現できます。こういうことはRakeに任せつつ、その他のことはAntを使い続けるということもできるのです。
氏はさらに"Rakeに夢中でも、NetBeansのようなソフトウエアではbuild.xmlを見ることを期待するということを知っておく必要があります。Rake使えばそのようなソフトウエアとも連携できます。"
Java開発者はRake/Ant統合を使うことで自身の作業を簡単にできるが、JRubyの開発者も同じだ。RakeからAntを実行でき、RakeからRakeのタスクとしてAntのターゲットを実行できる。そしてAntのビルドファイルをインポートすることでAntのターゲットをRakeのタスクに変換できる。したがって、Rakeの利用者は自身が依存している既存のAntのビルドファイルやシステムを利用することができる。
"理想的にはすべての主要な統合シナリオに対応したいと思っています。最終的にはRakeとAntの境界は曖昧になるでしょう。"と氏は書いている。"そうなればJRubyのビルドはRakeで実現できます。これでみんな幸せになるはずです。"