プログラミング教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた筆者が、独自の視点からJavaの面白さを掘り下げていく。6のリリースにより、Javaプログラミングにおけるスクリプトの重要性もますます高まってきています。いうまでもありませんが、これからはWebサービスをいかに実現していけるか、ということがビジネスにおいて重要ですから、これを実装する言語として、Ruby、Python、PHPといったプログラミング言語に興味を持ち始めている開発者も多いのではないでしょうか?今回は、そんなJavaプログラマがRubyでプログラミングをするとしたら、どんな環境を用意するのがいいのだろうか、ということで調べてみました。Railsとは何か?プログラミング言語Rubyといって最初に注目するのは、なんといってもRailsでしょう。Rails)が世の中に紹介されてから、はやるまではあっという間でした。Configuration(設定よりも規約)、といった方針で開発を進めることができる、という点が開発者から支持されたのでしょう。このような状況ですから、Rubyをさわってみたい、とJavaプログラマが考えるのも当たり前のことです。Rails」をご参照願います。JavaプログラマがいまからRubyを始めるとしたら、どうするのが良いでしょうか。Rubyを使うだけではつまらないですから、Javaと連携させたいと思うのではないでしょうか。検索エンジンで探すとすぐに見つかりますが、世の中にはJavaによるRubyの実装版JRubyというものがあります。JRubyは2006年7月までは、「sourceforge.net」で開発されていましたが、2006年8月からは、「codehaus.org」に移動しています。Microsystemsに勤めることになり、開発コミュニティでは大きなニュースとなりました。JRubyは100%純粋なJavaプログラムなので、Javaの実行環境があれば使えます。JRubyのバージョンは0.9.2なので、力不足のように思ってしまうかもしれませんが、Railsに必要なRuby1.8.5と互換性がありますから大丈夫です。何といっても、JavaのクラスをRubyから使える、というのは魅力的です。ライセンスもCPL、GPL、LGPLの中から選択できます。いうことで、最新版のJRubyでRailsを動かしてみることにしました。/jruby」へアクセスし、jruby-java5-bin-0.9.2.tar.gzをダウンロードしました。6をインストールした環境で実行するようにします。5の場合は、gijがインストールされていたので、確実にJDK6を使うように環境変数を設定しました。ここでは、/usr/java/jdkへJDK6をインストールしたとしています。5でのgijの使い方についての詳細を知りたい読者は、「小山博史のJavaを楽しむ(2)、いろいろなJavaを使ってみよう」の「GNU系のJavaの実装」「gcj、gij、jikesの使い方」をご参照願います。JRubyのインストール自体は非常に簡単に終わりました。1.8.5互換であることが分かりました。1.8.5が必要なのですが、大丈夫そうです。ここまでは特に問題ありませんでした。Railsのインストールですが、普通にインストールできるようです。そこで、Railsのサイトにある説明に従って、インストールを進めました。インストールに当たっては、RubyのパッケージマネージャであるRubyGemsが必要だということなので、RubyGemsのサイトからrubygems-0.9.0.tgzをダウンロードして展開しました。実は、ここで失敗して、最初はrubygems-0.9.1.tgzをダウンロードしてしまいました。筆者の環境では、それを使うと、Railsのインストールができませんでした。RubyGemsのインストールはrubygems-0.9.0.tgzを展開してから、jrubyコマンドでsetup.rbを実行するだけでした。setup.rbRailsインストールRubyGemsのようなパッケージマネージャを使うと、いろいろなライブラリのインストールがとても簡単にできます。Process)を通じて仕様がコントロールされているJavaでは、あまり必要性がないかもしれませんが、やはり実装の選択肢も増えてきているので、Javaにもパッケージマネージャのようなものが欲しくなってきます。Mavenがパッケージを管理する似たような機能を提供していますから、もしかしてこれが標準になっていくのかもしれません。Process)」」をご参照願います。Mavenについての詳細を知りたい読者は、「Java開発支援ツールの定番」の「Maven」をご参照願います。RubyGemsのインストールができたので、いよいよRailsのインストールになりましたが、ここで注意が必要です。最初は、これに気が付かなくて結構時間を取られてしまいました。gemの実行をするに当たってはjrubyを明示的に指定して使う必要があるのです。ここでは、時間を短縮するために「--no-ri」(RIドキュメントを生成しない)、「--no-rdoc」(RDocドキュメントを生成しない)としています。成功すると、railsだけでなく、rake、activesupportといった依存関係にあるモジュールもインストールされます。ついでに、後で使うので、activerecord-jdbcもインストールしておきます。ActiveRecord-JDBC-0.2.2gemの実行ちなみに、途中に警告が出ていましたが、取りあえずインストールはできたようです。何度か試したところ、うまくいかないときもあるようです。そんなときは、rakeだけ先にインストールする(上記コマンドのrailsをrakeに変更するだけ)など、1つずつインストールすると大丈夫な場合もありますから、試してみるとよいでしょう。実行をするときにもjrubyを使います。found」などのエラーが出てしまいました。何がいけないのかと、「$JRUBY_HOME/bin/rails」コマンドの中身を見たところ、普通のRubyプログラムでしたから、明示的にjrubyコマンドを指定して実行すればいい、と気が付きました。ここでは、~/workspaceというディレクトリをあらかじめ作成しておいて、そこへsampleappアプリケーションを作成することにしました。railsコマンドが成功して、Railsアプリケーションが作成されてから、WEBrickサーバを実行して、http://localhost:3000/へアクセスしました。初期画面を表示できたので、後は普通にRailsを使うのと同じように開発できるのが分かりました。port=3000Railsの実行JRubyでJDBC接続せっかくRailsを使うようになっても、データベースが使えないとあまり意味がありません。調べてみると、Railsで使っているActiveRecordモジュールでは、JDBCと連携させる方法がありました。ActiveRecord-JDBCというモジュールを使えばいいようなので、こちらもインストールして使ってみることにしました。6に付属するDerbyを使います。パーシステンス」では、組み込みモードで使いましたが、ここではサーバモードで起動して、サーバクライアント方式でDBを利用することにしました。認証も付けておきたいので、設定ファイルを次のように作成してDB用にアカウントとパスワードを設定し、作成するテーブル用のSQL文も用意しておきました。$DERBY_HOME/frameworks/NetworkServer/bin/startNetworkServer.kshDerbyをサーバモードで起動サーバを起動したら、別コンソールを開いて次のようにデータベースを作成して、さらにSQL文ファイルを読み込み実行してテーブルを作成しました。sampledbデータベースが作成されると「~/workspace/hello/db」にsampledbディレクトリが作成されているはずです。MySQLなどをわざわざ用意しなくてもDerbyだけで準備が済むので、手間が全然掛かりません。注意なお、Derbyを停止するには、次のようにコンソールからコマンドを入力します。$DERBY_HOME/frameworks/NetworkServer/bin/stopNetworkServer.ksh最後に、Railsのデータベース設定を行いました。通常は、ymlファイルだけを編集すればよいのですが、ActiveRecord-JDBCを使うために、環境ファイルも編集が必要です。環境ファイルについては、File.joinの記述がある行の下へjdbc_adapterに関する記述を追加しました。'active_record/connection_adapters/jdbc_adapter'Rails環境ファイル(~/workspace/hello/config/environment.rb)データベースとRailsの準備が整ったので、いざ、データベースドライバを含むJARファイルをCLASSPATHへ含めながら、scaffold(「足場」と訳されます)の生成を実行してみました。無事に生成ができたので、http://localhost:3000/usersへアクセスしてみると、しっかりとscaffoldで作成された画面が表示されました。ここで、sampledbにあるusersテーブルのレコードを新規追加したり、編集したり、削除したりといった簡単な作業ができることを確認しました。Railsもいろいろと使えそうです。JRuby」ここまでで、JRubyでRailsを動かせることが分かりましたが、やはり、JRubyからJavaのクラスを呼び出す方法も確認しておきたいところです。JRubyにはサンプルが同梱されていたので、動作させてみました。filename」のように「クラス名.new」と記述して呼び出せますし、メソッドの呼び出しは、「br.readLine」のようにすれば良いようです。Javaのクラスが簡単に利用できるので、JavaプログラマだとRubyのクラスを使わずに、ついついJavaのクラスばかり使ってしまうかもしれません。0.9.2に同梱されているサンプルより引用)次に、JavaからJRubyのクラスを呼び出す方法を調べてみました。java.netのscriptingプロジェクトを見てみると、jruby-engine.jarを手に入れればいいようです。scriptingプロジェクトのメニューにドキュメントという項目があるので、ここからたどって、jsr223-engines.tar.gzをダウンロードしました。~/jsr223というディレクトリを作って、そこでこのファイルを展開すると、jruby/buildディレクトリの中にjruby-engine.jarがありました。後は、jruby.jarとjruby-engine.jarへクラスパスを通してプログラムをコンパイル実行すればいいだけです。次のようにして、RubyのスクリプトをJavaから呼び出せました。end」というRubyプログラムをString型の変数「program」へ入れて、ruby.eval()メソッドで実行できるようにしておきます。JRuby」という文字列を設定しています。最後に、すでに使用可能になっているhelloというプログラムへ、「s」という引数を渡して実行することを、ruby.eval()メソッドにより行っているのです。変数の利用については、javax.script.ScriptContextを使って、変数スコープをコントロールしながら使う方法もあります。ruby.getContext());}}RubyTest2.java参考までに、次の手順でコンソールからのスクリプト実行もできることが分かりました。6に付属するツールのjrunscriptコマンドを使っていました。JRubyスクリプト実行さて、Javaプログラマ流のRubyプログラミングということで、JRubyの使い方を紹介しました。Consoleが開発されていたりと、何かと目が離せません。Fowler氏もJRubyを使ってVelocityを簡単に使う方法を考えたりしているようです。実は、Velocityはjava.netのscriptingプロジェクトで対象となっているので、直接使った方がいいのかもしれませんが、このあたりもまだまだ研究の余地が大いにあるということなのでしょう。いずれにせよ、しばらくはJavaとJRubyでいろいろと楽しめそうです。編集部注:Velocityについての詳細を知りたい読者は、「Webアプリケーションフレームワークの定番」の「Velocity」をご参照願います。ひろし)Webシステムの運用と開発、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクトへ参加し、コミッタの一員として活動を支えている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。