Spring Boot や「Spring」全般を使い始めようとしている場合は、この入門セクションを読むことから始めましょう。基本的な「何? 」、「どのように? 」、「なぜ? 」といった質問に回答します。Spring Boot の導入とインストール手順も含まれています。次に、入門用に最初の Spring Boot アプリケーションを構築する方法、いくつかの主要な原則について説明します。
1. Spring Boot の紹介
Spring Boot を使用すると、実行可能なスタンドアロンの本番レベルの Spring ベースのアプリケーションを作成できます。Spring プラットフォームとサードパーティのライブラリに対して、Spring Boot の規約に従うことにより、最小限の手間で始めることができます。ほとんどの Spring Boot アプリケーションは、Spring の設定が不要です。
Spring Boot を使用して、java -jar
または従来の war デプロイを使用して起動できる Java アプリケーションを作成できます。「Spring スクリプト」を実行するコマンドラインツールも提供しています。
主なゴールは次のとおりです。
すべての Spring 開発に、非常に高速で広くアクセス可能な入門体験を提供します。
すぐに使用でき、要件がデフォルトと異なる場合でもすぐに対応できます。
大規模なクラスのプロジェクトに共通のさまざまな非機能機能(組み込みサーバー、セキュリティ、メトリクス、ヘルスチェック、外部化された構成など)を提供します。
コード生成や XML 構成は一切不要です。
2. システム要件
Spring Boot 2.4.4 には Java 8 (英語) が必要で、Java 16 まで互換性があります。Spring Framework 5.3.5 以上も必要です。
次のビルドツールに対して明示的なビルドサポートが提供されます。Spring Boot 2.3 以降、Spring Framework だけでなく Spring Boot のビルドも Maven ではなく Gradle が使用 (英語) されるようになりました。
ビルドツール | バージョン |
---|---|
3.3+ | |
6(6.3 以降)。5.6.x はサポートされていますが、非推奨の形式です。 |
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 は特別なツールの統合を必要としないため、Eclipse や IntelliJ IDEA のような任意の 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.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 プラグインを提供します。
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.4.4
CLI の機能を開発し、ビルドしたバージョンにアクセスする場合は、次のコマンドを使用します。
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.4.4-bin/spring-2.4.4/ $ sdk default springboot dev $ spring --version Spring CLI v2.4.4
上記の手順では、dev
インスタンスと呼ばれる spring
のローカルインスタンスをインストールします。ターゲットビルドの場所を指すため、Spring Boot を再構築するたびに、spring
は最新の状態になります。
次のコマンドを実行して確認できます。
$ sdk ls springboot ================================================================================ Available Springboot Versions ================================================================================ > + dev * 2.4.4 ================================================================================ + - local version * - installed > - currently in use ================================================================================
3.2.3. OSX Homebrew のインストール
Mac で Homebrew (英語) を使用している場合、次のコマンドを使用して Spring Boot CLI をインストールできます。
$ brew tap spring-io/tap $ brew install spring-boot
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 (英語) および 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 は ~/scoop/apps/springboot/current/bin
に spring
をインストールします。
アプリのマニフェストが表示されない場合、スクープのインストールが古くなっている可能性があります。その場合は、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 を使用しています。
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.4.4</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 をセットアップします。
4.3.3. 「main」メソッド
アプリケーションの最後の部分は 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.4.4) ....... . . . ....... . . . (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 を作成するには、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.4.4: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.4.4) ....... . . . ....... . . . (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 の機能について読むこともできます。