このサイトには Spring に関する数千ページ以上の膨大なドキュメントがありますが、Spring Boot やその他の Spring プロジェクトを使い始めようとしている場合は、まず、この入門セクションを読むことから始めましょう。他のバージョンはバージョン別ドキュメント一覧を参照してください。このセクションでは、Spring Boot の導入とインストール手順について説明します。次に、最初の Spring Boot アプリケーションを構築する手順を説明し、その過程でいくつかの基本原則を説明します。

1. Spring Boot の導入

Spring Boot を使用すると、実行可能なスタンドアロンの本番グレードの Spring ベースアプリケーションを簡単に作成できます。Spring フレームワークプラットフォームとサードパーティライブラリを私たち独自の見解で捉えることにより、最小限の手間で開始できるようにします。多くの Spring Boot アプリケーションは、Spring 構成をほとんど必要としません。

Web アプリケーションの場合、Tomcat なしで java -jar で起動できる Tomcat 組み込みの Java Web アプリケーション jar ファイルとしてパッケージングできます。もちろん、従来の Tomcat などのサーブレットコンテナーにデプロイ可能な war ファイルを作成することもできます。

主なゴールは次のとおりです。

  • すべての Spring 開発に、非常に高速で広くアクセス可能な入門体験を提供します。

  • すぐに使用でき、要件がデフォルトと異なる場合でもすぐに対応できます。

  • 大規模なクラスのプロジェクトに共通のさまざまな非機能機能(組み込みサーバー、セキュリティ、メトリクス、ヘルスチェック、外部化された設定など)を提供します。

  • コード生成や XML 構成は一切不要です。

2. システム要件

Spring Boot 2.3.0.RELEASE には Java 8 が必要ですが、Java 14 (付属) まで互換性があります。Spring Framework 5.2.6.RELEASE 以上も必要です。

次のビルドツールのサポートがあり、デフォルトでは gradle が使用されます。

ビルドツール バージョン

Maven

3.3+

Gradle

6(6.3 以降)。5.6.x はサポートされていますが、非推奨の形式です。

2.1. サーブレットコンテナー

Spring Boot は、次の埋め込みサーブレットコンテナーをサポートがあり、デフォルトでは Tomcat が使用されます。

名前 サーブレットバージョン

Tomcat 9.0

4.0

Jetty 9.4

3.1

Undertow 2.0

4.0

Spring Boot アプリケーションを Servlet 3.1+ 互換のコンテナーにデプロイすることもできます。

3. Spring Boot のインストール

Eclipse STSIntelliJ IDEAVSCode Auto Config を使用する場合、以降に示すインストール手順は不要です。Spring Initializr クイックスタート簡単な Web 画面の作成を試してみてください。コマンドラインを使用する場合は、次のコマンドを使用して現在インストールされている Java を確認する必要があります。

$ java -version

コマンドラインで開発する場合は、以降の手順に従ってください。

3.1. Java 開発者向けのインストール手順

Spring Boot は特別なツールの統合を必要としないため、クラスパスに適切な spring-boot-*.jar ファイルを含めることで、標準 Java ライブラリと同じ方法で使用できます。また、Spring Boot アプリケーションには特別なものはないため、他の Java プログラムと同様に Spring Boot アプリケーションを実行およびデバッグできます。

Spring Boot の jar を手動でダウンロードしてプロジェクト内に配置することもできますが、依存性管理が困難になるため、通常はサポートするビルドツール(Gradle や Maven など)を使用することをお勧めします。Eclipse STS や IntelliJ IDEA のような IDE の場合は Gradle や Maven が含まれているため、IDE 付属のデフォルトのバージョンを使用する場合は、後述の Gradle や Maven のインストール不要です。また、異なるバージョンが必要な場合でも、Spring Initializr で作成した Spring Boot プロジェクトには gradlew や mvnw が含まれているため、Gradle や Maven のインストールは必要ありません。

3.1.1. Maven のインストール

Spring Boot は Apache Maven 3.3 以上と互換性があります。Maven をまだインストールしていない場合は、maven.apache.org (英語) の手順に従ってください。

