Skip to content
Playground

4.Spring Boot 入門

学習目標

  • 依存関係と Maven の役割を説明できる
  • Spring Boot が提供する自動設定・スターター・組み込みサーバーを説明できる
  • Spring Initializr で依存関係を選んでプロジェクトを作成できる
  • 生成されたプロジェクトの主要ファイル(メインクラス・pom.xmlapplication.properties)の役割を説明できる
  • @SpringBootApplication が何をしているかを説明できる
  • サーバーを起動し、起動ログから状態を読み取れる

Web アプリケーションは、サーブレットの API、Tomcat、データベースのドライバーなど、多くの既成のコードを組み合わせて作ります。

他者が書いた再利用可能なコードのまとまりを ライブラリー と呼びます。プロジェクトが使うライブラリーを 依存関係(dependency)と呼びます。「このプロジェクトはそのライブラリーに依存している」という関係を表します。使う依存関係は、プロジェクトの pom.xml に記述します。

pom.xml に書いた依存関係を実際に取り込むのが、ビルドツールの Maven です。Maven は pom.xml を読み、記述されたライブラリーを配布元からダウンロードして、プロジェクトに組み込みます。

組み込まれたライブラリーのクラスは、自分のコードから import して呼び出せます。たとえば、MySQL のドライバーを追加すれば、DriverManager で MySQL に接続できるようになります。

Spring Boot は、Spring の上に構築された、Web アプリケーションをすぐに開発できるフレームワークです。Spring 本体は、Web アプリケーションに必要な機能(リクエスト処理、データベースアクセス、トランザクション、セキュリティなど)を細かい部品として提供するフレームワークですが、使うには大量の設定ファイルや初期化コードが必要でした。Spring Boot は、Spring の上に 自動設定スターター組み込みサーバー の 3 つの仕組みを加え、設定をほとんど書かずに動くアプリケーションを作れるようにしたものです。

自動設定(auto-configuration)は、プロジェクトに追加した依存関係を見て、必要な設定を Spring Boot が自動で行う仕組みです。

たとえば、データベースに接続するライブラリーを追加すると、Spring Boot はそれを検知し、データベース接続に必要な部品を自動で組み立てます。設定ファイルに「データベース接続用のクラスを使う」と明示的に書く必要はありません。

設定が要らないわけではなく、標準的な設定を Spring Boot が代わりに行うのが自動設定です。標準と異なる設定が必要なときだけ、自分で設定を書きます。

スターター(starter)は、関連する依存関係をまとめた依存パッケージです。spring-boot-starter- で始まる名前で、用途ごとに用意されています。

スターター用途
spring-boot-starter-webWeb アプリケーション(リクエスト処理、組み込みサーバー)
spring-boot-starter-thymeleafThymeleaf テンプレートエンジン
spring-boot-starter-jdbcJDBC でのデータベースアクセス

spring-boot-starter-web を依存関係に追加すると、Web アプリケーションに必要な複数のライブラリー(Spring MVC、組み込み Tomcat、JSON 変換ライブラリーなど)がまとめて取り込まれます。個別に依存関係を列挙する手間がなくなります。

Java の Web アプリケーションを動かすには、Tomcat のような Web サーバー(Servlet コンテナー)が必要です。spring-boot-starter-web には、組み込みサーバー として Tomcat が含まれます。

組み込みサーバーは、アプリケーションと一体で動く Web サーバーです。サーバーを別途インストールしてアプリケーションをデプロイする必要はなく、アプリケーションを main メソッドから起動するだけで、内部で Tomcat も起動し、リクエストを受け付けられます。

Spring Boot で書店アプリを作るために、Servlet を動かしていた hello プロジェクトとは別に、新しいプロジェクト bookstore を作成します。

  1. Spring Initializr を開く

    コマンドパレット(Ctrl + Shift + P)で Spring Initializr: Create a Maven Project を選びます。

  2. プロジェクトの設定を選ぶ

    Spring Boot のバージョン((SNAPSHOT) の付かない最新版)、グループ名、アーティファクト名、パッケージング形式、Java のバージョンを順に選びます。

    項目
    Groupcom.example
    Artifactbookstore
    PackagingJar
    Java25

    Group はパッケージの先頭、Artifact はプロジェクト名になり、生成されるパッケージは com.example.bookstore です。

  3. 依存関係を追加する

    依存関係の選択画面で、次の依存関係を選びます。

    依存関係役割
    Spring Webリクエストを受け付けてレスポンスを返す Web アプリケーションの基本機能と、組み込み Tomcat
    ThymeleafHTML を画面として返すテンプレートエンジン
    MySQL DriverMySQL データベースに接続するためのドライバー
    Spring Boot DevToolsコードやテンプレートの変更を反映する開発時用のツール

    Spring Web を追加すると、Spring Boot がそれを検知して、Web アプリケーションに必要な設定を自動で行います。Thymeleaf を追加すると、テンプレートの読み込みと描画を自動で構成します。選択後、生成先のフォルダーを指定し、生成されたプロジェクトを開いて作業します。

