JUDEファイルの作成
注文管理システムのEntityをJUDEのクラス図で描きます。JUDEファイル名は何でも構いませんがここではpom.judeとします。JUDEを触ったことがない方や、早く動作を確認したい方は、本記事にpom.judeが添付されていますので、ここからダウンロードしてそのまま使ってください。
クラス図の作成手順を説明します。
Memberクラスを作成し、以下の属性を追加します。- (名前)属性名
name、型String - (電話番号)属性名
phone、型String - (住所)属性名
adress、型String
- (名前)属性名
Orderクラスを作成し、以下の属性を追加します。- (注文時間)属性名
ordered_at、型Date
- (注文時間)属性名
OrderDetailクラスを作成し、以下の属性を追加します。- (注文個数)属性名
ordered_number、型int
- (注文個数)属性名
Itemクラスを作成し、以下の属性を追加します。- (商品名)属性名
name、型String - (単価)属性名
price、型int
- (商品名)属性名
- MemberーOrder間に、Memberを親とした集約の関係を結び、Order側の多重度を0..*にします。
- OrderーOrderDetail間に、Orderを親とした集約の関係を結び、OrderDetail側の多重度を1..*にします。
- ItemーOrderDetail間に、Itemを親とした集約の関係を結び、OrderDetail側の多重度を0..*にします。
作成したJUDEファイルを「RAILS_ROOT/app/models/pom.jude」に配置します。

LuRuJuサーバの起動
本記事ではCRubyで動作確認を行うので、CRuby-JRuby間でモデルデータを通信するために、dRubyベースのLuRuJuサーバを起動します。
別窓でコマンドプロンプトを起動します。
JRubyでLuRuJuサーバを起動・停止するRakeタスクを実行するために、以下の内容で「RAILS_ROOT/Raikefile4luruju」ファイルを作成します。
require 'rubygems' require 'rake' require 'tasks/luruju'
以下のコマンドで、LuRuJuサーバを起動します。
C:\workspace\pom>jruby -S rake -f Rakefile4luruju luruju:server:start (in C:/workspace/pom) start LuRuJu Server URL=druby://127.0.0.1:3937
rakeコマンドでluruju:server:stopタスクを実行すればLuRuJuサーバは停止しますが、動作確認が完了するまでこのままサーバをあげておいてください。
テーブルの作成
「RAILS_ROOT/config/database.yml」を開き、developmentのパスワードを各自のパスワードに合わせて記述します(以後、パスワードのXXXXXは各自のパスワードに置き換えてください)。
development: adapter: mysql database: pom_development username: root password: XXXXX host: localhost
pom_developmentという名前でMySQLのデータベースを作成します。
C:\workspace\pom>mysql -uroot -prootpass : mysql> create database pom_development; Query OK, 1 row affected (0.05 sec) mysql> exit Bye
LuRuJuおよびLuRuJu on Railsが提供するRakeタスクを実行するために、「RAILS_ROOT/Rakefile」に以下の内容を追記します。
: : require(File.join(File.dirname(__FILE__), 'config', 'environment')) require 'tasks/luruju' require 'tasks/luruju_on_rails'
rakeコマンドでlor:db:createタスクを実行してテーブルを作成します。
C:\workspace\pom>rake lor:db:create (in C:/workspace/pom)
本当にテーブルは作成されたのでしょうか? 確認してみましょう。
C:\workspace\pom>mysql -uroot -pXXXXX pom_development : : mysql> show tables; +---------------------------+ | Tables_in_pom_development | +---------------------------+ | items | | members | | order_details | | orders | +---------------------------+ mysql> exit
できましたね。LuRuJu on Railsでは、Migration用のクラスに各列の情報を記述したテーブル定義を書かなくとも、rakeコマンド一発で全テーブルを作成することができます。近い将来、Webアプリ起動時や必要となったときに動的にテーブル作成、更新する機能も追加する予定です。
script/consoleでの動作確認
実はこれだけで、JUDEで描いたクラスがAcriveRecordベースのモデルとしてWebアプリ上で動作します。画面を作成して確認するまえにscript/consoleで確認してみましょう。
C:\workspace\pom>ruby script/console Loading development environment. >> nomura = Member.new #Memberインスタンス生成 => #<Member:……文末まで省略 >> nomura.name = 'Nomura' #名前の設定 => "Nomura" >> nomura.phone = '123-456-7890' #電話番号の設定 => "123-456-7890" >> nomura.address = 'Japan' #住所の設定 => "Japan" >> nomura.save #DBに登録 => true
ちゃんと動きましたね。JUDEで記述した関連も反映されています。
>> order = Order.new # 注文インスタンス作成
=> #<Order:……文末まで省略
>> order.ordered_at = Time.now # 注文時間を設定
=> Sat Apr ……文末まで省略
>> order.save # 注文を登録
=> true
>> nomura.orders << order # 野村の注文に追加
=> [#<Order:……文末まで省略
>> nomura.save # DBに反映
=> true
>> Member.find_by_name('Nomura').orders.first# DBより検索
=> #<Order:0x49558f4 @attributes={"member_id"=>"1", "ordered_at"=>"2008-04-05 15:04:31", "id"=>"1"}>
