4.Spring Boot 入門
学習目標
- 依存関係と Maven の役割を説明できる
- Spring Boot が提供する自動設定・スターター・組み込みサーバーを説明できる
- Spring Initializr で依存関係を選んでプロジェクトを作成できる
- 生成されたプロジェクトの主要ファイル(メインクラス・
pom.xml・application.properties)の役割を説明できる @SpringBootApplicationが何をしているかを説明できる- サーバーを起動し、起動ログから状態を読み取れる
1. 依存関係
Section titled “1. 依存関係”Web アプリケーションは、サーブレットの API、Tomcat、データベースのドライバーなど、多くの既成のコードを組み合わせて作ります。
1-1. ライブラリと依存関係
Section titled “1-1. ライブラリと依存関係”他者が書いた再利用可能なコードのまとまりを ライブラリー と呼びます。プロジェクトが使うライブラリーを 依存関係(dependency)と呼びます。「このプロジェクトはそのライブラリーに依存している」という関係を表します。使う依存関係は、プロジェクトの pom.xml に記述します。
1-2. Maven による取り込み
Section titled “1-2. Maven による取り込み”pom.xml に書いた依存関係を実際に取り込むのが、ビルドツールの Maven です。Maven は pom.xml を読み、記述されたライブラリーを配布元からダウンロードして、プロジェクトに組み込みます。
組み込まれたライブラリーのクラスは、自分のコードから import して呼び出せます。たとえば、MySQL のドライバーを追加すれば、DriverManager で MySQL に接続できるようになります。
2. Spring Boot
Section titled “2. Spring Boot”Spring Boot は、Spring の上に構築された、Web アプリケーションをすぐに開発できるフレームワークです。Spring 本体は、Web アプリケーションに必要な機能(リクエスト処理、データベースアクセス、トランザクション、セキュリティなど)を細かい部品として提供するフレームワークですが、使うには大量の設定ファイルや初期化コードが必要でした。Spring Boot は、Spring の上に 自動設定、スターター、組み込みサーバー の 3 つの仕組みを加え、設定をほとんど書かずに動くアプリケーションを作れるようにしたものです。
2-1. 自動設定
Section titled “2-1. 自動設定”自動設定(auto-configuration)は、プロジェクトに追加した依存関係を見て、必要な設定を Spring Boot が自動で行う仕組みです。
たとえば、データベースに接続するライブラリーを追加すると、Spring Boot はそれを検知し、データベース接続に必要な部品を自動で組み立てます。設定ファイルに「データベース接続用のクラスを使う」と明示的に書く必要はありません。
設定が要らないわけではなく、標準的な設定を Spring Boot が代わりに行うのが自動設定です。標準と異なる設定が必要なときだけ、自分で設定を書きます。
2-2. スターター
Section titled “2-2. スターター”スターター(starter)は、関連する依存関係をまとめた依存パッケージです。spring-boot-starter- で始まる名前で、用途ごとに用意されています。
| スターター | 用途 |
|---|---|
spring-boot-starter-web | Web アプリケーション(リクエスト処理、組み込みサーバー) |
spring-boot-starter-thymeleaf | Thymeleaf テンプレートエンジン |
spring-boot-starter-jdbc | JDBC でのデータベースアクセス |
spring-boot-starter-web を依存関係に追加すると、Web アプリケーションに必要な複数のライブラリー(Spring MVC、組み込み Tomcat、JSON 変換ライブラリーなど)がまとめて取り込まれます。個別に依存関係を列挙する手間がなくなります。
2-3. 組み込みサーバー
Section titled “2-3. 組み込みサーバー”Java の Web アプリケーションを動かすには、Tomcat のような Web サーバー(Servlet コンテナー)が必要です。spring-boot-starter-web には、組み込みサーバー として Tomcat が含まれます。
組み込みサーバーは、アプリケーションと一体で動く Web サーバーです。サーバーを別途インストールしてアプリケーションをデプロイする必要はなく、アプリケーションを main メソッドから起動するだけで、内部で Tomcat も起動し、リクエストを受け付けられます。
3. プロジェクトの作成
Section titled “3. プロジェクトの作成”Spring Boot で書店アプリを作るために、Servlet を動かしていた hello プロジェクトとは別に、新しいプロジェクト bookstore を作成します。
3-1. Spring Initializr での生成
Section titled “3-1. Spring Initializr での生成”-
Spring Initializr を開く
コマンドパレット(
Ctrl + Shift + P)でSpring Initializr: Create a Maven Projectを選びます。 -
プロジェクトの設定を選ぶ
Spring Boot のバージョン(
(SNAPSHOT)の付かない最新版)、グループ名、アーティファクト名、パッケージング形式、Java のバージョンを順に選びます。項目 値 Group com.exampleArtifact bookstorePackaging JarJava 25 Groupはパッケージの先頭、Artifactはプロジェクト名になり、生成されるパッケージはcom.example.bookstoreです。 -
依存関係を追加する
依存関係の選択画面で、次の依存関係を選びます。
依存関係 役割 Spring Web リクエストを受け付けてレスポンスを返す Web アプリケーションの基本機能と、組み込み Tomcat Thymeleaf HTML を画面として返すテンプレートエンジン MySQL Driver MySQL データベースに接続するためのドライバー Spring Boot DevTools コードやテンプレートの変更を反映する開発時用のツール Spring Webを追加すると、Spring Boot がそれを検知して、Web アプリケーションに必要な設定を自動で行います。Thymeleafを追加すると、テンプレートの読み込みと描画を自動で構成します。選択後、生成先のフォルダーを指定し、生成されたプロジェクトを開いて作業します。
3-2. プロジェクトの構成
Section titled “3-2. プロジェクトの構成”生成されたプロジェクトの主なフォルダーとファイルです。
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.xml | Maven の設定ファイル。依存関係や Java のバージョンが書かれている |
application.properties | アプリケーションの設定を書くファイル。ポート番号やデータベース接続情報などをまとめる |
templates/ | HTML テンプレートを置くフォルダー |
static/ | CSS・画像など、ブラウザーから直接読み込まれるファイルを置くフォルダー |
src/test/ | テストコードを置くフォルダー |
3-3. pom.xml の中身
Section titled “3-3. pom.xml の中身”pom.xml には、Initializr で選択したスターターが <dependencies> に並びます。
<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-web と spring-boot-starter-thymeleaf がスターターです。バージョン番号は書かれておらず、Spring Boot 本体のバージョンに合わせて自動で決まります。mysql-connector-j は MySQL のドライバー、spring-boot-devtools はコードやテンプレートの変更を反映する開発時用のツール、spring-boot-starter-test はテストを書くための依存関係です。
pom.xml を直接編集して、依存関係を後から追加・削除することもできます。
4. メインクラス
Section titled “4. メインクラス”Spring Boot のアプリケーションは、メインクラスの main メソッドから起動します。
package com.example.bookstore;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplicationpublic class BookstoreApplication { public static void main(String[] args) { SpringApplication.run(BookstoreApplication.class, args); }}SpringApplication.run が、Spring Boot を起動します。引数に渡したクラスを起点に、自動設定とコンポーネントスキャンが行われます。
4-1. @SpringBootApplication の役割
Section titled “4-1. @SpringBootApplication の役割”メインクラスに付いている @SpringBootApplication は、次の 3 つを束ねたアノテーションです。
| 内訳 | 役割 |
|---|---|
@EnableAutoConfiguration | 依存関係を見て、Spring Boot の自動設定を有効にする |
@ComponentScan | メインクラスのパッケージとサブパッケージから、@Controller などのクラスを自動で見つけて登録する |
@SpringBootConfiguration | このクラス自体を、Spring の設定クラスとして扱う |
これら 3 つは個別にも書くことができますが、Spring Boot のアプリケーションではほぼ常にセットで使うため、@SpringBootApplication 1 つにまとめられています。
@ComponentScan の対象は、メインクラスのパッケージとサブパッケージに限られます。@Controller を付けたクラスを別のパッケージに置くと、自動で見つからず、リクエストが届きません。
5. 起動と動作確認
Section titled “5. 起動と動作確認”メインクラスの 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 で扱います。
5-1. 起動ログの読み方
Section titled “5-1. 起動ログの読み方”起動時のログには、Spring Boot が何をしたかが順に出力されます。
Starting BookstoreApplication using Java 25No 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 WebApplicationContextRoot WebApplicationContext: initialization completed in 1234 msTomcat 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 engine | Tomcat の起動 |
Tomcat started on port 8080 | 待ち受け開始 |
Started BookstoreApplication | Spring Boot の初期化完了 |
問題があると、Started ... の行に到達せず、エラーログが出力されます。起動時のエラーの調べ方は トラブルシューティング: Spring Boot で扱います。
5-2. サーバーの停止
Section titled “5-2. サーバーの停止”サーバーを止めるには、ターミナル右上の停止ボタン(赤い四角)をクリックします。サーバーが止まると、ポート 8080 が解放されます。
依存関係に加えた Spring Boot DevTools が、コードを保存すると自動でサーバーを再起動します。テンプレート(.html)や静的リソースの変更は、ブラウザーの再読み込みで反映されます(再起動は不要)。仕組みと注意点は付録で扱います。