多くのオペレーティングシステムでは、Maven はパッケージマネージャーを使用してインストールできます。OSX Homebrew を使用する場合は、brew install maven を試してください。Ubuntu ユーザーは sudo apt-get install maven を実行できます。Chocolatey (英語) を使用する Windows ユーザーは、昇格した(管理者)プロンプトから choco install maven を実行できます。

Spring Boot の依存関係は、org.springframework.boot groupId を使用します。通常、Maven POM ファイルは spring-boot-starter-parent プロジェクトを継承し、1 つ以上の “スターター” への依存関係を宣言します。Spring Boot は、実行可能 jar を作成するためのオプションの Maven プラグインも提供します。

Spring Boot と Maven の使用開始の詳細については、Maven プラグインのリファレンスガイドの入門セクションを参照してください。

3.1.2. Gradle のインストール

Spring Boot は Gradle 6(6.3 以降)と互換性があります。Gradle 5.6.x もサポートされていますが、このサポートは推奨されておらず、将来のリリースで削除される予定です。Gradle をまだインストールしていない場合は、gradle.org (英語) の指示に従ってください。

Spring Boot の依存関係は、org.springframework.boot group を使用して宣言できます。通常、プロジェクトは 1 つ以上の “スターター” への依存関係を宣言します。Spring Boot は、依存関係の宣言を簡素化し、実行可能な jar を作成するために使用できる便利な Gradle プラグインを提供します。

Gradle ラッパー

Gradle ラッパーは、プロジェクトをビルドする必要がある場合に Gradle を「取得」する優れた方法を提供します。これは、ビルドプロセスをブートストラップするためにコードと一緒にコミットする小さなスクリプトとライブラリです。詳細については、docs.gradle.org/current/userguide/gradle_wrapper.html (英語) を参照してください。

Spring Boot と Gradle の使用開始の詳細については、Gradle プラグインのリファレンスガイドの入門セクションを参照してください。

3.2. Spring Boot CLI のインストール

Spring Boot CLI(コマンドラインインターフェース)は、IDE なしで Spring を使用して迅速にプロトタイプを作成するために使用できるコマンドラインツールです。これにより、Groovy (英語) スクリプトを実行できます。つまり、定型コードをあまり使用せずに、使い慣れた Java のような構文を使用できます。

Spring Boot で作業するために CLI を使用する必要はありませんが、これは間違いなく、Spring アプリケーションを開発する最も迅速な方法です。

3.2.1. 手動インストール

Spring CLI ディストリビューションは、Spring ソフトウェアリポジトリからダウンロードできます。

最新のスナップショット配布 (英語) も利用可能です。

ダウンロードしたら、解凍したアーカイブの INSTALL.txt (英語) の指示に従ってください。要約すると、.zip ファイルの bin/ ディレクトリには、spring スクリプト(Windows の場合は spring.bat)があります。または、.jar ファイルで java -jar を使用できます(スクリプトは、クラスパスが正しく設定されていることを確認できます)。

3.2.2. SDKMAN! を使用したインストール

SDKMAN!(Software Development Kit Manager)は、Groovy や Spring Boot CLI など、さまざまなバイナリ SDK の複数のバージョンを管理するために使用できます。sdkman.io (英語) から SDKMAN! を取得し、次のコマンドを使用して Spring Boot をインストールします。

$ sdk install springboot
$ spring --version
Spring Boot v2.3.0.RELEASE

CLI の機能を開発し、作成したバージョンに簡単にアクセスしたい場合は、次のコマンドを使用します。

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.3.0.RELEASE-bin/spring-2.3.0.RELEASE/
$ sdk default springboot dev
$ spring --version
Spring CLI v2.3.0.RELEASE

上記の手順では、dev インスタンスと呼ばれる spring のローカルインスタンスをインストールします。ターゲットビルドの場所を指すため、Spring Boot を再構築するたびに、spring は最新の状態になります。

次のコマンドを実行して確認できます。

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 2.3.0.RELEASE

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

3.2.3. OSX Homebrew のインストール

Mac で Homebrew (英語) を使用している場合、次のコマンドを使用して Spring Boot CLI をインストールできます。