生成されたプロジェクトの主なフォルダーとファイルです。

  • Directorybookstore/
    • Directorysrc/main/java/com/example/bookstore/
      • BookstoreApplication.java
    • Directorysrc/main/resources/
      • Directorytemplates/
      • Directorystatic/
      • application.properties
    • Directorysrc/test/java/com/example/bookstore/
      • BookstoreApplicationTests.java
    • pom.xml
ファイル・フォルダー役割
BookstoreApplication.javaアプリケーションのメインクラス。main メソッドから Spring Boot を起動する
pom.xmlMaven の設定ファイル。依存関係や Java のバージョンが書かれている
application.propertiesアプリケーションの設定を書くファイル。ポート番号やデータベース接続情報などをまとめる
templates/HTML テンプレートを置くフォルダー
static/CSS・画像など、ブラウザーから直接読み込まれるファイルを置くフォルダー
src/test/テストコードを置くフォルダー

pom.xml には、Initializr で選択したスターターが <dependencies> に並びます。

pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

spring-boot-starter-webspring-boot-starter-thymeleaf がスターターです。バージョン番号は書かれておらず、Spring Boot 本体のバージョンに合わせて自動で決まります。mysql-connector-j は MySQL のドライバー、spring-boot-devtools はコードやテンプレートの変更を反映する開発時用のツール、spring-boot-starter-test はテストを書くための依存関係です。

pom.xml を直接編集して、依存関係を後から追加・削除することもできます。

Spring Boot のアプリケーションは、メインクラスの main メソッドから起動します。

BookstoreApplication.java
package com.example.bookstore;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BookstoreApplication {
public static void main(String[] args) {
SpringApplication.run(BookstoreApplication.class, args);
}
}

SpringApplication.run が、Spring Boot を起動します。引数に渡したクラスを起点に、自動設定とコンポーネントスキャンが行われます。

メインクラスに付いている @SpringBootApplication は、次の 3 つを束ねたアノテーションです。

内訳役割
@EnableAutoConfiguration依存関係を見て、Spring Boot の自動設定を有効にする
@ComponentScanメインクラスのパッケージとサブパッケージから、@Controller などのクラスを自動で見つけて登録する
@SpringBootConfigurationこのクラス自体を、Spring の設定クラスとして扱う

これら 3 つは個別にも書くことができますが、Spring Boot のアプリケーションではほぼ常にセットで使うため、@SpringBootApplication 1 つにまとめられています。

@ComponentScan の対象は、メインクラスのパッケージとサブパッケージに限られます。@Controller を付けたクラスを別のパッケージに置くと、自動で見つからず、リクエストが届きません。

メインクラスの main メソッドの上に表示される Run をクリックして、サーバーを起動します。ターミナルにログが流れ、最後に次のような行が出れば起動完了です。

Tomcat started on port 8080 (http) with context path '/'
Started BookstoreApplication in 2.345 seconds (process running for 2.7)

Tomcat started on port 8080 は、組み込み Tomcat がポート 8080 で待ち受けを始めたことを示します。Started BookstoreApplication は、Spring Boot の初期化が完了したことを示します。

この状態でブラウザーから http://localhost:8080/ を開くと、Whitelabel Error Page が表示されます。サーバーは動いていますが、/ を担当するコントローラーがないため、Spring Boot がデフォルトのエラーページを返しています。コントローラーは @Controller で扱います。

起動時のログには、Spring Boot が何をしたかが順に出力されます。

Starting BookstoreApplication using Java 25
No active profile set, falling back to 1 default profile: "default"
Tomcat initialized with port 8080 (http)
Starting service [Tomcat]
Starting Servlet engine: [Apache Tomcat/...]
Initializing Spring embedded WebApplicationContext
Root WebApplicationContext: initialization completed in 1234 ms
Tomcat started on port 8080 (http) with context path '/'
Started BookstoreApplication in 2.345 seconds
ログ意味
Starting BookstoreApplication using Java 25起動開始、使う Java のバージョン
Tomcat initialized with port 8080組み込み Tomcat が初期化された
Starting Servlet engineTomcat の起動
Tomcat started on port 8080待ち受け開始
Started BookstoreApplicationSpring Boot の初期化完了

問題があると、Started ... の行に到達せず、エラーログが出力されます。起動時のエラーの調べ方は トラブルシューティング: Spring Boot で扱います。

サーバーを止めるには、ターミナル右上の停止ボタン(赤い四角)をクリックします。サーバーが止まると、ポート 8080 が解放されます。

依存関係に加えた Spring Boot DevTools が、コードを保存すると自動でサーバーを再起動します。テンプレート(.html)や静的リソースの変更は、ブラウザーの再読み込みで反映されます(再起動は不要)。仕組みと注意点は付録で扱います。