404 Not Found

404 Not Found


nginx

Spring Bootの概要と開発環境の構築

Spring BootはエンタープライズレベルのJava開発をブロック組み立てのように簡単にします。自動設定, スターター依存関係, 組み込みコンテナという3つの主要機能により, 煩雑なXML設定の必要が完全になくなります。

1. 学ぶ内容


2. バックエンド開発者の実話

(1) ペインポイント:XML設定地獄

Aliceは従来のSpring MVCプロジェクトであるOrderFlow電子商取引注文管理システムを引き継いだばかりのバックエンド開発者です。プロジェクトには20以上のXML設定ファイルが含まれており, データソース設定だけでも5つのファイルにまたがっています。新しい機能を追加するたびに3つのXMLファイルを行き来しなければならず, 新しいチームメンバーが仕事に慣れるまで平均2週間かかります。デプロイにはTomcatを別途インストールしJNDIデータソースを設定する必要があり, 環境の問題1つを解決するのに半日かかることもあります。

(2) Spring Bootによる解決策

Spring Bootは「設定より規約」という哲学を用い, 煩雑なXML設定をゼロ設定起動に置き換えます。

JAVA
@SpringBootApplication
public class OrderFlowApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderFlowApplication.class, args);
    }
}

(3) 成果

AliceがSpring Bootを使ってOrderFlowをリファクタリングした後, XML設定ファイルの数は20から0に減り, 新入社員のオンボーディング時間は2週間から2日に短縮され, デプロイはjava -jarコマンド1つで済み, 組み込みTomcatがすぐに使えるようになりました。


3. Spring Bootの核心機能

(1) 3つの核心機能

Spring Bootの核心概念は3つのキーワードに要約されます。自動設定, スターター依存関係, 組み込みコンテナです。

100%
graph LR
    A[Spring Boot] --> B[自動設定<br/>Auto Configuration]
    A --> C[スターター依存関係<br/>Starter Dependencies]
    A --> D[組み込みサーバー<br/>Embedded Server]
    B --> B1[条件に基づく<br/>Bean登録]
    C --> C1[固定的な<br/>依存関係管理]
    D --> D1[Tomcat / Jetty<br/>/ Undertow]
機能 従来のSpring Spring Boot
設定方法 大量のXML / Java Config 自動設定 + 最小限のYAML
依存関係管理 バージョンの手動指定で競合が発生する可能性 スターター依存関係で統一バージョン管理
アプリケーションサーバー 外部インストールのTomcat 組み込みTomcat, JARから直接実行
プロジェクト構造 コンポーネントスキャンの手動設定が必要 @SpringBootApplication一括有効化
起動方法 WARをコンテナにデプロイ java -jarまたはmvn spring-boot:run

(2) Spring Boot 3.xの新たな要件

Spring Boot 3.xはメジャーリリースであり, 最低でもJava 17とJakarta EE 9+が必要です。

項目 Spring Boot 2.x Spring Boot 3.x
最低Javaバージョン Java 8 Java 17
名前空間 javax.* jakarta.*
Spring Framework 5.x 6.x
GraalVM Native Image 実験的 公式サポート
オブザーバビリティ Micrometer基本機能 MicrometerとOTelの深い統合
📌 重要ポイント: Spring Boot 3.xでのjavax → jakartaパッケージ名移行は最も重要な破壊的変更であり, すべてのimport文を更新する必要があります。


4. Java 17 LTSの新機能の概要

(1) Recordクラス

Recordは不変データ型で, コンストラクタ, getter, equals, hashCode, toStringを自動生成します。

(1) ▶ サンプル:Recordを使った注文DTOの定義

JAVA
public record OrderRequest(
    Long productId,
    Integer quantity,
    String customerEmail
) {}

出力:

TEXT
// 実行成功

(2) Sealed Class

sealed classは継承または実装を許可するクラスを制限し, 型安全性を強化します。

(2) ▶ サンプル:Sealed Classを使った支払いステータスの定義