$ brew tap pivotal/tap
$ brew install springboot

Homebrew は /usr/local/bin に spring をインストールします。

formula が表示されない場合、brew のインストールが古くなっている可能性があります。その場合は、brew update を実行して再試行してください。

3.2.4. MacPorts のインストール

Mac で MacPorts (英語) を使用している場合、次のコマンドを使用して Spring Boot CLI をインストールできます。

$ sudo port install spring-boot-cli

3.2.5. コマンドライン補完

Spring Boot CLI には、BASH [Wikipedia] および zsh [Wikipedia] シェルのコマンド補完を提供するスクリプトが含まれています。任意のシェルでスクリプト(spring とも呼ばれる)を source するか、個人またはシステム全体の bash 完了初期化に配置できます。Debian システムでは、システム全体のスクリプトは /shell-completion/bash にあり、そのディレクトリ内のすべてのスクリプトは、新しいシェルの起動時に実行されます。例: SDKMAN! を使用してインストールした場合にスクリプトを手動で実行するには、次のコマンドを使用します。

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab  help  jar  run  test  version
Homebrew または MacPorts を使用して Spring Boot CLI をインストールすると、コマンドライン補完スクリプトがシェルに自動的に登録されます。

3.2.6. Windows Scoop のインストール

Windows で Scoop (英語) を使用している場合、次のコマンドを使用して Spring Boot CLI をインストールできます。

> scoop bucket add extras
> scoop install springboot

Scoop は ~/scoop/apps/springboot/current/bin に spring をインストールします。

アプリのマニフェストが表示されない場合は、scoop のインストールが古くなっている可能性があります。その場合は、scoop update を実行して再試行してください。

3.2.7. クイックスタート Spring CLI の例

次の Web アプリケーションを使用して、インストールをテストできます。開始するには、次のように app.groovy というファイルを作成します。

@RestController
class ThisWillActuallyRun {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }

}

次に、次のようにシェルから実行します。

$ spring run app.groovy
依存関係がダウンロードされるため、アプリケーションの最初の実行は遅くなります。後続の実行ははるかに高速です。

お気に入りの Web ブラウザーで localhost:8080 を開きます。次の出力が表示されます。

Hello World!

3.3. Spring Boot の以前のバージョンからのアップグレード

Spring Boot の 1.x リリースからバージョンアップする場合、詳細なバージョンアップ手順を提供するプロジェクト wiki の「移行ガイド」 [GitHub] (英語) を確認してください。各リリースの「注目すべき新機能」のリストについては、「リリースノート」 [GitHub] (英語) も確認してください。

新しい機能リリースにアップグレードすると、一部のプロパティの名前が変更されたり削除されたりすることがあります。Spring Boot は、アプリケーションの環境を分析し、起動時に診断を表示するだけでなく、実行時にプロパティを一時的に移行してくれる方法を提供します。その機能を有効にするには、以下の依存関係をプロジェクトに追加してください。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>
@PropertySource を使用する場合など、環境に遅延追加されたプロパティは考慮されません。
移行が完了したら、プロジェクトの依存関係からこのモジュールを削除してください。

既存の CLI をアップグレードするには、適切なパッケージマネージャーコマンド(たとえば brew upgrade)を使用します。CLI を手動でインストールした場合は、標準的な手順に従ってください。古い参照を削除するために、忘れずに PATH 環境変数を更新してください。

4. 初めての Spring Boot アプリケーションの開発

このセクションでは、Spring Boot の主要な機能のいくつかを強調するシンプルな "Hello World!" Web アプリケーションの開発方法について説明します。ほとんどの IDE でサポートされているため、Maven を使用してこのプロジェクトを構築します。

spring.io Web サイトには、Spring Boot を使用する多くの「入門」ガイドが含まれています。特定の問題を解決する必要がある場合は、まずそこを確認してください。

Eclipse STSIntelliJ IDEA のプロジェクト作成ウィザード (Spring Initializr) の依存関係から "Spring Web" スターターを選択することにより、以下のステップをショートカットできます。これにより、新しいプロジェクト構造が 生成されるため、すぐにコーディングを開始できます。詳細については、Spring Initializr を確認してください。

