モデルにメソッドを追加
これで、モデルのデータのCRUDはRails上でできるようになりましたが、カプセル化の観点でモデルにビジネスロジックを追加しようと考えるのは当然の話です。もちろん実現可能です。「RAILS_ROOT/app/models」配下にクラスごとに必要なメソッドのみを記述してください。
例として、注文詳細に単価×個数で価格を求めるメソッドを追加してみましょう。以下の内容で「RAILS_ROOT/app/models/order_detail.rb」を作成してください。
class OrderDetail < ActiveRecord::Base # 価格の算出(単価×注文個数) def price() item.price * order_number end end
引き続き、script/consoleで確認してみましょう。
C:\workspace\pom>ruby script/console Loading development environment. >> air = Item.create#商品インスタンス生成 => #<Item……文末まで省略 >> air.name = 'MacAir' #商品の名前を設定 => "MacAir" >> air.price = 229800 #商品の単価を設定 => 229800 >> air.save #商品を登録 => true >> detail = OrderDetail.new #注文詳細インスタンスを作成 => #<OrderDetail:……文末まで省略 >> detail.item = air #注文詳細の商品を設定 => #<Item:……文末まで省略 >> detail.order_number = 2 #注文詳細の注文個数を設定 => 2 >> detail.save #注文詳細を登録 => true >> detail.price #注文詳細の価格を出力 => 459600
うまくいきましたね! はりきって2つも購入してしまいました。
ActiveScaffoldでの画面確認
以上で、LuRuJu on Railsの機能概要については体感できたと思います。ただ、ブラウザでの画面を見ないまま終わるのは味気ないので、ActiveScaffoldで画面を出してみましょう。
以下のコマンドでActiveScaffoldをインストールします。
C:\workspace\pom>ruby script/plugin install http://activescaffold.googlecode.com/svn/tags/active_scaffold
共通のレイアウトファイルとして、「RAILS_ROOT/app/views/layout/activescaffold.rhtml」を以下の内容で作成します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>My Application</title> <%= javascript_include_tag :defaults %> <%= active_scaffold_includes %> </head> <body> <%= yield %> </body> </html>
「RAILS_ROOT/app/controllers」配下にそれぞれ以下のコントローラを記述したファイルを作成します。
class ItemsController < ApplicationController active_scaffold :item layout "activescaffold" end
class MembersController < ApplicationController active_scaffold :member layout "activescaffold" end
class OrderDetailsController < ApplicationController active_scaffold :order_detail layout "activescaffold" end
class OrdersController < ApplicationController active_scaffold :order layout "activescaffold" end
以上で事前準備は完了です。Railsのサーバを起動しましょう。
C:\workspace\pom>ruby script/server
ブラウザより http://localhost:3000/[モデル名の複数形] にアクセスすることで画面を確認することができます。以下、画面例になります。

ただ、Webサーバを再起動せずに気持ちよく開発してもらいたいという筆者の思いに反するので、どこかのタイミングでクラスのロード時間に関しても、利用者が不快に思わない程度の性能改善を行おうと考えています。
LuRuJu on Railsのねらい
モデル定義やExcelでの定義より、ソースコードやDBのDDLを自動生成する独自ツールをよく見かけます。LuRuJuの紹介で述べた話でもあり、これはこれでいいのですが、中間コードもリポジトリ管理をしなければならず同一情報の二重管理になりますし、元の定義が変更されるたび、自動生成ツールを実行する必要があるので開発のスピード感が損なわれる場合もあります。
LuRuJu on Railsは、中間コードなしでWebアプリ実行時動的にモデルデータからクラスを生成する点がおおきなミソです。『設計と実装にまたがったDRY(Don't Repeat Yourself)』を筆者はねらっています。JUDEファイルが設計フェーズの成果物のみではなく最終的な実行モジュールの一部になるのです。
また、これはまだ未完成ですが、Webサーバを停止せずに、JUDEファイルの修正に対し、アプリケーションやDBが動的に追随することもめざしてます。アプリケーション側は既に半分実現できていて、Railsの設定パラメータconfig.cache_classesと連動します。これにより開発環境はホットデプロイ、本番環境はコールドデプロイという切り分けができます。『モデリング = 設計 + グラフィカルなコーディング』となるのです。
永続的データ構造なんて開発の初期段階でFIXするからそんな機能いらないんじゃないかと思う方もいるかもしれませんが、要求の絶え間ない変化、ケアレスミス(画面のこの項目がテーブルの列に反映されてなかった~~)、結合試験フェーズでの仕様の齟齬など、データ構造も開発全般に渡って修正を余儀なくされるものだと思っています。
後は、グラフィカルに描いた図がそのまますぐアプリケーションに反映されるっておもしろいじゃん、という筆者の単純な探究心やモチベーションもあります。
おわりに
以上、駆け足でLuRuJu、LuRuJu on Railsを紹介しましたが、雰囲気をつかむことができたでしょうか? これらツールはまだ産まれたばかりでまだまだ手のかかるおてんば娘なので、不良少女にならないようにこれからじっくり育てていくつもりです。自分のニーズに合う方がいれば、使っていただけるとうれしいです。
要求仕様の一行とプログラムコードの一行は同じ価値があります。プログラミングは知的好奇心を満たす宝庫です。筆者も皆さんもコード一行一行に想いをこめましょう!!
