調べものをしていたらたまたまDropwizardを見つけたので試してみました。
Dropwizardとは?
Dropwizard is a Java framework for developing ops-friendly, high-performance, RESTful web services.
公式サイトにある通り、「運用に優しく、ハイパフォーマンスな、RESTful Webサービスを作るためのJavaフレームワーク」のようです。
依存関係としてdropwizard-coreを一つ追加すると、Jetty, Jersey, Guava, Logback/slf4jなどのよく使うライブラリが含まれます。
単純な実行(アプリケーションの起動)なら、Javaがインストールされている環境なら、ビルドしたjarファイルと設定ファイルがあれば、 java -jar {jar file} server {configuration file}
で終わりです。現実的にdaemonizeとかサービス起動したい場合は少し手を加える必要があるかも。
作ってみた
「Getting Started」を写経してHello Worldアプリケーションを作りました。ただし、ビルドはMavenではなく、Gradleで行うようにしました。
https://github.com/tq-jappy/dropwizard-example
Dropwizardのバージョンは0.7.0です。
できあがったものは、@hina0118さんの「DropwizardのHello World - Qiita」のほぼ焼き直しになった(ただし@hira0118さんの例はバージョン0.6.2)ので、0.6.2と0.7.0の間の差分だけメモしておきます。
build.gradle
compile 'com.yammer.dropwizard:dropwizard-core:0.6.2'
compile 'io.dropwizard:dropwizard-core:0.7.0'
パッケージ
com.yammer.dropwizard -> io.dropwizard
一部クラス名やAPIの変更などもあります(公式が最新バージョンに追随しているのでそちらを参照)
起動ポートを変更
デフォルトの設定では8080番ポートでアプリケーションが、8081番ポートで管理メニューが立ち上がるのですが、このポートは何かと被ることが多いので、設定ファイルを以下の通り変更しました。
template: Hello, %s!
defaultName: Stringer
server:
applicationConnectors:
- type: http
port: 18080
adminConnectors:
- type: http
port: 18081
この辺の設定の仕方も0.6→0.7で大きく変わっています。
ちなみに、server.type: simpleを指定した以下の書き方はうまく動きませんでした…。
server:
type: simple
applicationContextPath: /application
adminContextPath: /admin
connector:
type: http
port: 8080
ビルド
ビルドしたjarファイルのサイズは約10.2MBでした。軽い。
感想
Hello Worldでのつまみ食い程度ですが、第一印象はとても可能性も感じるものでした。(一部では)2014年大ブレイクと囁かれているみたいで、今後の発展に期待です。
Java EEの機能をフルに使う必要がなく、とにかくサクッと開発を始めたいなら、とてもいいですね。
あと、以前作ったJavaアプリケーションをポータビリティの高いものにしたいというのはずっと悩んでいたところだったので、Dropwizardを使えばうまくフィットしそうです。元々は、Jenkinsのように java -jar jenkins.war
でアプリケーションが立ち上がる実行可能WARファイルを一から作ることを考えてました(JenkinsはWinstoneを中に持っていたんだっけ…?)。この辺りの起動の仕組みは、スクラッチで作るより、Dropwizardを使うほうがずっと簡単にできそうですね。
現実的なWebアプリケーションを作るにあたってはいくつか懸念事項(フロントエンド周り、DI、ORMはDomaを使いたい、とか)があるので、少しずつ消化していきたいです。