JAVA
public sealed interface PaymentStatus
    permits Pending, Completed, Failed {}

public record Pending(String transactionId) implements PaymentStatus {}
public record Completed(String transactionId, LocalDateTime paidAt) implements PaymentStatus {}
public record Failed(String transactionId, String reason) implements PaymentStatus {}

出力:

TEXT
// 実行成功

(3) Text Block

Text Block:三重引用符を使って複数行文字列を記述し, エスケープ文字とお別れします。

(3) ▶ サンプル:Text Blockを使ったSQLクエリの記述

JAVA
String query = """
    SELECT o.id, o.total_amount, c.email
    FROM orders o
    JOIN customers c ON o.customer_id = c.id
    WHERE o.status = 'PENDING'
      AND o.created_at < :cutoffTime
    ORDER BY o.created_at DESC
    """;

出力:

TEXT
// 実行成功
機能 Java 11構文 Java 17構文
不変データ 手書きのLombokまたはボイラープレート record1行で完了
型階層の制御 継承の制限なし sealedでサブクラスを制限
複数行文字列 連結 + \n """ ... """
Switch式 式 + パターンマッチングプレビュー

5. Spring Initializrを使ったプロジェクト作成

(1) Spring Initializrの紹介

Spring Initializrは公式プロジェクトジェネレータで, WebインターフェースまたはIDE統合によりプロジェクトスケルトンを迅速に作成できます。

(1) ▶ サンプル:curlでSpring Initializrを使用

BASH
curl https://start.spring.io/starter.zip \
  -d type=maven-project \
  -d language=java \
  -d bootVersion=3.2.5 \
  -d groupId=com.orderflow \
  -d artifactId=orderflow-service \
  -d name=orderflow-service \
  -d packageName=com.orderflow \
  -d javaVersion=17 \
  -d dependencies=web,data-jpa,mysql,validation \
  -o orderflow-service.zip

出力:

TEXT
{"status":"ok","data":{}}

(2) 生成されるプロジェクト構造

TEXT
orderflow-service/
├── src/
│   ├── main/
│   │   ├── java/com/orderflow/
│   │   │   └── OrderflowServiceApplication.java
│   │   └── resources/
│   │       ├── application.properties
│   │       ├── static/
│   │       └── templates/
│   └── test/
│       └── java/com/orderflow/
│           └── OrderflowServiceApplicationTests.java
├── pom.xml
└── mvnw / mvnw.cmd

(2) ▶ サンプル:OrderFlowのpom.xmlの主要な依存関係

XML
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.5</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

出力:

TEXT
// 実行成功

6. 開発環境の設定

(1) IDEの選択とプラグイン

IDE 推奨プラグイン 利点
IntelliJ IDEA Ultimate Spring Boot Plugin / Spring Initializr 最高のSpringサポート, ワンクリック実行
IntelliJ IDEA Community Spring Boot Assistant (サードパーティ) 無料だが機能が限定
VS Code Spring Boot Extension Pack 軽量, フロントエンドからバックエンドへの移行に最適

(2) 必須ツール一覧

ツール 用途 インストール確認
JDK 17+ コンパイルと実行 java -version
Maven 3.9+ ビルドツール mvn -version
Git バージョン管理 git --version
Postman / curl APIテスト テストリクエストの送信

(1) ▶ サンプル:開発環境の確認

BASH
# Javaバージョンの確認 (17+必須)
java -version
# openjdk version "17.0.9"

# Mavenの確認
mvn -version
# Apache Maven 3.9.6

# Gitの確認
git --version
# git version 2.43.0

出力:

TEXT
# コマンド実行成功

7. OrderFlow:プロジェクトの背景とコースロードマップ

(1) OrderFlowのビジネスシナリオ

Aliceが開発したOrderFlowは, マイクロサービスベースの電子商取引注文管理システムです。主な機能は以下の通りです。

