SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Spring Bootで作るマイクロサービス

多様化するJavaのフレームワーク問題を解決する、「Spring Boot」とは?

Spring Bootで作るマイクロサービス 第1回


Spring Bootとは(1)

 DI機能を使えば疎結合な実装が作りやすくなるため、外部のライブラリやフレームワークなどの導入が簡単になります。ただし、さまざまなプロジェクトが生まれやすくもなり、多くの人が使うとなると、また別な課題も生じてきます。

 開発時には、抽象化の先にある実際の機能やサービスの制限・特性をあまり気にしなくてもよい一方で、実際の運用時にはそれらの制限・特性について依然として理解している必要があります。

 抽象化レイヤーで多くのことが隠蔽されればされるほど、開発は簡単になりますが、実際に使う際にどう運用すればよいのか分かりにくくなります。また、自分がやりたいことを実現するために、どういったライブラリやフレームワークを使えばよいのかも、分かりづらくなってきます。

 Spring Bootでは、こういった課題を解決する手段を提供しています。例えば、自分が作りたいアプリケーションがWebシステムであり、データベースにはNoSQLであるMongoDBを使いたいといったことが決まれば、そのアプリケーションを作成する際の、依存するライブラリやデフォルトの設定などが自動的に行われます。

 つまり、Spring Bootは望む構成を作るためのウィザード的なシステムとも言えます(図4)。

図4:Spring Bootの構成イメージ
図4:Spring Bootの構成イメージ

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内のコードを参照することで解決しやすくなるので、こういった情報があることを知っておくのは大切です。

次のページ
Spring Bootとは(2)

この記事は参考になりましたか?

Spring Bootで作るマイクロサービス連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11310 2020/06/01 18:34

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー