JRubyクィックスタート

文:Chris Duckett(Builder AU) 翻訳校正:原井彰弘
2007-12-13 10:05:00
  • このエントリーをはてなブックマークに追加

 (神がわざと組み合わせたとすら思える)ピーナッツバターとチョコレートのように「よいものとよいものを組みあわせれば2倍よいものができあがる」という考え方のもと、JRubyはRubyとJavaを結びつけた。西側の資本主義と東側の社会主義がかつて出会ったように、型に関して制限の少ない言語が型に関して厳密な言語に出会うさまを、これからご覧に入れよう。

 JRubyは100%Javaによって実装されたRubyのインタプリタである。Rubyの全ての機能を有しているわけではないが、Rubyのほとんどの組み込みクラスが用意されている。

 言うまでもないことではあるが、JRubyを最大限に活用したいならばJavaとRubyについて学ぶ必要がある。Javaのプログラマの方は、まずRubyの入門者向け記事及びもうひとつの記事を参考にして欲しい。その記事に書かれている内容を理解しているという前提で、この記事ではJRubyの世界を覗いてみる。

 JRubyを入手する

 まず、最初にすべきことは http://dist.codehaus.org/jruby/ で最新のjruby-binアーカイブをダウンロードすることである。必要なものはこのアーカイブの中に全て含まれている。ダウンロードが完了したら自分の好きな場所にアーカイブを展開し、binディレクトリへのパスをpath環境変数に追加しよう。

 全てが完了したら、次のコマンドが正しく実行できるはずである。

jruby -v
ruby 1.8.5 (2007-08-23 rev 4201) [ppc-jruby1.0.1]

コードを書く

 まず、次のコマンドを入力してインタラクティブコンソールを呼び出してみよう。

jirb
irb(main):001:0> 

  JRubyがRubyのインタプリタであるということは、今まで我々が見てきたRubyのコードは何でも動作させることが可能だということだ。

irb(main):001:0> puts "Hello World"
Hello World
=> nil
irb(main):002:0> [1, 2, 3, 4, 5].each { |n| puts n*n }
1
4
9
16
25
=> [1, 2, 3, 4, 5]

  ここでは何も驚くことはない。我々があえてネイティブのRubyインタプリタではなくJRubyを使っているのは、Javaの機能を利用するためである。それでは、Javaというフレームワークをここで取り込んでみよう。

irb(main):003:0> require 'java'
=> true

 ただし、ここで一般的なJavaのコードを利用しようとすると以下のように失敗してしまう。

irb(main):004:0> System.out.println("Hello world")
NameError: uninitialized constant System
        from (irb):4:in `binding'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:150:in `eval_input'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:70:in `signal_status'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:147:in `eval_input'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:70:in `each_top_level_statement'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:146:in `loop'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:146:in `catch'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:146:in `eval_input'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:70:in `start'
        from :1:in `catch'
        from /Users/chris.duckett/tmp/jruby/jruby-1.0.1/lib/ruby/1.8/irb.rb:69:in `start'
        from :1

 JRubyで普通のHello Worldを動作させるには、Javaの基礎に立ち戻って当たり前だと思っていたことを見直す必要がある。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]