モジュール 機能 技術的ハイライト
商品管理 CRUD / キャッシュ / 検索 JPA + Redis + Caffeine
注文管理 注文作成 / 注文キャンセル / タイムアウト自動キャンセル トランザクション + スケジュールタスク + 非同期処理
ユーザー認証 登録 / ログイン / ロール権限 Spring Security + JWT
運用・監視 ヘルスチェック / メトリクス / トレース Actuator + Prometheus + Grafana

(2) コースロードマップ

100%
graph LR
    P1["フェーズ1<br/>入門編<br/>L01-L06"] --> P2["フェーズ2<br/>核心機能編<br/>L07-L12"]
    P2 --> P3["フェーズ3<br/>応用機能編<br/>L13-L18"]
    P3 --> P4["フェーズ4<br/>管理・運用編<br/>L19-L23"]
    P4 --> P5["フェーズ5<br/>総合実践編<br/>L24-L26"]

8. 総合サンプル:OrderFlowプロジェクトの作成と環境確認

JAVA
// OrderflowServiceApplication.java
package com.orderflow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

// controller/HealthController.java
package com.orderflow.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;

@RestController
public class HealthController {

    @GetMapping("/api/health")
    public Map<String, Object> health() {
        return Map.of(
            "status", "UP",
            "service", "OrderFlow",
            "version", "1.0.0"
        );
    }
}
💻 出力:

TEXT
$ curl http://localhost:8080/api/health
{"status":"UP","service":"OrderFlow","version":"1.0.0"}

❓ よくある質問

Q Spring BootとSpring Frameworkの関係は何ですか?
A Spring Frameworkがベースフレームワークであり, Spring Bootはその上に構築された迅速開発スキャフォールディングツールです。自動設定, スターター依存関係, 組み込みコンテナを提供し, 手動設定なしですぐに始められます。
Q Java 17は必須ですか?Java 11ではだめですか?
A Spring Boot 3.xはJava 17以降が必要です。これはJakarta EE 9以降の最低要件です。Java 8または11を使用する必要がある場合はSpring Boot 2.xを使う必要がありますが, すでにサポート終了 (EOL)となっており, セキュリティアップデートは提供されません。
Q MavenとGradleのどちらを選ぶべきですか?
A どちらでも構いません。Mavenはより成熟したエコシステムと豊富なドキュメントがあるため, 本チュートリアルではMavenを使用します。Gradleはビルドが速く, 大規模なマルチモジュールプロジェクトに適しています。
Q Spring Initializrで生成したプロジェクトはすぐに使えますか?
A すぐに実行可能です。メイン起動クラスとテストクラスがすでに含まれています。ただし, ビジネス要件に応じてJPAエンティティ, コントローラ, サービスなどの依存関係とコードを追加する必要があります。
Q recordはすべてのPOJOを置き換えられますか?
A recordは不変のデータ転送オブジェクト (DTO)に適しています。JPAエンティティ (可変性と引数なしコンストラクタが必要)が必要な場合は, 通常のクラスを使用してください。
Q IDEA Community Editionで十分ですか?
A Community Editionには公式Spring Bootプラグインがありませんが, サードパーティプラグインで基本的な用途には使えます。予算が許すなら, Ultimate Editionはより包括的なSpringサポートを提供するため推奨されます。

📖 まとめ


📝 練習問題

  1. 基本問題 (難易度 ⭐):Spring Initializrを使ってspring-boot-starter-web依存関係を含むSpring Boot 3.xプロジェクトを作成してください。プロジェクト実行後, /api/healthにアクセスして{"status":"UP"}を返すようにしてください。

  2. 応用問題 (難易度 ⭐⭐):プロジェクト内にid, name, priceフィールドを持つProductレコードを定義し, ハードコードされた商品一覧を返すProductControllerを作成してください。

  3. チャレンジ問題 (難易度 ⭐⭐⭐):sealed interfaceを使ってOrderStatusを定義し (PENDING, CONFIRMED, SHIPPED, CANCELLEDの4つの実装を含む), コントローラで各ステータスに応じて異なるHTTPステータスコードを返すようにしてください。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%