DropwizardでWebアプリケーションを作る

調べものをしていたらたまたま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

  • 0.6.2
  compile 'com.yammer.dropwizard:dropwizard-core:0.6.2'
  • 0.7.0
  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を使いたい、とか)があるので、少しずつ消化していきたいです。