Javaマイクロフレームワーク探訪

こんにちは、GMO NIKKOのNigoです。
マイクロサービスアーキテクチャを採用しているプロダクトに関わっているんだから
アジリティの高いフレームワークの持ち駒を増やしておきたいよね、ということで
JavaでSinatraライクなマイクロフレームワーク、さらに一番人気と評判の
Spark Frameworkを触ってみることにしたのですが・・

SinatraはいわずとしれたRuby製の超軽量フレームワークです。
Webアプリケーションフレームワークの定石となっているMVCを崩して1クラス
ほんの数行でWebサービスを立ち上げられる脅威のアジリティをもっています。
さらに簡易ながら、RESTクライアントとしてもRESTサーバとしても活用できる
ことからSaaS APIの試用からハッカソンのバックエンドモックまでとにかくいますぐ
動くものを作るという用途にかけては非常に優れたフレームワークだと思います。

1. Spark Frameworkとは

Spark Frameworkとは、GitHubにそのものずばり「A Sinatra inspired framework for java」
とかかれておりますが、Sinatraの影響を受けて開発されている軽量なJava製の
Webアプリケーションフレームワークです。
(分散処理基盤のApache Sparkとはまったくの別物です、念のため)
公式を見ていただくと一目瞭然ですが、コード量・公開までの手順量の少なさは非常に
インパクトがあります。

2. Spark Frameworkでhello world

必要なものは公式の通りにEclipse, Maven, java8。
すでにEclipse4.4、java8は個人環境に入っており、MavenもEclipsem2eプラグイン
がはいっていたため10分程度で動くかなと思ったのですが、Mavenを
触るのが久しぶりだったり、java8でコンパイルするための設定が必要だったりで
結局半日近く。なかなかすんなりとは動きませんでした。
あまり触っていないMavenでの環境構築だから仕方がない+自分の不勉強を呪いつつhello world。
参考までにコードは下記です、サンプルそのままです。

3. そしてデプロイへ・・

Sinatra inspired tiny frameworkだからデプロイもさくっとできるだろう
と見込んでいたのですがなんだか色々と見込み違いがありました。
デフォルトでJettyが組み込んであるからこれを使うのだとばかり思っていたのですが
公式をよくよく確認するとservretに組み込んでtomcatにデプロイとあり、んーこれはちょっと・・。
何か別の方法はないかと探し回りこちらを参考にさせていただいて、
ローカルのvagrant環境上のUbuntuにデプロイというところまではたどりつきました。
Herokuへのデプロイなどの情報はみつかったため、想定しているデプロイ先はPaaSかTomcatかという割り切り仕様なのかもしれませんが、せっかくマイクロフレームワークをうたっているので単体で簡単に完結する仕組みが欲しいなあと思いました。
(この辺は調査不足です、Spring Bootも似たような起動の仕組みなので組み込みjettyに起動時パラメータを渡す設定があれば実行可能jar+起動スクリプトでいけそうな気がします。)
下記は今回作成したpom.xmlです。

4. まとめ

当初予定ではさくっとSpark Frameworkの環境構築を済ませて
<公式チュートリアル>をブログ用にいくつかこなしたうえで
Sinatraと性能比較をしてやはりSpark Frameworkおすすめですね!というシナリオを
描いていたのですが、現段階では情報の少なさも相まって少し求めていたものと
違うかなという印象です。しかしライブラリをうまく組み合わせることでひょっとしたら
化けるのかもという予感もあります。
以上非常に煮え切らない内容で大変恐縮ですが、マイクロフレームワークを
比較検討中の方や、spark frameworkが気になっているけどなかなか
触る時間がないというような方の一助となれば幸いです。