Spring BootでHello world¶
- 目次
- Spring BootでHello world
はじめに¶
Spring Bootを利用して Spring Framework の Hello world プログラムを作成します。
Hello worldプログラムは、そのプログラミング言語の開発・実行環境が正しく動作することを非常に短いコードで実装して確認するために使われます。
Hello world プログラムの種類¶
Spring Bootで、次の種類の簡潔なコードを記述した Hello world プログラムを作成し実行します。
- コマンドライン版の Hello world プログラムで、アプリケーションクラス HelloApplication.java と、コマンドライン環境で起動時にコマンドライン引数を受け取り実行する HelloRunner.java で構成しコマンドラインインタフェース上にHello worldメッセージを表示します。
- REST APIでクライアントにJSONではなく単純な文字列 Hello world を返却するプログラム。アプリケーションクラス HelloApplication.java と RESTコントローラークラス HelloController.java で構成します。
- Spring MVCで Webブラウザに Hello world を返却するプログラム。アプリケーションクラス HelloApplication.java、コントローラークラス HelloController と Thymeleafをテンプレートエンジンに使ったビュー hello.html で構成します。
Hello world プログラムでは、本来は1つのソースファイルだけで構成したいところです。しかし、アプリケーションクラス HelloApplication に無理やりコマンドラインランナーやコントローラー機能を付けてしまうとかえって Spring Boot の理解の妨げになってしまいそうなので本記事では、複数のファイルで構成しました。
ビルド環境¶
今回は、インターネットに接続された環境を前提とし、ビルドツールに Gradle を使用し、JDKをインストールした環境で実行します。
コードの編集は、記述するコードが短いので IDE は必ずしも必要とせず、汎用のエディタで十分です。
コマンドライン版 Hello world¶
ビルド・実行環境¶
| JDK | JDK 25 |
| Spring Boot | 4.0.0 |
| Gradle | 9.2.1 |
プロジェクトディレクトリ¶
プロジェクトディレクトリを作成し、Gradleの設定ファイルを記述します。
springboot % mkdir hello_cli
springboot % cd hello_cli
hello_cli %
hello_cli
+- build.gradle.kts
+- src
+- main
+- java
+- com/torutk/hello
+- HelloApplication.java
+- cli
+- HelloRunner.java
build.gradle.kts の記述¶
plugins {
java
id("org.springframework.boot") version "4.0.0"
id("io.spring.dependency-management") version "1.1.7"
}
group = "com.torutk"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
}
HelloApplication の記述¶
SsssspringBootアプリケーションでは、mainメソッドを持つアプリケーションの入り口となるメインクラスを定義します。
package com.torutk.hello;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
- クラスに @SpringBootApplicationアノテーションを指定します。このアノテーションは、次のアノテーションを含みます。
- @SpringBootConfigurationアノテーション:Javaコンフィグクラスを指定するアノテーション
- @EnableAutoConfigurationアノテーション:自動設定を有効
- @ComponentScanアノテーション:@Componentアノテーションを付与したクラスをBeanとして登録
- メインメソッドの中で、SpringApplicationを呼び出し、Spring Frameworkを起動します。
コンポーネントスキャンは、このクラスを配置したパッケージとその下のパッケージがスキャン対象となるので、このクラスはアプリケーションのトップ階層のパッケージに配置します。
HelloRunner の記述¶
Spring Bootでは、アプリケーション起動時にコマンドライン引数を受け取って処理をするための CommandLineRunner と ApplicationRunner の2つのインタフェースが提供されています。違いは、受け取るコマンドライン引数がString配列である CommandLineRunner と、高度なコマンドライン解析ができる ApplicationRunner とになります。
今回は、コマンドライン引数の解析は行いませんが、今後使う可能性の高い ApplicationRunner インタフェースを実装して作成します。
package com.torutk.hello.cli;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.ApplicationArguments;
import org.springframework.stereotype.Component;
@Component
public class HelloRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
IO.println("Hello, world.");
}
}
- クラスに @Component アノテーションを付与し、Spring にインスタンス化して Springコンテナ管理下に入れます。
- ApplicationRunner インタフェースを実装し、runメソッドをオーバーライドします。
- SpringBoot アプリケーション起動時に、Springコンテナ管理下にある ApplicationRunner インスタンスのrunメソッドが実行されます。
複数の ApplicationRunner/CommandLineRunner インスタンスがあると、全てが実行されます。
Gradleの準備¶
gradle wrapper を実行します。
hello_cli % gradle wrapper :
ビルドと実行¶
hello_cli % ./gradlew bootRun > Task :bootRun . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v4.0.0) :(中略) Hello, world BUILD SUCCESSFUL in 1s
REST API 版 Hello world¶
REST API を使用した Hello world Webアプリケーションを作成します。
ビルド・実行環境¶
| JDK | JDK 25 |
| Spring Boot | 4.0.0 |
| Gradle | 9.2.1 |
プロジェクトディレクトリ¶
プロジェクトディレクトリを作成し、Gradleの設定ファイルを記述します。
springboot % mkdir hello_rest
springboot % cd hello_rest
hello_rest %
hello_rest
+- build.gradle.kts
+- src
+- main
+- java
+- com/torutk/hello
+- HelloApplication.java
+- HelloController.java
build.gradle.kts の記述¶
plugins {
java
id("org.springframework.boot") version "4.0.0"
id("io.spring.dependency-management") version "1.1.7"
}
group = "com.torutk"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-webmvc")
}
HelloApplication.java¶
コマンドライン版とコードは全く同じとなります。
HelloController.java¶
package com.torutk.hello;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RestController
public class HelloController {
@GetMapping("/")
public String home() {
return "Hello, world.";
}
}
REST APIの処理を実行するコントローラーです。@RestController アノテーションを付与し、HTTP GETメソッドで / にアクセスすると homeメソッドを実行するように@GetMappingアノテーションを設定します。
RestControllerは、HTML画面ではなく直接データをクライアントに返すので、戻り値に返すデータを指定します。
@RestControllerアノテーションは、@Controllerと@ResponseBodyの合成となっているので、@Controller と @ResponseBody を付与したクラスでも同じ動きをすることができます。
Gradleの準備¶
hello_rest % gradle wrapper
ビルド・実行¶
hello_rest % ./gradlew bootRun : 2025-12-17T00:54:14.253+09:00 INFO 20437 --- [main] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
メッセージにあるポート8080にブラウザから接続します。

