Spring Bootとは?【Java フレークワーク】

Spring Bootとは?【Java フレークワーク】

どうもこんにちはkoheiです。

リモートワークしてます。

以下のツイートをしました。


最近ですがSpring Bootを使ったアプリケーション開発をしてます。

初めて使いましたが、非常によいといった印象でした。

なので、Spring Bootについてまとめたいと思います。

本記事は



Spring Frameworkとなにが違うのか?
Spring Bootを使うことによってどんなメリットがあるのか?
Spring Bootでできないことってあるの?


そんな方向けの内容になります。

Spring Frameworkとの違い

Spring FrameworkもSpring BootもSpringプロジェクトの1つです。

なので、同じSpringプロジェクトの1であり、使うことで得られる機能が異なります。

Spring Framework

Spring FrameworkはSpring CoreやSpring Beans、Spring ContextなどのSpring主要機能であるDIやAOP、Spring MVCなどの機能を提供します。

Spring Frameworkを使うことで得られるメリットを知りたい方

こちらの記事を読んでみてください。


Spring Boot

一方、Spring bootは以下の機能を提供します。

  • スタンドアロンのSpringアプリケーションを作成する
  • Tomcat、Jetty、またはUndertowが直接埋めこまれたJarを作成する。
  • ビルド構成を完結にする「Starter」により、依存関係を提供する。
  • Springとサードパーティのライブラリを可能な限り自動的に構成する。→サードパーティ製のライブラリ(テンプレートエンジンのThymeleafとか)と連携するライブラリを提供している。
  • メトリック、ヘルスチェック、外部化された構成などの本番環境対応機能を提供します。

つまり、Spring FrameworkをSpring Bootの違いを答えるならば、Springプロジェクトの別の機能ということになります。

公式サイトに記載されているSpringプロジェクトはSpring FrameworkとSpring Boot以外にも多数存在します。

Springプロジェクトについて以下の記事まとめたので気になる方は見てみてください。

(執筆中、少々おまちください)

Spring bootを使うことで得られるメリット

Spring Frameworkは主要機能であるDIなどを使用するために必須となりますが、Spring Bootを使わなくてもアプリケーションは作成できます。

しかし、昨今「Spring Framework + Spring Boot」のアプリケーション開発が主流であることはたしかです。

スタートアップ企業でも使われるようになったことで、Javaフレームワークのデフォルトスタンダードといっていいほど普及したSpringですが、その要因となったのはSpring Bootを使用することで得られるメリットが大きいからだといっても過言ではありません。

Spring Bootを使うことで、以下のメリットが得られます。

  1. Springのデメリットである多数存在する機能の設定をしなくていい 
  2. Starterという機能を使うことで細かなプロジェクト管理をしなくていい 
  3. アプリケーション実行が簡単になる
  4. 運用保守面の機能も利用できる


以下で解説します。

【メリット①】Springのデメリットである多数存在する機能の設定をしなくていい

Spring Boot AutoConfigureによって、多くの設定が自動に行われ、デフォルトで様々な機能が利用できます。

これのなにがいいか

目的のロジック箇所の実装からはじめられ、すぐ動作するアプリケーションを作成できる。

これが一番大きいかと思います。

Springは機能が豊富というメリットはありますが、設定が多くなるので初心者にとっては学習コストが高いです。

スタートアップ企業ではすぐに動かすことができるアプリケーションを作成することが非常に重要になるので、Spring Bootを使うことで、ほとんどの設定がデフォルトのままで動作するようになるのは大きなメリットになります。

長年蓄積されたJavaのライブラリも利用でき、すぐに動くアプリケーションを作成できるのは使う側からしたら便利かと思います。

例えば

Bean定義やログの設定などが不要になります。

【メリット②】Starterという機能を使うことで細かなプロジェクト管理をしなくていい

