最近JavaのWebフレームワークは「Spring Boot」1択でいいと思うようになった

「Spring Boot」推しの記事ですが、フレームワーク選定の1つの意見として参考になればと思います。

フレームワークの変遷

まずは現状のフレームワークの選択肢を確認するために変遷を振りかえります。(リストは筆者の記憶によるものなのでいい加減です。詳しい変遷は他を参照して下さい。)

  • 2003年~2005年
    • Struts登場。フレームワークという概念が浸透する。
  • 2005年~2010年
    • Spring登場。脱EJBのDIコンテナ。
    • Seaser2登場。日本発ということもあり日本語資料が充実で人気だった。
  • 2010年~2016年
    • Strutsが衰退。
    • Seaser2が衰退。
    • Java EE 6登場。CDIなどを取り入れ、生Java EEもFWの選択肢に。
    • Spring Boot登場。Springが劇的に使いやすくなる。

各年のいい加減さはさておき、だいたいこんな流れという認識。「Struts」から始まり「Struts」「Seasar2」「Spring」の時代があり「Struts」「Seasar2」が終わっていく。2010年代前半にJava EE 6でCDIが導入され既存のFWに肩を並べてきた感じで生Java EEも立派な選択肢だったが、ただ最近はJava EEのリリースがとても遅いためまた置いてけぼりな感じになってしまった。これにより選択肢から外れてしまう。

そうなると消去法でも「Spring」が有力になっていくが、「Spring Boot」の登場により積極的にこれがいいと思えるようになった。

起動設定の複雑さを克服するSpring Boot

「Spring Boot」は「Spring Framework」を使いやすく使えるようにするためのプロジェクトで、起動設定からデプロイに至るまでよく考えられています。

Spring Frameworkが嫌われていた点は起動設定の複雑さです。特にXMLによるコンフィグレーションでは設定の内容を外部化するのはいいのですが、XMLファイルをほんの少々でも間違えると動かなかったりします。Spring Frameworkもこれに対応するためにアノテーションを利用したり、JavaConfigを導入したりしています。ただこれもまだ不足です。各Springライブラリでは実質必須で設定しなければならないものなどがあり、それをしっかり設定できていないと動かなかったりしました。

Spring Bootはそれを克服します。AutoConfigによる自動設定が動くので必要最低限の設定以外は不要になるからです。これによりほぼ設定関連の記述をしなくなります。自動設定で困るものだけ上書きをしていきます。開発時であればDBの接続先やログの設定を少々書くぐらいです。

さらにSpring Bootでは、実行可能jarを簡単に作成することができます。Webアプリケーションであっても組み込みtomcatが動くのでJ2EEサーバーを用意してデプロイすることなく、jarを実行するだけで起動できます。

これらの工夫によりSpring Bootは起動設定の複雑さを克服し、即デプロイ可能な手軽さまでを兼ね備えつつ既存のSpring Frameworkが使えることになります。ここがSpring Bootを積極的に使いたいポイントになります。

クラウド・VPS、マイクロサービスにマッチするSpring Boot

昨今のクラウド・VPS化によって、1台の高価格サーバーで頑張るよりは、低価格の複数インスタンスをロードバランサーで組み合わせるという方式が主流になってきます。これを実現するためには、デプロイのしやすさや起動のしやすさみたいなものが必要なりますが、まさにこれが先ほど説明したSpring Bootのポイントにマッチしています。マイクロサービスも同様で、Spring Bootを使えばマイクロサービスになるわけではありませんが、強力なツールになるのは間違えないです。必要最低限の設定で起動できるということは、数多くのプロジェクトやサービスを簡単に作成できるからです。

最近はインフラ専門家でなくても運用を意識するのは当然となってきました。これまでのように運用はインフラの専門家にお任せであれば、FWを決めるのにクラウドなどの運用観点をいれることは積極的ではありませんでした。ただ最近は規模にもよりますが、デプロイや初期運用もこっそり開発範囲に含まれるようになった気がします。

そうなってくるとデプロイしやすさや運用しやすさがFWを決める重要なポイントになってきます。その観点からいくとSpring Bootはかなりリードしています。Spring Boot自体がクラウドに寄せていっている部分も大きいですが、よく考えてみるとビルド・デプロイのしやすさまで考えられたFWはこれまで無かったような気がします。他のフレームワークでも頑張ればできそうなことは多いですが、機能として備えているSpring Bootを選んでしまいます。

これから始めるのもオススメ

個人的には最近「Spring Boot」を外せなくなっているので、こんな記事を書くに至りました。この記事だけで全ての良さを伝えられたとは思わないので、1度お試し下さいといったところです。「Spring Boot」はWebの他にも、バッチも自動的に実行記録を取ったりして相当使えます。

ここ1、2年で入門書・日本語書籍も増えてきました。活気づいています。1.4もリリースされます。そういった部分でもいままでSpringには行ってこられなかった人もいいチャンスかと思います。

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発