第13回 で JUnit テストを学びました。 そして本記事はついに 「Java 入門」連載の最終回! 現代の Java 開発で 圧倒的シェア を誇るフレームワーク 「Spring Boot(スプリング ブート)」 に入門します。
「Spring Boot って難しそう…」── 大丈夫。ここまで学んだ クラス・メソッド・アノテーションの基礎があれば、意外とすんなり理解できます。本記事では「Hello, World! を返す Web API」を作るところまでを 完全初心者向け に解説します。
この記事のゴール
「Spring Boot とは?」「プロジェクトを作る方法」「@RestController で Web API を作る方法」「アノテーションの意味」が理解できることを目指します。Web API の超基礎です!
Spring Boot とは?
Spring Boot は、Java で Web アプリケーション や API サーバー を作るための フレームワーク(=既製の枠組み)です。
💡 フレームワークとは?: 「アプリの土台と基本機能が最初から用意されている枠組み」のこと。 自分でゼロから書く代わりに、用意された型に沿って書くだけで、Web サーバー・データベース連携などが動く仕組みです。
なぜ Spring Boot が選ばれている?
| 強み | 内容 |
|---|---|
| 設定がほぼ不要 | 「Convention over Configuration」で、規約に沿えば設定ゼロ |
| 巨大なエコシステム | DB / セキュリティ / メッセージング / クラウド連携など何でも |
| 業界標準 | 日本国内の Java 案件は 8 割以上が Spring 系 |
| 学びやすい | 公式・書籍・記事の情報量が圧倒的 |
| 本番運用に強い | 大企業から個人開発まで幅広く採用 |
プロジェクトを作る(Spring Initializr)
Spring Boot プロジェクトは、ブラウザで Spring Initializr にアクセスするだけで作れます。
手順
- https://start.spring.io にアクセス
- 以下を選択:
- Project: Maven
- Language: Java
- Spring Boot: 3.x の最新版
- Project Metadata: お好みで(Group: com.example, Artifact: demo など)
- Packaging: Jar
- Java: 17 以上
- Dependencies で 「Spring Web」 を追加
- 右下の 「GENERATE」 ボタンで ZIP をダウンロード
- ZIP を解凍して IntelliJ IDEA や VS Code で開く
💡 IntelliJ IDEA Ultimate なら、上記をすべて IDE 内から実行できます。Community 版でも、ZIP を解凍して開けば OK です。
プロジェクトの構造
ZIP を解凍すると、以下のような構造になっています。
demo/
├── pom.xml ← Maven の設定ファイル(依存関係を書く)
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/demo/
│ │ │ └── DemoApplication.java ← エントリーポイント(main メソッドあり)
│ │ └── resources/
│ │ └── application.properties ← 設定ファイル(ポート番号等)
│ └── test/
│ └── java/
│ └── com/example/demo/
│ └── DemoApplicationTests.java
起動してみる: Hello, Spring Boot!
最初から 「DemoApplication.java」 という起動ファイルがあります。
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// このアノテーションが「Spring Boot アプリ」の目印
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
// Spring Boot を起動(これだけでサーバーが動く!)
SpringApplication.run(DemoApplication.class, args);
}
}
起動方法
- IntelliJ:
mainメソッド左の ▶ ボタンをクリック - コマンドライン:
./mvnw spring-boot:run(Mac/Linux)/mvnw.cmd spring-boot:run(Windows)
起動すると、コンソールに以下のようなログが流れます。
:: Spring Boot :: (v3.x.x)
...
Tomcat started on port(s): 8080 (http)
Started DemoApplication in 1.234 seconds
Tomcat started on port 8080 が出れば成功! Web サーバーが起動 しています。
ブラウザで http://localhost:8080 にアクセスすると、まだ何も作っていないので 「Whitelabel Error Page」 が出ます。これはエラーではなく、「URL に対応する処理がない」 という意味です。
最初の API を作る: @RestController
「/hello にアクセスすると Hello, Spring Boot! を返す」 API を作ってみましょう。
DemoApplication.java と同じフォルダに、新しいファイル HelloController.java を作ります。
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// このクラスは「REST API のコントローラー」と Spring に教える
@RestController
public class HelloController {
// GET /hello にアクセスされたら、このメソッドが呼ばれる
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
たったこれだけ。もう一度サーバーを再起動 して、ブラウザで http://localhost:8080/hello にアクセスすると…
Hello, Spring Boot!
と表示されます! これがあなたの最初の Web API です 🎉
アノテーションの意味
| アノテーション | 役割 |
|---|---|
@RestController | 「このクラスは REST API のコントローラーです」と Spring に伝える |
@GetMapping("/hello") | 「HTTP の GET メソッド + URL /hello」を、このメソッドに紐付け |
@SpringBootApplication | アプリの起点。3 つのアノテーションを 1 つにまとめた便利マーク |
💡 アノテーション は「コードに付けるラベル」のこと。Spring はクラスやメソッドに付いたアノテーションを見て、「何をどう動かすか」を自動で配線 してくれます。
クエリパラメータを受け取る
「/hello?name=佐藤 にアクセスすると Hello, 佐藤!」 を返す API を作ってみましょう。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
// クエリパラメータ name を受け取る
@GetMapping("/hello")
public String hello(
// ?name= の値を String 型の引数 name に取り込む
// defaultValue = パラメータがない場合のデフォルト値
@RequestParam(defaultValue = "World") String name
) {
return "Hello, " + name + "!";
}
}
アクセスしてみる:
- http://localhost:8080/hello →
Hello, World!(name 省略 → デフォルト適用) - http://localhost:8080/hello?name=佐藤 →
Hello, 佐藤! - http://localhost:8080/hello?name=Java →
Hello, Java!
JSON を返す API
文字列ではなく、JSON 形式のデータを返したい場合は オブジェクトをそのまま return するだけ。Spring が自動で JSON に変換してくれます。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
// GET /user にアクセスされたら呼ばれる
@GetMapping("/user")
public User getUser() {
// User オブジェクトを返すと、自動で JSON に変換される
return new User("佐藤", 28, "sato@example.com");
}
}
// データクラス(Java 14 以降の record 構文で簡潔に書ける)
record User(String name, int age, String email) {}
ブラウザで http://localhost:8080/user にアクセスすると…
{
"name": "佐藤",
"age": 28,
"email": "sato@example.com"
}
Spring が自動で JSON 化 しています。これが Spring Boot の生産性の高さです。
POST で データを受け取る
ユーザーから データを送ってもらう API も簡単に作れます。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetController {
// POST /greet に JSON が送られてきたとき
@PostMapping("/greet")
public String greet(@RequestBody GreetRequest req) {
// 送られてきた JSON が GreetRequest にマッピングされる
return "Hello, " + req.name() + "! 年齢は " + req.age() + " ですね。";
}
}
record GreetRequest(String name, int age) {}
curl などで POST してみる:
curl -X POST http://localhost:8080/greet \
-H "Content-Type: application/json" \
-d '{"name":"田中","age":35}'
応答:
Hello, 田中! 年齢は 35 ですね。
💡
@RequestBodyが「HTTP リクエストのボディ(JSON)を、引数のオブジェクトにマッピングしてください」と Spring に指示しています。
Spring Boot の主要アノテーション早見表
| アノテーション | 意味 |
|---|---|
@SpringBootApplication | アプリのエントリーポイント |
@RestController | REST API のクラスである |
@Controller | Web ページを返すクラス(Thymeleaf 等と併用) |
@Service | ビジネスロジックのクラス |
@Repository | DB アクセスのクラス |
@Component | 汎用の「Bean」として登録 |
@GetMapping(path) | GET リクエストの紐付け |
@PostMapping(path) | POST リクエストの紐付け |
@PutMapping(path) | PUT リクエストの紐付け |
@DeleteMapping(path) | DELETE リクエストの紐付け |
@RequestParam | クエリパラメータの取得 |
@PathVariable | URL パスからの値の取得(例: /users/123 の 123) |
@RequestBody | リクエストボディ(JSON)を Java オブジェクトに |
@Autowired | 他のクラスを自動でインジェクション(依存注入) |
💡 覚えるのは「
@RestController+@GetMapping+@RequestParam」だけで十分スタート可能。残りは必要になったときに調べれば OK です。
編集部より
Spring Boot は 「最初の Hello World が動けば 90% の壁を超えた」と言われる世界です。難しい仕組みは 使いながら少しずつ理解すれば OK。まずは触ってみることが大切!
練習問題
以下の機能を持つ API を作ってみましょう。
/add?a=10&b=20にアクセスすると、30(計算結果)を JSON で返す API。
解答例
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CalcController {
// GET /add?a=10&b=20 にアクセスされる想定
@GetMapping("/add")
public AddResult add(
@RequestParam int a, // クエリパラメータ a を int で受け取る
@RequestParam int b // クエリパラメータ b を int で受け取る
) {
return new AddResult(a, b, a + b); // 結果を JSON で返す
}
}
// レスポンスの形を定義(record 構文)
record AddResult(int a, int b, int result) {}
ブラウザで http://localhost:8080/add?a=10&b=20:
{
"a": 10,
"b": 20,
"result": 30
}
次のステップ:何を学ぶ?
入門連載は本記事で完結ですが、Spring Boot の世界はまだまだ広いです。以下を順に学ぶのがおすすめです。
| 順番 | 内容 |
|---|---|
| 1 | DB 連携(Spring Data JPA) — DB から取り出し・保存 |
| 2 | Validation — @Valid で入力バリデーション |
| 3 | 例外ハンドリング — @ControllerAdvice |
| 4 | セキュリティ(Spring Security) — 認証・認可 |
| 5 | テスト(@SpringBootTest) — Spring 機能を含めたテスト |
| 6 | デプロイ — Docker / クラウド(AWS, GCP, Azure)へ |
連載完走おめでとうございます! 🎉
ここまで全 14 回、お疲れさまでした! 全体を振り返ると、こんなにたくさんのことを学びました:
- ✅ Hello, World! と環境構築
- ✅ 変数・データ型
- ✅ 条件分岐(if / switch)
- ✅ 繰り返し(for / while)
- ✅ 配列
- ✅ メソッド
- ✅ クラスとオブジェクト
- ✅ 例外処理
- ✅ ArrayList
- ✅ 継承・インターフェース
- ✅ ファイル入出力
- ✅ マルチスレッド
- ✅ JUnit テスト
- ✅ Spring Boot 入門 ← 今ココ!
これだけ学べば、Java エンジニアの入口 には間違いなく立っています。 あとは 「自分で何か作ってみる」 こと。簡単な API、ToDo アプリ、ブログシステムなど、動くものを作る経験が、何より成長を加速させます。
このシリーズが、あなたの Java エンジニアとしてのキャリアの最初の一歩になれば、編集部として幸せです。お疲れさまでした!