マイクロフレームワークなにがし Ninja編

最近Play frameworkに影響されたフレームワークがいくつか出ているようで、
マイクロフレームワークと呼ばれているようです。

Ninja Framework

今日ははその一つである Ninja framework を見ていきたいと思います。
とりあえず公式サイトに沿ってチュートリアルを動かしてみます。

http://www.ninjaframework.org/documentation/getting_started/create_your_first_application.html

mvn archetype:generate -DarchetypeGroupId=org.ninjaframework -DarchetypeArtifactId=ninja-servlet-archetype-simple
cd ninja-servlet-archetype-simple
mvn clean install
mvn ninja:run

これでとりあえず開発サーバが起動します。
Playのようにバイナリパッケージを展開してコマンドにPATHを通したりといった作業が必要ないところはいいかも。
ちなみに開発サーバのポートを変えたい場合は下記の通り。

mvn ninja:run -Dninja.port=8081

ブラウザで localhost:8081 を開くと初期状態のHomeが表示されます。
最初からwebjarsのbootstrapが組み込んであって好印象。

DBアクセス

続いてDBアクセスを試します。
これもチュートリアルに書いてあるとおり。
http://www.ninjaframework.org/documentation/working_with_relational_dbs/jpa.html

テーブルの作成はpersistence.xmlに下記の設定を追加し、JPA(Hibernate)に任せるのが基本的には楽ですが、

<property name="hibernate.hbm2ddl.auto" value="update"/>

自前でマイグレーションSQLを用意してテーブルを作成したい場合は、
Flyway というライブラリに則ってやる事も可能なようです。

  • conf/application.confに追記
    ninja.migration.run=true
    

  • db/migration/V1__hogehoge.sql
    create table Hoge (
      id int(11) primary key,
      name varchar(255)
    );
    

自動的にV1__hogehoge.sqlがDBに適用されます。テーブル名がおかしい場合など、自動的にFlywayがバリデートしてくれるようです。
個人的には開発中はHibernateの自動スキーマ作成に頼り、運用中は検証済みのDDLファイルを慎重に適用したい派なので、Flywayを使うことは無いかもしれません。
(Flywayのバリデートで謎のエラーが出て地味にハマったので・・・)

ちょっと触った感想

  • Controller,ViewがPlay1系に近い感じで好印象
  • DB周りは素のJPAなので、取っつきやすい反面、PlayのModel程は使いやすくなさそう
  • バイトコードをいじらないようなので、若干安心

しばらく触ってみたいと思います。