Spring Boot や「Spring」全般を使い始めようとしている場合は、この入門セクションを読むことから始めましょう。基本的な「何?」、「どのように?」、「なぜ?」といった質問に回答します。Spring Boot の導入とインストール手順も含まれています。次に、入門用に最初の Spring Boot アプリケーションを構築する方法、いくつかの主要な原則について説明します。

1. Spring Boot の紹介

Spring Boot を使用すると、実行可能なスタンドアロンの本番グレードの Spring ベースのアプリケーションを作成できます。Spring プラットフォームとサードパーティのライブラリについて意見をまとめているため、最小限の手間で始めることができます。ほとんどの Spring Boot アプリケーションは、Spring 構成をほとんど必要としません。

Spring Boot を使用して、java -jar または従来の war デプロイを使用して起動できる Java アプリケーションを作成できます。「Spring スクリプト」を実行するコマンドラインツールも提供しています。

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

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

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

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

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

2. システム要件

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

次のビルドツールに対して明示的なビルドサポートが提供されます。

ビルドツール バージョン

Maven

3.3+

Gradle

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

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

Spring Boot は、次の埋め込みサーブレットコンテナーをサポートしています。

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

Tomcat 9.0

4.0

Jetty 9.4

3.1

Undertow 2.0

4.0

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

3. Spring Boot のインストール

Spring Boot は、「クラシック」な Java 開発ツールで使用するか、コマンドラインツールとしてインストールできます。いずれにしても、Java SDK v1.8 (英語) 以上が必要です。開始する前に、次のコマンドを使用して現在の Java インストールを確認する必要があります。

$ java -version

Java 開発を初めて使用する場合、または Spring Boot を実験する場合は、最初に Spring Boot CLI(コマンドラインインターフェース)を試してください。それ以外の場合は、「クラシック」インストール手順を参照してください。

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

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

Spring Boot jar をコピーできます、一般的に、依存関係管理をサポートするビルドツール(Maven や Gradle など)を使用することをお勧めします。

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.bootgroupId を使用します。通常、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.bootgroup を使用して宣言できます。通常、プロジェクトは 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(コマンドラインインターフェース)は、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.2.RELEASE

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

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

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

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

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 2.3.2.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 は、spring から /usr/local/bin をインストールします。

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 (英語) および zsh (英語) シェルのコマンド補完を提供するスクリプトが含まれています。任意のシェルでスクリプト(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 は、spring から ~/scoop/apps/springboot/current/bin をインストールします。

アプリのマニフェストが表示されない場合、スクープのインストールが古くなっている可能性があります。その場合は、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 アプリケーションの開発

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

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

start.spring.io (英語) に移動し、依存関係サーチャーから「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.2.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 メソッドです。これは、アプリケーションのエントリポイントに関する Java の規則に従う標準のメソッドです。メインのメソッドは run を呼び出して Spring Boot の SpringApplication クラスに委譲します。SpringApplication はアプリケーションをブートストラップし、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.2.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.2.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.2.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 の機能について読むこともできます。

Unofficial Translation by spring.pleiades.io. See the original content.