SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

JUDEで描いたクラスをそのままRuby on Railsで動かすプラグイン

LuRuJu ~JUDEとRubyの出会い~


ダウンロード pom.jude (10.3 KB)

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」に配置します。

JUDEファイルの作成と配置
JUDEファイルの作成と配置

LuRuJuサーバの起動

 本記事ではCRubyで動作確認を行うので、CRuby-JRuby間でモデルデータを通信するために、dRubyベースのLuRuJuサーバを起動します。

 別窓でコマンドプロンプトを起動します。

 JRubyでLuRuJuサーバを起動・停止するRakeタスクを実行するために、以下の内容で「RAILS_ROOT/Raikefile4luruju」ファイルを作成します。

Raikefile4lurujuの内容
require 'rubygems'
require 'rake'
require 'tasks/luruju'

 以下のコマンドで、LuRuJuサーバを起動します。

Raikefile4lurujuの内容
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は各自のパスワードに置き換えてください)。

database.yml(抜粋)
development:
  adapter: mysql
  database: pom_development
  username: root
  password: XXXXX
  host: localhost

 pom_developmentという名前でMySQLのデータベースを作成します。

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」に以下の内容を追記します。

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で確認してみましょう。

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で記述した関連も反映されています。

script/consoleでの確認(つづき)
>> 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"}>

次のページ
おわりに

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

野村 周平(ノムラ シュウヘイ)

フリープログラマプログラマとして楽しくて幸せな人生を全うすることをめざし、日夜奮闘中。アジャイル、オブジェクト指向をこよなく愛するが、最近はRubyの言語仕様に感動し惚れ込んでいる。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2377 2008/08/19 19:48

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー