この記事では、迅速な Web 開発を実現するために、いくつかの最先端技術を使います。これらの技術へのリンクはすべて「参考文献」セクションに挙げてあります。ここでは JRuby V1.1.3 と Apache Derby を使っています。これらは Java ベースの技術であり、JDK (Java Development Kit) V1.4 以上を必要とします。Apache Derby は JDK V1.6 とバンドルされているため、V1.6 JDK を使うように強くお勧めします。V1.4 または 1.5 VM を使用する場合には Derby を別にダウンロードします。この記事では JDK V1.5.0_13 と組み合わせて V10.4.1.3 を使用しました。またこの記事では Rails V2.1 も使っています。この記事を最大限に活用するためには Ruby と Ruby on Rails の知識があることが前提となります。
最近の多くの Web アプリケーション・フレームワークでは開発者の生産性が強調されています。開発者の時間は貴重なため、これは良いことなのですが、見逃されがちな項目の 1 つにセットアップの時間があります。セットアップの時間には、クリーンなマシンを開発者がコードの作成や実行を行えるマシンにするまでにどれほど複雑な作業が伴うか、という要素も含まれます。これは家で遊び半分に新しい技術をいじり回している開発者にとって重要なだけではなく、頻繁に新しい開発者を雇用し、そうした投資に対する回収を早めようとする組織にとっても重要です。この面で Rails は他のフレームワークよりも優れています。そして JRuby と Derby を組み合わせることによって、それが一層優れたものになります。
ここでは V1.6 JDK がインストールされているものとします。JRuby は JDK がどこにインストールされているかを知る必要があるため、一般的な規約に従って、JDK がインストールされている場所を指す JAVA_HOME という環境変数を探します。またパスに $JAVA_HOME/bin が含まれていることを確認する必要があります。そうすると、後は JRuby をダウンロードして適当な場所に解凍するだけです。この場所 (JRUBY_HOME と呼ぶことにします) に対する環境変数を作成し、そしてパスに $JRUBY_HOME/bin を置くようにお勧めします。JRuby に関して必要なことはこれだけです。では Rails に関してはどうでしょう。
JRuby はネイティブ・コードの代わりに 100 パーセント Java を使って Ruby を実装したものです。Ruby にあるものはすべて JRuby に含まれており、その中には gem も含まれています。Rails をインストールするためには、単純に gem を使います (リスト 1)。
リスト 1.
gem を使って Rails をインストールする$jruby -S gem install rails JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Successfully installed activesupport-2.1.0 Successfully installed activerecord-2.1.0 Successfully installed actionpack-2.1.0 Successfully installed actionmailer-2.1.0 Successfully installed activeresource-2.1.0 Successfully installed rails-2.1.0 6 gems installed Installing ri documentation for activesupport-2.1.0... Installing ri documentation for activerecord-2.1.0... Installing ri documentation for actionpack-2.1.0... Installing ri documentation for actionmailer-2.1.0... Installing ri documentation for activeresource-2.1.0... Installing RDoc documentation for activesupport-2.1.0... Installing RDoc documentation for activerecord-2.1.0... Installing RDoc documentation for actionpack-2.1.0... Installing RDoc documentation for actionmailer-2.1.0... Installing RDoc documentation for activeresource-2.1.0... |
JRuby を使う場合とネイティブの Ruby を使う場合で唯一実際に違うところは、gem コマンドの前に JRuby -S が付くことだけであることに注目してください。JRuby -S は $JRUBY_HOME/bin ディレクトリーの中にあるスクリプトを探すように JRuby に命令しているにすぎません。こうすることによって、JRuby の gem スクリプトを確実に取得することができます。
JRuby が既存の gem リポジトリーを使う (つまり gem リポジトリーを (ネイティブの) Ruby システムと共有する) ようにすることもできます。そのために必要なことは環境変数を設定することだけです。しかしこの方法はお勧めできません。大部分の gem は Ruby で作成されており、JRuby と互換性がありますが、一部の gem は C++ で作成されており、それらは JRuby とは互換性がないからです。同様に、JRuby の gem の一部は Java 言語で作成されており、ネイティブの Ruby と互換性がありません。
上記のコマンドを実行すると、しばらく時間がかかりますが、この時間は主にネットワーク接続のスピードに依存します。Rails には WEBrick という Web サーバーが付属しています。このサーバーは、とても実動に使える品質の Web サーバーではありませんが、迅速なプロトタイピングや開発には最適です。これで、あとはデータベース、つまり Apache Derby が必要なだけです。
Rails では、データベース・アクセスの処理と、データベース・テーブルと Ruby のオブジェクト・モデルとの間でのオブジェクト・リレーショナル・マッピングの処理に関して、ActiveRecord ライブラリーを使います。この点は、Ruby ではなく JRuby を使うことで少し違いが生ずる部分の 1 つです。Java 言語の場合にはデータベースとの通信用に JDBC (Java Database Connectivity) API があるので、この JDBC API を Rails で活用したいと思います。そこで、ActiveRecord で JDBC を使えるようにするために追加の gem が必要です。この gem にはデータベース特有の情報も含まれるため、Derby 専用の gem をインストールする必要があります。
リスト 2. Derby 用に
ActiveRecord-JDBC 用の gem をインストールする$jruby -S gem install activerecord-jdbcderby-adapter JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Successfully installed activerecord-jdbc-adapter-0.8.2 Successfully installed jdbc-derby-10.3.2.1 Successfully installed activerecord-jdbcderby-adapter-0.8.2 3 gems installed Installing ri documentation for activerecord-jdbc-adapter-0.8.2... Installing ri documentation for jdbc-derby-10.3.2.1... Installing ri documentation for activerecord-jdbcderby-adapter-0.8.2... Installing RDoc documentation for activerecord-jdbc-adapter-0.8.2... Installing RDoc documentation for jdbc-derby-10.3.2.1... Installing RDoc documentation for activerecord-jdbcderby-adapter-0.8.2... |
皆さんが Rails のベテランであれば、上のリストがネイティブの Ruby の場合とあまり変わらないことに気付くと思います。Rails は必ずデータベース専用のアダプターを必要とします。しかし Rails には、MySQL 用と PostgreSQL 用、そして SQLite 用のアダプターがバンドルされています。もし別のタイプのデータベース (Oracle や IBM® DB2® など) を使ったことがある場合には、上と同じようなことをしているはずです。
先ほど触れたように、JDK V1.6 には Derby が既にバンドルされており、いつでもコードを作成できる (あるいはコードを生成できる) 状態になっています。JDK V1.5 または V1.4 を使っている場合には、さらにいくつかのステップが必要です。つまり Derby をダウンロードして解凍し、そして derby.jar を見つけ、それを $JRUBY_HOME/lib にコピーする必要があります。そうすると JDK V1.6 を使っている人に追いついたことになり、先に進むことができます。
「Convention over Configuration (設定より規約)」という表現は実際には Ruby on Rails から生まれたものであり、Convention over Configuration によってアプリケーションの作成が非常に容易になります。これは JRuby を使った場合もまったく同じです。Rails の生成プログラムを使うことで、アプリケーション・スタブを迅速に作成することができます。
リスト 3. アプリケーションを生成する
>rails deadly -d sqlite3
exists
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
create db
create doc
create lib
create lib/tasks
create log
create public/images
create public/javascripts
create public/stylesheets
create script/performance
create script/process
create test/fixtures
create test/functional
create test/integration
create test/unit
create vendor
create vendor/plugins
create tmp/sessions
create tmp/sockets
create tmp/cache
create tmp/pids
create Rakefile
create README
create app/controllers/application.rb
create app/helpers/application_helper.rb
...
|
出力の大部分は、どれも典型的な Rails の出力なので削除してあります。1 つ気付く点として、-d sqlite3 というオプションが指定されており、これによって生成プログラムのスクリプトに対して、データベースとして SQLite を使うように指示されます。SQLite は Derby と同じような組み込みのデータベースであり、Rails V2.0 以上に含まれているため、ここでは「安全な」オプションとなっています。次のセクションでは Derby の構成をセットアップします。他の Rails アプリケーションの場合とまったく同じように、このアプリケーションを起動します。
リスト 4. アプリケーションを起動する
=> Booting WEBrick... JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2008-07-25 17:18:31] INFO WEBrick 1.3.1 [2008-07-25 17:18:31] INFO ruby 1.8.6 (2008-05-30) [java] [2008-07-25 17:18:31] INFO WEBrick::HTTPServer#start: pid=363524275 port=3000 |
そして他の Rails アプリケーションの場合とまったく同じように、http://localhost:3000 にアクセスしてブラウザーにアプリケーションを表示します (図 1)。
図 1. Rails アプリケーションを実行する
これらはすべて、Rails では標準的なものです。このウェルカム画面にも表示されているように、データベースをセットアップし、アプリケーションに何かを追加できるようにする必要があります。もちろん、ここで Derby を使うことを指定します。リスト 5 は Rails 用の Derby の構成内容を示しています。
リスト 5. database.yml
development: adapter: jdbc driver: org.apache.derby.jdbc.ClientDriver url: jdbc:derby://localhost/deadly_development;create=true username: app password: app test: adapter: jdbc driver: org.apache.derby.jdbc.ClientDriver url: jdbc:derby://localhost/deadly_test;create=true username: app password: app production: adapter: jdbc driver: org.apache.derby.jdbc.ClientDriver url: jdbc:derby://localhost/deadly_production;create=true username: app password: app |
この構成に関して、いくつかのことに注目する必要があります。まず、このアダプターは単なる JDBC です。通常、ここでは (MySQL や Derby など) データベース専用のアダプターを指定します。しかしこの場合には JDBC ベースのアダプターを使います。そして URL では、Derby を使うことを指定しており、さらに create=true パラメーターに注目すると、このパラメーターによって、まだデータベースが存在していなければ作成するように Derby に命令します。最後に、username と password に注目してください。これらは単に Derby でのデフォルトになっています。これでデータベース接続を構成できたので、今度は少しばかりコードを作成する必要があります。いや実を言うと、Rails にコードを作成させる必要があるのです。
今までに Rails を使ったことがある人であれば、Rails の scaffolding を使ったことがあるか、あるいは少なくとも scaffolding が実際に使われているところを見たことがあるはずです。人々が Rails に関して「あっと驚く」主な要素がおそらく scaffolding であり、Rails が他の無数のフレームワークに採用され、コピーされている理由もそこにあります。Rails のほとんどのエキスパートは即座に、scaffolding は実稼働用の機能として使われることを意図したものではないと言うと思いますが、プロトタイピングに scaffolding が役立つことには間違いありません。scaffolding は長年にわたって進化してきており、特に Rails V2.0 では進化しています。では、リスト 6 で使用している生成コマンドを見てみましょう。
リスト 6. scaffolding を生成する
>script/generate scaffold boat name:string captain:string crew:integer capacity:integer
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/boats
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/boats/index.html.erb
create app/views/boats/show.html.erb
create app/views/boats/new.html.erb
create app/views/boats/edit.html.erb
create app/views/layouts/boats.html.erb
create public/stylesheets/scaffold.css
create app/controllers/boats_controller.rb
create test/functional/boats_controller_test.rb
create app/helpers/boats_helper.rb
route map.resources :boats
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/boat.rb
create test/unit/boat_test.rb
create test/fixtures/boats.yml
create db/migrate
create db/migrate/20080727053100_create_boats.rb
|
このコマンドによって ActiveRecord モデル (適切なルーティングがマッピングされたコントローラー) と、いくつかのビュー・テンプレートが生成されます。また、コマンドに指定されているパラメーター (モデルの属性に対応する名前と値のペア、そしてこれらの属性の型) に基づいて、データベースをマイグレーションするための最初のスクリプトも作成されます。データベースを作成するには、Rake を使ってデータベースのマイグレーションを実行するだけです (リスト 7)。
リスト 7. Rake を使ってデータベース・テーブルを作成する
>rake db:migrate (in /Users/michael/code/aptana/workspace/deadly) == 20080727053100 CreateBoats: migrating ====================================== -- create_table(:boats) -> 0.0395s -> 0 rows == 20080727053100 CreateBoats: migrated (0.0407s) ============================= |
データベースと boats テーブルは、ご覧のとおり一度に作成されます。データベース・サーバーを起動する必要がなかったことに注目してください。JDBC ドライバーは Derby に接続しようとする場合、Derby を起動してデータベースを作成してから、スクリプトによってテーブルを作成します。これは単にメモリー内に作成される一時的なデータベースではなく、ディスク上に永続化されます。アプリケーションを再度起動すると、テーブルが作成されています。http://localhost:3000/boats にアクセスすると、図 2 のようなものが表示されるはずです。
図 2. boats (船) 用の scaffolding
この画面からあちこちをクリックして何隻かの船の情報を作成すると、そのすべての情報は Derby データベースに保存されます。サーバーを停止して再起動したり、マシンをリブートしたり、その他何でも試してみてください。再度サーバーを起動すると、作成されたデータはすべて残っています。scaffolding は得体の知れないもののように思われがちですが、そんなことはなく、ほとんどは単に生成されたコードにすぎず、修正が可能なのです。次に、scaffolding のコードを変更する簡単な例を見てみましょう。
プロトタイピングは多くのアジャイル開発手法に非常に適しています。プロトタイピングを利用することで何かを素早く作成して実行させることができ、そしてプロダクト・マネージャーやユーザーなどから即座にフィードバックを得ることができます。例えば scaffolding ベースのプロトタイプをプロダクト・マネージャーに渡すと、プロダクト・マネージャーはそのアプリケーションをさまざまに調べることができます。彼らがプロトタイプをしばらく使った後に何隻かの船を追加すると、http://localhost:3000/boats は図 3 のような表示になります。
図 3. テスト・データを持つ、boats 用の scaffolding
リスト 8 は BoatsController クラスの index メソッドを示しています。
リスト 8.
index メソッド
class BoatsController < ApplicationController
# GET /boats
# GET /boats.xml
def index
@boats = Boat.find(:all, :order => "capacity DESC")
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @boats }
end
end
end
|
実際にはさらに 5 つのメソッド (show、new、edit、create、update、そして destroy) がありますが、それらのメソッドを変更する必要はありませんでした。実際のところ、ここで変更したのは index メソッドの最初の行 (find クエリー) のみです。元々は単に Boat.find(:all) でしたが、ここでは order 節を追加しています。この変更を行ってブラウザーの表示を更新すると、この変更が表示されます (図 4)。
図 4. 定員 (capacity) の順に並べた船のリスト
もちろん、他にも多くのカスタマイズが可能です。例えばユーザーがソートの基準の選択やルック・アンド・フィールの変更を行えるようにすることなどもできます。重要なポイントは、scaffolding コードがプロトタイピングそのものに有用なばかりではなく、フィードバックを行えるように scaffolding コードを変更することも容易だということです。とはいえ、scaffolding に適するものは限られます。場合によると、scaffolding を元に作られたものではない、さまざまなモデルやコントローラーをプロトタイピングする必要があります。幸い Rails には、そうした場合にも役立つ、他の生成プログラムも用意されています。
例えば、ある船 (boat) の漁獲高 (catch) を表す catch モデルを作成したいとしましょう。boat と catch の間には 1 対多の関係があります。この新しいモデルに対して、別の生成プログラムを使って作業を始めることにします (リスト 9)。
リスト 9.
catch モデルを生成する
>script/generate model catch quantity:integer
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/catch.rb
create test/unit/catch_test.rb
create test/fixtures/catches.yml
exists db/migrate
create db/migrate/20080727060346_create_catches.rb
|
生成コマンドの中で、quantity 属性 (列) のみを指定していることに注目してください。関係を追加するためには、少しばかり手動による編集を行う必要があります。まず、さきほど生成したマイグレーション・スクリプトを変更します。
リスト 10.
CreateCatches マイグレーション・スクリプト
class CreateCatches < ActiveRecord::Migration
def self.up
create_table :catches do |t|
t.integer :quantity
t.integer :boat_id
t.timestamps
end
end
def self.down
drop_table :catches
end
end
|
ここで追加した boat_id を除いて、ここにあるものはすべて生成されたものです。今度は Rakes を使ってこのマイグレーションを実行します (リスト 11)。
リスト 11. Rake を使って catches テーブルを作成する
>rake db:migrate (in /Users/michael/code/aptana/workspace/deadly) == 20080727060346 CreateCatches: migrating ==================================== -- create_table(:catches) -> 0.0291s -> 0 rows == 20080727060346 CreateCatches: migrated (0.0299s) =========================== |
ここで、モデルを変更する必要があります。Boat モデルを開き、このモデルに 1 行のコードを追加します (リスト 12)。
リスト 12.
Boat モデルclass Boat < ActiveRecord::Base has_many :catches end |
このクラスはデフォルトで空ですが、これは Rails がデータベースにあるテーブルのメタデータに基づいてこのクラスの属性を推論するからです。そこで単純にメタプログラミング・コマンドを追加し、1 隻の boat に多くの catch があることを示します。同様に、catch モデルを変更して boat と catch の関係を完成させます (リスト 13)。
リスト 13.
Catch モデルclass Catch < ActiveRecord::Base belongs_to :boat end |
この場合も、単純にメタプログラミング・コマンドを追加し、catch が boat に属することを示します。boat_id を使って catch が boat に属することを示す際には、Rails の命名規約に従っています。今度は新しいコントローラーを作成します。
リスト 14.
DeliveryController
class DeliveryController < ApplicationController
def index
@boats = Boat.find :all
@catch = Catch.new
respond_to do |format|
format.html
end
end
def record
@catch = Catch.new(params[:catch])
respond_to do |format|
if @catch.save
flash[:notice] = 'Delivery recorded successfully'
format.html { redirect_to :action => "list"}
end
end
end
def list
catches = Catch.find(:all)
@totals = {}
catches.each{|catch|
if @totals[catch.boat]
@totals[catch.boat] += catch.quantity
else
@totals[catch.boat] = catch.quantity
end
}
@totals = @totals.sort {|a,b| b[1] <=> a[1]}
respond_to do |format|
format.html
end
end
end
|
このコントローラーは 3 つのアクションを定義しています。その 1 つは index アクションであり、ユーザーが /delivery (Rails のルーティング規約によって /delivery は DeliveryController クラスにマッピングされます) を要求した場合のデフォルトです。この場合には、ビューの中で使えるように最初にすべての boat を取得する、という少し余分な作業を行います。
リスト 15. デフォルトの delivery ビュー
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<title>Record a Delivery</title>
</head>
<body>
<h1>Record a Delivery</h1>
<% form_for @catch, :url => { :action => "record" } do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :quantity %>
<%= f.text_field :quantity %>
</p>
<p>
<%= f.label :boat %>
<%= select("catch", "boat_id", @boats.collect{|b| [b.name, b.id] },
{ :include_blank => true })%>
</p>
<p>
<%= f.submit "Record" %>
</p>
<% end %>
</body>
</html>
|
このコードは scaffolding を使うことで生成されるコードに似ていますが、それは迅速なプロトタイピングを行える Rails の機能を活用しているからです。例えば、ActionView クラスの form_for API を利用することで FormHelper オブジェクトを使います。ここでは、生成されるコードには見られないものをいくつか使っています。第 1 に、record メソッド (リスト 14) を呼び出すフォームのアクション URL を設定しています。このメソッドについてはこの後すぐに説明します。次に、select ヘルパーを使って、オプション値を持つ HTML のカスタム select タグを作成しています。また DeliveryController クラス (リスト 14) の index メソッドの中で取得した boats を使っています。そして少しばかり Ruby のイディオムを使って配列のコレクションを作成しています。各配列には boat の名前と ID があり、これらの名前や ID は、生成される HTML の中のオプションのラベルと値になります。Ruby の表現力の豊かさを示すこのコードは、コントローラーの中に入れることもできましたが、この表現力の豊かさこそが、Ruby を迅速なプロトタイピングと開発に非常に適したものにしている要素の 1 つなのです。
リスト 15 のフォームは、リスト 14 の DeliveryController クラスの record アクションに送信されます。この record メソッドでは、単に新しい Catch インスタンスが作成され、保存されます。そしてこのインスタンスを同じくリスト 14 の list アクションに転送します。この list アクションはデータベースに対してクエリーを実行し、すべての Catch レコードを取得します。そしてこれらのレコードを集約し、データベースの中の各 boat に対する catch の合計を計算します。この計算をカスタムのクエリーを使って行うこともできます。こうして集約された結果はソートされ、2 つの要素からなる配列 (第 1 の要素は Boat オブジェクト、第 2 の要素はその boat の catch の合計) に格納されます。そしてリスト 16 に示すビューに渡されます。
リスト 16. list ビュー
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>List Totals</title>
</head>
<body>
<h1>Totals</h1>
<table>
<tr>
<th>Boat</th>
<th>Total</th>
</tr>
<% for total in @totals %>
<tr>
<td><%=h total[0].name %></td>
<td><%=h total[1] %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'Add catch', :action => "index" %>
</body>
</html>
|
これらはすべて、すべての船とそれぞれの合計漁獲高の表を作成するための、きわめて標準的な Rails のテンプレート動作です。最後にもう 1 つのヘルパーを使って、ユーザーの index アクションに対するリンク・バックを作成しています。これで、ミニ・アプリケーションのプロトタイプが完成しました。アプリケーションに関してはこれで終わりですが、もう 1 つ追加で説明しておくことがあります。それは JRuby と Derby を IDE と組み合わせて使う場合の簡単な注意事項です。
多くの開発者にとって、迅速なプロトタイピングと開発と言えば IDE を使うことを意味します。Ruby 用に IDE を作成するのは容易ではなく、それは JRuby の場合も同じです。しかし Eclipse ベースの RadRails など、いくつかの優れた IDE があります。この素晴らしいツールについては他の記事で解説されていますが (「参考文献」を参照)、JRuby と Derby と組み合わせて使う場合には少し注意が必要です。RadRails を始めとするほとんどの IDE では、その IDE のデバッガーを Ruby の VM にフックできるように、Ruby のデバッグ用の gem が必要です。これらの gem は、C++ で作成されているネイティブの gem であるため、JRuby で使うことは (まだ) できません。代わりに Java バージョンの gem を作成する必要がありますが、幸いなことに、この非常に重要な gem を作成するための作業は既に終わっています。Java ベースの 1 つの gem を直接ダウンロードし、2、3 種類ある他の標準的な Ruby ベースの gem の中にインストールする必要があります。このプロセスは以下のとおりです。
リスト 17. JRuby にデバッグのサポートを追加する
$jruby -S gem instal -l ruby-debug-base-0.10.1-java.gem Successfully installed ruby-debug-base-0.10.1-java 1 gem installed Installing ri documentation for ruby-debug-base-0.10.1-java... Couldn't find file to include: 'VERSION' Installing RDoc documentation for ruby-debug-base-0.10.1-java... Couldn't find file to include: 'VERSION' $ jruby -S gem install --ignore-dependencies -v 0.10.1 ruby-debug Successfully installed ruby-debug-base-0.10.1-java 1 gem installed Installing ri documentation for ruby-debug-base-0.10.1-java... Couldn't find file to include: 'VERSION' Installing RDoc documentation for ruby-debug-base-0.10.1-java... Couldn't find file to include: 'VERSION' $ jruby -S gem install --ignore-dependencies ruby-debug-ide Successfully installed ruby-debug-ide-0.2.0 1 gem installed |
Ruby の標準的なデバッグ用 gem を利用した任意の IDE から、容易にブレークポイントの追加やアプリケーションのデバッグを行うことができます。また、そのデバッガーを使って Rails コードの一部をステップ実行することで、その魔法の一部をより適確に理解することができます。
この記事では、JRuby と Rails、そして Apache Derby を組み合わせることによって、迅速なプロトタイピングと開発のための完璧な環境を作り出せることを説明しました。Rails を利用することで、生成プログラムを使ってボイラープレート・コードを作成することができ、あるいはカスタマイズしたアプリケーションを、ほとんど手間をかけずに作成することもできます。また JRuby と Derby を利用することによってトランザクション型の永続データベースをアプリケーションに組み込むことができ、そうすればアプリケーションが実行されるとそのデータベースも必ず実行されます。これを出発点として Rails の他の機能を利用し、さらにモデルやコントローラー、ビューを追加することもできますし、Rails の Ajax ヘルパーを使うことで、アプリケーションへの Ajax の追加も容易にすることができます。また Eclipse ベースの RadRails などの IDE を使うことで、プロトタイピングと開発をさらに迅速にすることもできます。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| Example source code | os-ad-prototype-jruby-deadly.zip | 110KB | HTTP |
学ぶために
- 「Ruby on RailsによるWebアプリケーションの高速開発」を読み、なぜ開発者にとって Ruby on Rails にそれほど魅力があるのかを学んでください。
- 「Ruby off the Rails」を読み、Ruby プログラミング言語の世界に飛び込んでください。
- Rails よりも優れたものがあるのでしょうか。それはもちろん、Rails と Ajax を組み合わせたものです。この 2 つのホットな技術について知るために「Crossing borders: Ajax on Rails」を読んでください。
- 「Web Development with Eclipse, Part 3: Ruby Development Toolkit and RadRails」を読み、Rails 開発を支援するために RadRails を使う方法のすべてを学んでください。
- JRuby と Derby を組み合わせて使うための他の方法を学ぶために「Two ways to build Apache Derby database applications in JRuby」を読んでください。
- JRuby のホームページは JRuby に関するすべてを知るために最適の場所です。
- JRuby の将来の方向性を知るための適切な場所として、JRuby の開発リーダーである Charles Nutter のブログがあります。
- RubyonRails.com は Ruby on Rails の出発点であり、入門用のチュートリアルやガイド、ダウンロード可能なソースやドキュメンテーションなどが用意されています。
製品や技術を入手するために
- JRuby プロジェクトの Web サイトから JRuby を入手してください。
- Java SDK V1.6 を入手してください。
- Apache Derby を入手してください。この記事では V10.4.1.3 を使っています。
- Ruby をダウンロードしてください。この記事では V2.1 を使っています。
- 皆さんの次期オープンソース開発プロジェクトを IBM trial software で革新してください。ダウンロード、または DVD で入手することができます。
- IBM 製品の試用版をダウンロードし、DB2 や Lotus、Rational、Tivoli、WebSphere などが提供するアプリケーション開発ツールやミドルウェア製品をお試しください。
議論するために
- developerWorks blogs から developerWorks のコミュニティーに加わってください。
