Spring Bootとは(1)
DI機能を使えば疎結合な実装が作りやすくなるため、外部のライブラリやフレームワークなどの導入が簡単になります。ただし、さまざまなプロジェクトが生まれやすくもなり、多くの人が使うとなると、また別な課題も生じてきます。
開発時には、抽象化の先にある実際の機能やサービスの制限・特性をあまり気にしなくてもよい一方で、実際の運用時にはそれらの制限・特性について依然として理解している必要があります。
抽象化レイヤーで多くのことが隠蔽されればされるほど、開発は簡単になりますが、実際に使う際にどう運用すればよいのか分かりにくくなります。また、自分がやりたいことを実現するために、どういったライブラリやフレームワークを使えばよいのかも、分かりづらくなってきます。
Spring Bootでは、こういった課題を解決する手段を提供しています。例えば、自分が作りたいアプリケーションがWebシステムであり、データベースにはNoSQLであるMongoDBを使いたいといったことが決まれば、そのアプリケーションを作成する際の、依存するライブラリやデフォルトの設定などが自動的に行われます。
つまり、Spring Bootは望む構成を作るためのウィザード的なシステムとも言えます(図4)。
Spring BootのStarterとは
Spring Bootでは、どのような目的でシステムを作るのかに応じて、必要な設定とライブラリなどの依存関係を解決するための情報が定義セットとして管理されています。
例えば、Web開発する場合には、Spring MVCを使った開発に必要なライブラリの取得やそのための自動設定、Tomcatの設定なども自動で行います。また、Tomcat自体も組み込まれます。そのため、Spring Bootを使えば面倒な環境設定などを行わずにすぐに開発ができます。
依存関係だけであれば、これまでもMavenやGradleを使えばできましたが、それらのライブラリやフレームワークを使う上での設定は自分で行う必要がありました。
Spring Bootでは、依存関係の解決にMavenやGradleなどのツールを使うことは同様ですが、設定は自動で行われます。この機能はAutoConfigureと呼ばれています。そして、こうした定義セットをStarterと呼んでいます。
Starterは目的に応じて組み合わせて使うことができるので、自分のプロジェクトに応じた形にカスタマイズして利用することもできます。
公式で多くのStarterが用意されていますが、必要なセットがない場合にはStarterは自分でも作成することができます。ここですべてのStarterを紹介することは難しいですが、利用する方が多いと思われるものをいくつか紹介します。
spring-boot-starter
最も基本的なStarterで、他のStarterの元となっています。Spring Bootを最小構成などで使いたい場合に利用するStarterです。
spring-boot-starter-web
Web関連での最も基本的なStarterです。Web関連で開発を始めたい場合には、通常はこのStarterで問題ありません。Spring MVCを使ったアプリケーションが作成可能です。デフォルトでTomcatも含まれているので、すぐにWeb開発を始められます。
Tomcatを使いたくない場合でもこのStarterを使うことができます。ただし、その場合には、内部で依存しているspring-boot-starter-tomcatの代わりに他のスターターを有効にする必要があります。例えば、Tomcatの代わりにJettyをWebアプリケーションサーバとして利用する場合には、spring-boot-starter-jettyを併せて利用します。
spring-boot-starter-webflux
通常のブロッキングIOやスレッドモデルでのWebアプリケーションではなく、ノンブロッキングIOや少ないスレッドで、大量の接続などに対応しなければいけないWebサービスを作成するためのStarterです。
Spring MVCの代わりに、Spring WebFluxを使います。デフォルトで内部ではNettyを使っているので、こういったノンブロッキングIOをサポートするネットワーク環境が必要な場合には利用を検討するとよいでしょう。
spring-boot-starter-actuator
アプリケーションの状態のモニターやヘルスチェックなどの機能を追加します。一般的には、他のStarterと共に使われ、spring-boot-starter-webなどと一緒に利用されることを想定しています。
spring-boot-starter-batch
バッチ処理のためのSpringのプロジェクトであるSpring Batchを使ったアプリケーションを作成するためのStarterです。
spring-boot-starter-jdbc
SpringのプロジェクトであるSpring Data (JDBC Extensions)を使う場合のStarterです。JDBCを使ったデータベース処理や接続プールなどその他の管理などを行うことができます。
spring-boot-starter-integration
EIP(Enterprise Integration Patterns)フレームワークであるSpringのプロジェクト、Spring Integrationを使うためのStarterです。同様のEIPフレームワークとしてApache Camelなども有名ですが、Apache Camelからはcamel-spring-boot-starterというStarterが提供されています。
spring-boot-starter-test
Spring Bootを使ったアプリケーションのテストをするためのStarterです。JUnitやMockitoなどに依存していています。
ここで紹介したStarter以外にも、GitHubを見ると非常にたくさんのStarterがあることが分かります。
多くの方がspring-boot-starter-webを使っているため、Spring BootがWebアプリケーションを作成するためのフレームワークと認識している方もいるようですが、必ずしもWeb開発に限定されたものではありません。
また、これらのStarterの組み込み方は次回説明しますが、これらのコードを読む必要はないので心配はいりません。Spring Boot用のプロジェクトを構築するためのツールが提供されているので、それらを使えば簡単に構成をカスタマイズすることができます。
ただし、ツールだけではできない場合や、より高度なカスタマイズをしようと思ったときにGitHub内のコードを参照することで解決しやすくなるので、こういった情報があることを知っておくのは大切です。