開始する前に、ターミナルを開いて次のコマンドを実行し、Java および Maven の有効なバージョンがインストールされていることを確認します。

$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
このサンプルは、独自のディレクトリに作成する必要があります。以降の手順では、適切なディレクトリを作成し、それが現在のディレクトリであると想定しています。

4.1. POM の作成

まず、Maven pom.xml ファイルを作成する必要があります。pom.xml は、プロジェクトのビルドに使用されるレシピです。お気に入りのテキストエディターを開き、次を追加します。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
    </parent>

    <description/>
    <developers>
        <developer/>
    </developers>
    <licenses>
        <license/>
    </licenses>
    <scm>
        <url/>
    </scm>
    <url/>

    <!-- Additional lines to be added here... -->

</project>

上記のリストは、機能するビルドを提供します。mvn package を実行してテストできます(現時点では、「jar は空になります。含めるコンテンツは含まれていません!」という警告は無視できます)。

この時点で、プロジェクトを IDE にインポートできます(ほとんどの最新の Java IDE には Maven の組み込みサポートが含まれています)。簡単にするために、この例では引き続きプレーンテキストエディターを使用します。

4.2. クラスパスの依存関係を追加する

Spring Boot には、クラスパスに jar を追加できるいくつかの「スターター」が用意されています。スモークテスト用アプリケーションは、POM の parent セクションにある spring-boot-starter-parent を使用します。spring-boot-starter-parent は、有用な Maven デフォルトを提供する特別なスタータです。また、dependency-management セクションも用意されているため、特別な依存関係の version タグを省略できます。

その他の「スターター」は、特定のタイプのアプリケーションを開発するときに必要になる可能性のある依存関係を提供します。Web アプリケーションを開発しているため、spring-boot-starter-web 依存関係を追加します。その前に、次のコマンドを実行して、現在あるものを確認できます。

$ mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

mvn dependency:tree コマンドは、プロジェクトの依存関係のツリー表現を出力します。spring-boot-starter-parent 自体には依存関係がないことがわかります。必要な依存関係を追加するには、pom.xml を編集し、parent セクションのすぐ下に spring-boot-starter-web 依存関係を追加します。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

mvn dependency:tree を再度実行すると、Tomcat Web サーバーや Spring Boot 自体を含む、多くの追加の依存関係があることがわかります。

4.3. コードの作成

アプリケーションを完成させるには、単一の Java ファイルを作成する必要があります。デフォルトでは、Maven は src/main/java からソースをコンパイルするため、そのディレクトリ構造を作成してから、src/main/java/Example.java という名前のファイルを追加して、次のコードを含める必要があります。

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Example.class, args);
    }

}

ここには多くのコードはありませんが、非常に多くのことが行われています。次のいくつかのセクションで重要な部分を順に説明します。

4.3.1. @RestController および @RequestMapping アノテーション

Example クラスの最初のアノテーションは @RestController です。これはステレオタイプアノテーションとして知られています。コードを読んでいる人や、クラスが特定のロールを果たす Spring のヒントを提供します。この場合、クラスは Web @Controller であるため、Spring は受信 Web リクエストを処理するときにそれを考慮します。

@RequestMapping アノテーションは、「ルーティング」情報を提供します。/ パスを持つ HTTP リクエストは home メソッドにマッピングする必要があることを Spring に伝えます。@RestController アノテーションは、結果の文字列を呼び出し元に直接返すように Spring に指示します。

@RestController および @RequestMapping アノテーションは Spring MVC アノテーションです (Spring Boot に固有ではありません)。詳細については、Spring リファレンスドキュメントの MVC セクションを参照してください。

4.3.2. @EnableAutoConfiguration アノテーション

2 番目のクラスレベルのアノテーションは @EnableAutoConfiguration です。このアノテーションは、追加した jar 依存関係に基づいて、Spring Boot に Spring を構成する方法を「推測」するように指示します。spring-boot-starter-web は Tomcat と Spring MVC を追加したため、自動構成では Web アプリケーションを開発していると想定し、それに応じて Spring をセットアップします。

スターターと自動構成