上記で述べた、Spring Bootの以下の機能により得られるメリットになります。

  • ビルド構成を完結にする「Starter」により、依存関係を提供する。
  • Springとサードパーティのライブラリを可能な限り自動的に構成する。→サードパーティ製のライブラリ(テンプレートエンジンのThymeleafとか)と連携するライブラリを提供している。


つまり、機能を実現するために必要なライブラリの依存関係を集約したStarterを利用することによって、依存関係が解決されたライブラリを利用できるようになります。

spring-boot-starter-XXという名前で提供されています。

これのなにがいいのか

自分が作成したいアプリケーションによって、ひとまずspring-boot-starter-XXを依存関係に記述すれば、こまかな設定が不要(デフォルトの設定値)でアプリケーションを動かすことができるレベルまで作成できます。

よって、すぐにロジック箇所の実装に取り掛かることができ、余計なことをかんがえなくていいです。

例えば

spring-boot-starter-webを依存関係に追加することで、Webに関するライブラリの依存関係が解決されます。

以下の依存関係が解決されます。
Spring Boot, Spring MVC, Tomcat, Bean Validation, Jackson, SLF4j + Logback

【メリット③】アプリケーション実行が簡単になる

上記で述べた、Spring Bootの以下の機能により得られるメリットになります。

  • Tomcat、Jetty、またはUndertowが直接埋めこまれたJarを作成する。


つまり、実行可能なjarを作成できます。

これのなにがいいのか

Spring Bootでは従来の開発のようにwarを作成してアプリケーションをデプロイするような手順は不要なので手間が省けます。

理由はSpring BootにはTomcatといったアプリケーションサーバが組み込まれているためです。

作成したjarファイルを実行するとアプリケーションサーバが起動します。

デプロイもjarを所定のフォルダに配置して、実行するだけです。

さらに、プロパティ値を実行時に指定することが可能なのでポータビリティが高くなってます。

例えば


java -jar target/application-demo.jar --server.port=8888

を実行するばけで、アプリケーションが実行できます。

例では、–server.port=8888を指定することで、サーバのポートも実行時に変更してます。

【メリット④】運用保守面の機能も利用できる

上記で述べた、Spring Bootの以下の機能により得られるメリットになります。

  • メトリック、ヘルスチェック、外部化された構成などの本番環境対応機能を提供します


つまり、Spring Bootは開発面だけでなく、運用保守の観点でも利用できる機能を提供してくれます。

具体的には、Spring Boot Actuatorを使用します。

spring-boot-starter-actuatorを依存関係に追加するば利用できます。

追加することで、HTTPエンドポイントが追加され、アクセスすることでアプリケーションの情報を取得することが可能です。

これのなにがいいのか

アプリケーション開発経験のある方ならわかるかもしれませんが、非機能要件次第では必要になる機能であります。

自分でこのような機能を作成しようとしたら、かなり大変なのではじめから準備されているのは非常に助かります。

例えば

「http://localhost:8080/health」を実行した場合は、アプリケーションの接続先の状態(DBとか)を取得できます。
「http://localhost:8080/mapping」を実行した場合は、Spring MVCのリクエストマッピングを取得できます。

といった感じです。

エンドポイントのコンテキストパスや、ポート、アクセス許可は「application.properties」で変更できるので、非常に便利な機能になります。

Spring bootにできないこと

Spring Bootには上記で述べた機能以外の機能はありません。

あくまでライブラリみたいな位置づけなので、特定の機能を提供しているだけになります。

アプリケーションは複数あるSpringプロジェクトのモジュールを組み合わせることで作成していきます。

なので、Spring Bootは道具に過ぎません。

Spring Bootを使ったからといって、アプリケーションを作れるわけではないのです。

結局は、どのモジュールを使うかは作成者に委ねられ、ロジック箇所は自分自身で実装しなければ行けないです。

あたりまえですが、フレームワークなので、使い方はあなた次第といったところでしょう。


人気記事①:
【厳選4冊+α】Spring Framework初心者におすすめな本

人気記事②:現役エンジニアがおすすめするプログラミングスクール5社:無料あり