TrailsでCRUDアプリを作ってみた

最近いい感じのプレゼンテーションFWを探していて、その1つとしてWicketを調査していました。これはこれで結構素敵だと思うのですが、いまいち心に響かない。
理由はわかっています。そう、Ruby On Railsに出会ってしまったからです。


というわけで、ちょっと方向転換してJavaRailsの「Trails」を試してみることにしました。JavaRailsを実装することに対しては賛否両論ありそうですが、まずは試してみないとね。

今回は、RailsのscaffoldでCRUDアプリを作るところ相当を目標にします。Trailsの実装は一切気にしないことにします。
<参考にしたチュートリアル
RAD That Ain't Bad: Domain-Driven Development with Trails

Trailsのインストール

Trailsに必要な環境としては、以下のとおり。

  • Java 5 JDK
  • Tomcat 5.5以降(5.5.9を利用)
  • Ant 1.6(1.6.5を利用)

必要な環境変数も追加しておきます。ご自分の環境に読み替えてください。

続いて、Trailsの最新版0.8をダウンロード。で、ダウンロードしたzipを適当に展開。ここではD:\Java\trails以下に展開しました。


最後にinstall-aptタスクを実行すれば、準備は完了です。ちなみにinstall-aptタスクは、TrailsがANT実行時に必要とするant-apt.jarをANT_HOME/libにコピーします。

cd D:\Java\trails
ant install-apt

Trailsアプリの雛形作成

次は、Trailsアプリの雛形を作成します。Rails的には、「rails rails-demo」です。
Trailsでは、antのcreate-projectタスクを使います。チュートリアルページだと、create-new-projectタスクだと書いていますが、名前が変わったようです。タスクを実行すると、Baseディレクトリとプロジェクト名を聞かれるので好きに入力してください。

ant create-project
create-project:
    [input] Base directory:
D:\dev
    [input] Project name:
trails-demo

これで、指定したBaseディレクトリにアプリが生成されます。必要なjarも全部コピーされます。またプロジェクト名は、warの名前になります(例えばtrails-demoだとtrails-demo.war)。
思わず構造を解析したくなりますが、ここはぐっと堪えて次にいきます。

Tomcatへmanagerユーザの追加

Tomcatの設定もやってしまいましょう。
デプロイするときにtomcatのDeployTaskタスクを使うので、manager権限を持つユーザをTomcatに追加しておきます。Tomcatのインストール先/conf/tomcat-users.xmlに以下のように追加します。

<user username="manager" password="tomcat" roles="manager"/>

また、生成したプロジェクトtrails-demo直下のbuild.propertiesファイルもあわせて修正します。

tomcat.home=D:/java/tomcat/jakarta-tomcat-5.5.9
tomcat.url=http://localhost:8080
manager.username=manager
manager.password=tomcat

TrailsはHSQLDBを内蔵しておりテーブルも自動生成されるので、DB周りの作業はいらないみたいです。

ドメインオブジェクトの作成

Railsだと次は以下のような手順になります。

  • テーブルの作成
  • ruby script/generate scaffold recipeで、Model/View/Controllerの自動生成

が、TrailsはModel(ドメインオブジェクト)を作成します。Trailsを「A domain driven development framework for Java」と説明しているのは、そういうことだったんですね。Model中心で開発していくところが、Railsとの大きな違いのようです。
作成するModelであるRecipe.javaは、以下のようになります。ソースは、生成されたプロジェクトのsrcフォルダ以下に配置します(src/mysample/Recipe.java)。

package mysample;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratorType;
import javax.persistence.Id;

@Entity
public class Recipe
{
    private Integer id;
    private String title;
    private String description;
    private Date date;

    @Id(generate=GeneratorType.AUTO)
    public Integer getId(){
        return id;
    }
    public void setId(Integer id){
        this.id = id;
    }
    public String getTitle(){
        return title;
    }
    public void setTitle(String title){
        this.title = title;
    }
    public String getDescription(){
        return description;
    }
    public void setDescription(String description){
        this.description = description;
    }
    public Date getDate(){
        return date;
    }
    public void setDate(Date date){
        this.date = date;
    }
}

開発はこれで終わりです。うーん、楽チン。

デプロイ

では、デプロイしましょう。tomcatを起動してから、deployタスクを実行します。

cd D:\dev\trails-demo
ant deploy

deployタスクがうまくいったら、http://localhost:8080/trails-demo/にアクセスすると・・・
CRUDアプリができてます!やるな!


ここまではRailsに負けないお手軽さです。
実用的かどうかはともかく、DBとテーブルを作らなくてよいという点もすごく楽でした。
色々疑問がありますが、とりあえずはここまで。