はじめに
「LuRuJu」は、UMLモデリングツール「JUDE」で作成したモデル情報をRuby上で簡単に参照するためのRubyライブラリです。「LuRuJu on Rails」はLuRuJuをベースにしたRailsプラグインで、JUDE上で作成したクラス図の内容をそのままRuby on Railsのモデル(言い換えると、ActiveRecordをベースとしたクラス)として動作させることが可能になります。
本記事では、筆者が開発しているLuRuJuおよびLuRuJu on Railsのねらい、特徴、使い方などを簡単に紹介します。また、LuRuJu on Railsを使った簡単なサンプルWebアプリケーションの作成手順を解説することで、本ツールの魅力を肌で感じていただければ幸いです。
対象読者
基本的に限定しませんが、以下のいずれかに当てはまる方は本記事の読者に適しています。
- Ruby、Ruby on Rails経験者
- UMLモデリングツール「JUDE」を利用している、または興味がある
- 案件ごとに自動生成ツール、独自フレームワークなどをよく作っている
- JUDEファイルを配置すると、そのままRailsが動作するって本当? と疑っている、あなた。
ただし、サンプルWebアプリケーションの解説はRuby on Rails(以下、Rails)経験者を前提にしています。
LuRuJuの背景
LuRuJuは、UMLモデリングツール JUDEで作成したモデル情報をRuby上で簡単に扱うことを可能にした糊フレームワークです。LuRuJuの紹介の前に、糊付けの対象であるJUDEとRubyを筆者の観点で簡単に紹介します。
JUDEについて
「JUDE」はChangeVisionが提供するJavaベースのモデリングツールで、筆者も長年愛用しています。筆者が実感しているJUDEの特徴は以下になります。
GUIが洗練されており、マニュアルを見なくても、直感的にさくさくと楽しく図を描くことできる
筆者は無精な人間なので、この手のGUIツールのマニュアルは基本的に見ません。よってツールが愛着するかどうかは、筆者の脳内イメージどおりに動作するかどうかが大きな鍵になっており、JUDEは筆者のわがままな要望を十分満たしてくれています。これにより、本質的な分析、モデリングに思考を集中することができます。
レイアウト調整機能、画像やイメージ図、グラデーション機能など、工夫次第でいくらでも見栄えをよくすることが可能
外見的な美しさよりモデリングの中身、内容が重要なのは言うまでもありませんが、筆者の意見としては局面によっては見栄えも重要な要素であると考えています。プロジェクトによっては最終的な成果物の一部になるので、技術的に詳しくない承認者がはんこを押す決め手にもなりますし、多少時間をかけてでも、自分が描いている図の見栄えがよい方がモチベーション、楽しさアップにつながります。
JUDE APIというJavaベースのAPIが公開されており、モデルデータをプログラム上で参照することができる
実は筆者はここに大きな価値を見出しており、LuRuJuのライブラリ内部もJUDE APIからモデル情報を参照しています。
もちろん、これだけではJUDEのすべてを語りつくすことはできません。詳しくはJUDEホームページを閲覧したり、直接手で触ってみたりしてください。
Rubyについて
Rubyについては、筆者が紹介するまでもありませんね。ここでは、筆者なりの実感や本記事に特化した特徴を述べます。
- オブジェクト指向スクリプト言語
- 特異メソッド、Mixin、Object#extendなど、特殊なオブジェクト指向機能も備えている
- ブロック,yieldには感動
- 自由度が高すぎるかもしれないが、やっぱりeval、eval、eval
- メタプログラミング、リフレクションが強力
- 柔軟でエレガントな文法を利用することで、より短いコードでより多くの機能を実装することができる。
- とにかくプログラミング一行一行書くことが楽しい。言語仕様に愛が込められているのを実感する
強力なメタプログラミング、リフレクション機能がLuRuJu実現に大きく寄与しています。Rubyの言語仕様、リフレクションAPIを駆使すれば、筆者のような末端のプログラマでも実行時動的にクラス、メソッドなどを生成することが容易です。これによりLuRuJuライブラリのコード量は大幅に少なくなり、LuRuJu on Railsでの動的クラス作成も実現できました。
楽しいこと。賛否両論あるでしょうが、筆者はエンジニアの楽しさ、モチベーションが実は生産性、品質に直結していると確信しています。
LuRuJuの特徴
筆者にとってのJUDE、Rubyの共通項は「楽しさ」「さくさく感」です。これら2つのツールを組み合わせることで、より快適にシステム開発ができるようになるかもしれないと考え、LuRuJuをつくりました。LuRuJuの主な特徴は次のとおりです。
- JUDE APIが提供するAPIと同等のAPIを提供しています。
- JUDE APIに加え、追加のAPIを提供しています(詳しくはAPI Referenceを参照のこと)。
- ライブラリ内部でJavaベースのJUDE APIを利用しているのでJRubyのインストールが必須となりますが、ライブラリ利用者は本家CRuby上でもモデル情報を参照することが可能です。
- JUDEファイルを編集中の状態でもモデル情報をロードすることができるので、開発時のスピード感が損なわれません。
- 現バージョンで対応するダイアグラムはクラス図、ER図のみ