Hello, world.のメッセージが表示されます。
Webアプリケーション版¶
Spring MVC と テンプレートエンジンに Thymeleaf を使用したHello Worldメッセージを表示するWebプログラムを作成します。
| リクエスト | 処理するコントローラ | 処理後に表示するビュー |
|---|---|---|
| GET / | HelloController | index.html |
開発環境¶
| JDK | JDK 25 |
| Spring Boot | 4.0.0 |
| Gradle | 9.2.1 |
プロジェクトのディレクトリ¶
プロジェクトディレクトリを作成し、Gradleの設定ファイルを記述します。
work $ mkdir hello_mvc
work $ cd hello_mvc
hello_mvc $
hello_mvc
+- build.gradle.kts
+- src/
+- main/
+- java/
| +- com/torutk/hello
| +- HelloApplication.java
| +- HelloController.java
+- resources/
+- templates/
+- hello.html
build.gradle.kts の記述¶
Gradleのビルド定義 build.gradle.kts を記述します。
plugins {
java
id("org.springframework.boot") version "4.0.0"
id("io.spring.dependency-management") version "1.1.7"
}
group = "com.torutk.hello"
version = "0.0.1-SNAPSHOT"
tasks.compileJava {
options.release = 25
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-webmvc")
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
}
コマンドライン版との違いは次です。
- ソース・ターゲットのバージョン指定方法を変更👉GradleのJavaバージョン指定
- dependenciesには、Spring MVCを使用するため、spring-boot-starter-webmvc を指定
- 注)Spring Boot 4.0.0 から、Sprint MVCの依存名が spring-boot-starter-web から spring-boot-starter-webmvc に変更になりました。(Deprecated扱い)
- dependenciesに、テンプレートエンジン Thymeleaf を使用するため、spring-boot-starter-thymeleaf を指定
gradle wrapperを実行¶
build.gradle.ktsを記述したら、必要な gradle wrapperを生成します。
hello_mvc $ gradle wrapper
:
HelloApplication¶
アプリケーションのメインクラスを記述します。コマンドライン版 HelloApplication.java と同じです。
HelloController¶
コントローラクラス
package com.torutk.hello;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/")
public String home() {
return "hello";
}
}
- Spring MVCを使うアプリケーションでは、コントローラとして振る舞うクラスに @Controller アノテーションを指定
- リクエストを処理するメソッド home を記述、このメソッドには
RequestMapping アノテーションを付与しURLのリクエストパス("/"@)を指定 - リクエストに対応する画面(レスポンス)を表示するThymeleaf HTMLファイルのビュー名(hello)を戻り値として返却
hello.html¶
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello, world</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<p>Hello, world</p>
</body>
</html>
- Thymeleaf HTMLテンプレートエンジンのコードは、
src/main/resources/templates/に置くのが Spring Frameworkの規定です。 - html要素のxmlns:th は、最近の HTML Living standard では非推奨ですが、開発ツールへのヒントとして使用されるので、Thymeleafのドキュメントではxml:thが記載されています。
実行¶
gradle の bootRunタスクを実行すると、コンパイル後実行されます。
hello_mvc $ ./gradlew bootRun
:
2025-03-25T01:21:04.773+09:00 INFO 63711 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
:
ブラウザで8080ポートにアクセスするとHello Worldのメッセージが表示されます。