自動構成は「スターター」とうまく機能するように設計されていますが、2 つの概念は直接結びついていません。スターター以外の jar 依存関係を自由に選択できます。Spring Boot は、アプリケーションを自動構成するために最善を尽くしています。

4.3.3. "main" メソッド

アプリケーションの最後の部分は、main メソッドです。これは、アプリケーションエントリポイントの Java 規則に従う単なる標準的なメソッドです。メインメソッドは、run を呼び出して Spring Boot の SpringApplication クラスに委譲します。SpringApplication はアプリケーションをブートストラップし、Spring を起動します。Spring は、自動構成された Tomcat Web サーバーを起動します。Example.class を引数として run メソッドに渡して、SpringApplication がプライマリ Spring コンポーネントであることを伝える必要があります。args 配列もコマンドライン引数を公開するためにパススルーされます。

4.4. サンプルの実行

この時点で、アプリケーションは動作するはずです。spring-boot-starter-parent POM を使用したため、アプリケーションを開始するために使用できる有用な run ゴールがあります。ルートプロジェクトディレクトリから mvn spring-boot:run と入力して、アプリケーションを起動します。次のような出力が表示されます。

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.3.0.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

Web ブラウザーを localhost:8080 で開くと、次の出力が表示されるはずです。

Hello World!

アプリケーションを正常に終了するには、ctrl-c を押します。

4.5. 実行可能 Jar の作成

実例を実行できる完全に自己完結型の実行可能 jar ファイルを作成することで、この例を終了します。実行可能 jar( "fat jar" と呼ばれることもあります)は、コードの実行に必要なすべての jar 依存関係とともに、コンパイルされたクラスを含むアーカイブです。

実行可能 jar および Java

Java は、ネストされた jar ファイル(jar 内に含まれる jar ファイル)をロードする標準的な方法を提供しません。自己完結タイプのアプリケーションを配布しようとしている場合、これは問題になる可能性があります。

この問題を解決するために、多くの開発者は "uber" jar を使用します。uber jar は、すべてのアプリケーションの依存関係からのすべてのクラスを単一のアーカイブにパッケージ化します。このアプローチの問題は、アプリケーションにどのライブラリが含まれているかを確認しにくくなることです。また、複数の jar で同じファイル名(ただし、異なるコンテンツ)が使用されている場合、問題が発生する可能性があります。

Spring Boot は異なるアプローチを採用しており、実際に jar を直接ネストできます。

実行可能な jar を作成するには、spring-boot-maven-plugin を pom.xml に追加する必要があります。これを行うには、dependencies セクションのすぐ下に次の行を挿入します。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
spring-boot-starter-parent POM には、repackage ゴールをバインドする <executions> 構成が含まれています。親 POM を使用しない場合、この構成を自分で宣言する必要があります。詳細については、プラグインのドキュメントを参照してください。

次のように、pom.xml を保存し、コマンドラインから mvn package を実行します。

$ mvn package

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.3.0.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

target ディレクトリを見ると、myproject-0.0.1-SNAPSHOT.jar が表示されているはずです。ファイルのサイズは約 10 MB でなければなりません。内部を覗きたい場合は、次のように jar tvf を使用できます。

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

また、myproject-0.0.1-SNAPSHOT.jar.original という名前のはるかに小さいファイルが target ディレクトリに表示されるはずです。これは、Spring Boot によって再パッケージ化される前に Maven が作成した元の jar ファイルです。

そのアプリケーションを実行するには、次のように java -jar コマンドを使用します。

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.3.0.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

前と同様に、アプリケーションを終了するには、ctrl-c を押します。

5. 次のステップ

このセクションでいくつかの Spring Boot の基本を説明し、独自のアプリケーションを作成する方法について説明しました。タスク指向の開発者なら、spring.io にジャンプして、特定の「Spring でそれを行うには?」を解決するための、入門ガイドをチェックしてみてください。また、Spring Boot 固有の "使い方" リファレンスドキュメントもあります。

それ以外の場合、次の論理的ステップ using-spring-boot.html に進みましょう。急いでいる場合は Spring Boot の機能を先に読んでしまうのも良いでしょう。