Webアプリケーション(Initializr)¶
Spring Initializr Webサービスを利用してプロジェクトを生成し、RESTコントローラによるWeb版 Hello world プログラムを作成します。
プロジェクトの生成¶
主要なIDEでは、Spring Bootプロジェクトの生成メニューを用意していますが、生成には Spring Initializr Webサービスを呼び出しています。
手動で https://start.spring.io にアクセスして設定を指定してプロジェクトの雛形を取得することもできます。Webブラウザでアクセスし必要な設定を記述します。

[GENERATE]ボタンをクリックすると、指定した条件で生成したプロジェクトがzip形式でダウンロードされます。
プロジェクトのディレクトリツリー¶
├── build.gradle.kts
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── HELP.md
├── settings.gradle.kts
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── torutk
│ │ └── hello
│ │ └── HelloApplication.java
│ └── resources
│ └── application.properties
└── test
└── java
└── com
└── torutk
└── hello
└── HelloApplicationTests.java
ビルド定義ファイル¶
- build.gradle.kts
plugins {
java
id("org.springframework.boot") version "3.5.6"
id("io.spring.dependency-management") version "1.1.7"
}
group = "com.torutk"
version = "0.0.1-SNAPSHOT"
description = "Demo project for Spring Boot"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
tasks.withType<Test> {
useJUnitPlatform()
}
生成される成果物¶
Spring BootでビルドしたプログラムにはWebサーバーが組み込まれています。
サーブレット機能を必要とするSpring MVCを使用したプログラムの場合、Tomcatサーバーが組み込まれます。
サーブレットを使わないREST APIのプログラムであれば、Jettyを組み込むことが可能です。
ライブラリ構成¶
Spring Boot¶
spring-boot-starter¶
Spring Bootで必要とする依存関係のみ定義したライブラリ。jarファイルは、MANIFESTディレクトリのみ含みます。次のライブラリへの依存を定義しています。
Web機能を含まず、最低限 Spring Framework を使うだけの依存を含みます。
- spring-boot
- spring-boot-autoconfigure
- spring-boot-starter-logging
- jakarta.anotation-api
- spring-core
- snakeyaml
これらのライブラリがさらに依存ライブラリを持つ可能性があるので、実際に必要なライブラリは上述よりも多くなります。