コース一覧
Spring Boot入門
プロジェクトの構成

Spring Boot入門

Java で Web API サーバーを作るための Spring Boot の入門コースです。DI コンテナ、REST コントローラ、リクエスト検証、レイヤ分割、Spring Data JPA、例外ハンドリング、テストまでを扱います。毎レッスン、Spring が裏側でやっている判断そのものを pure Java の関数として自分で書き、フレームワークが何を肩代わりしてくれているのかを手触りで理解できる構成にしました。約 12 時間 (1 日 30 分 × 24 日) で 48 レッスンを修了できます。

1
Spring Bootとは何か
0. Spring Bootで何が作れるのか10分
1. サーブレットからフレームワークへ15分
2. ルーティング表という発想15分
3. プロジェクトの構成10分
4. 起動のしくみと自動設定15分
5. パスのマッチング15分
2
DIコンテナ
0. newで書くと何が困るのか15分
1. コンストラクタインジェクション15分
2. インターフェースへの依存15分
3. @Componentと@Bean15分
4. 自作のDIコンテナ20分
5. Beanのスコープとライフサイクル15分
3
RESTコントローラ
0. RESTという設計方針15分
1. @RestControllerの役割15分
2. @GetMappingとパス変数15分
3. クエリパラメータの受け取り15分
4. @PostMappingとリクエストボディ15分
5. ステータスコードの選び方15分
6. ResponseEntityで組み立てる15分
4
リクエストとレスポンスの変換
0. JSONとオブジェクトの往復15分
1. DTOとエンティティを分ける15分
2. recordでDTOを書く15分
3. 入力検証の基本15分
4. 検証エラーをまとめて返す15分
5. アノテーションによる検証15分
5
レイヤ構成とビジネスロジック
0. 3層アーキテクチャ10分
1. @Serviceに置くもの15分
2. 状態遷移をルールにする15分
3. 料金計算のような業務ロジック15分
4. @Transactionalとは何か15分
5. トランザクションの巻き戻し15分
6
データアクセス
0. @Entityとテーブルの対応15分
1. リポジトリという抽象15分
2. メソッド名からクエリを作る20分
3. 検索条件の組み立て15分
4. ページングと並び替え15分
5. N+1問題15分
7
例外処理と横断的関心事
0. 例外をHTTPに変換する15分
1. @ExceptionHandlerと@ControllerAdvice15分
2. エラーレスポンスの形を決める15分
3. フィルタとインターセプタ15分
4. ログとリクエストの追跡15分
5. 設定値の外部化15分
8
テストと仕上げ
0. テストの種類と使い分け15分
1. Serviceの単体テスト15分
2. モックで依存を差し替える15分
3. MockMvcでエンドポイントを試す15分
4. 本番へ出すための次の一歩10分

Spring Boot入門

01Spring Bootで何が作れるのか
02サーブレットからフレームワークへ
03ルーティング表という発想
04プロジェクトの構成
05起動のしくみと自動設定
06パスのマッチング
07newで書くと何が困るのか
08コンストラクタインジェクション
09インターフェースへの依存
10@Componentと@Bean
11自作のDIコンテナ
12Beanのスコープとライフサイクル
13RESTという設計方針
14@RestControllerの役割
15@GetMappingとパス変数
16クエリパラメータの受け取り
17@PostMappingとリクエストボディ
18ステータスコードの選び方
19ResponseEntityで組み立てる
20JSONとオブジェクトの往復
21DTOとエンティティを分ける
22recordでDTOを書く
23入力検証の基本
24検証エラーをまとめて返す
25アノテーションによる検証
263層アーキテクチャ
27@Serviceに置くもの
28状態遷移をルールにする
29料金計算のような業務ロジック
30@Transactionalとは何か
31トランザクションの巻き戻し
32@Entityとテーブルの対応
33リポジトリという抽象
34メソッド名からクエリを作る
35検索条件の組み立て
36ページングと並び替え
37N+1問題
38例外をHTTPに変換する
39@ExceptionHandlerと@ControllerAdvice
40エラーレスポンスの形を決める
41フィルタとインターセプタ
42ログとリクエストの追跡
43設定値の外部化
44テストの種類と使い分け
45Serviceの単体テスト
46モックで依存を差し替える
47MockMvcでエンドポイントを試す
48本番へ出すための次の一歩

Spring Boot入門

プロジェクトの構成

このレッスンでは、Spring Boot のプロジェクトを開いたときに目に入るディレクトリとファイルが、それぞれ何のためにあるのかを読み解けるようになります。

プロジェクトは Spring Initializr で作ります

Spring Boot のプロジェクトを一から手で組み立てる人はほとんどいません。Spring Initializr という公式のジェネレータを使います。ブラウザなら https://start.spring.io を開き、IntelliJ IDEA なら新規プロジェクト作成画面から同じものが呼び出せます。

そこで選ぶ項目は次の通りです。

項目意味よくある選択
ProjectビルドツールGradle または Maven
Language言語Java
Spring Bootバージョン安定版の最新 (3.x)
Group組織を表す識別子com.example
Artifact成果物の名前demo
Packaging配布形式Jar
JavaJDK のバージョン17 または 21
Dependencies使う機能Spring Web、Spring Data JPA など

Dependencies で選んだものが、そのまま スターター依存 としてビルドファイルに書き込まれます。ここで Spring Web を選ぶかどうかで、生成されるプロジェクトが Web サーバーとして起動するかどうかが変わります。何も選ばずに作ると、起動してすぐ終了するだけのアプリになります。

できあがるディレクトリの形

生成されたプロジェクトは、Maven や Gradle の標準レイアウトに従います。

プレーンテキスト

demo ├── build.gradle (Gradle の場合) ├── settings.gradle ├── gradlew └── src ├── main │ ├── java │ │ └── com/example/demo │ │ └── DemoApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── java └── com/example/demo └── DemoApplicationTests.java

覚えることは 2 つだけです。src/main/java にはコンパイルされる Java ファイルを置く、src/main/resources にはコンパイルされない資材を置く です。設定ファイル、SQL のスクリプト、画像、HTML テンプレートはすべて後者に入ります。ビルドすると両方が同じ jar の中に詰め込まれ、src/main/resources の中身はクラスパス直下から読める状態になります。

src/test 以下も同じ構造で、こちらはテストの実行時にだけ使われ、本番の jar には含まれません。src/test/resources に別の application.properties を置けば、テストのときだけ設定を差し替えられます。

gradlew は Gradle ラッパーと呼ばれるスクリプトで、Gradle 本体が手元に入っていなくても、必要なバージョンを自動で取ってきて実行してくれます。だからチーム全員が同じバージョンでビルドできます。Maven なら mvnw が同じ役割です。

ビルドファイルには依存とビルド手順を書きます

Gradle なら build.gradle、Maven なら pom.xml です。どちらも書く内容は同じで、どのライブラリを使うか、どの Java バージョンでコンパイルするか、どうやって jar を作るかを宣言します。

groovy

plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' }

注目してほしいのは、スターター依存の行に バージョン番号が書かれていない ことです。io.spring.dependency-management プラグインが、Spring Boot のバージョンに合う組み合わせを一括で決めてくれます。ライブラリの相性を自分で調べなくてよいのが、Spring Boot の大きな価値の 1 つです。

implementation は本番でもテストでも使う依存、testImplementation はテストのときだけ使う依存、runtimeOnly はコンパイル時には要らないが実行時に必要な依存を表します。データベースのドライバは典型的な runtimeOnly です。

設定は application.properties に集めます

src/main/resources/application.properties は、アプリ全体の設定を書く場所です。

Properties

server.port=8081 spring.datasource.url=jdbc:h2:mem:testdb spring.jpa.hibernate.ddl-auto=update logging.level.org.springframework.web=DEBUG

application.yml という YAML 形式でも書けて、どちらを選んでも意味は同じです。階層が深い設定を書くときは YAML のほうが読みやすくなります。

ここに書いた値は、自分のコードからも @Value("${server.port}") や @ConfigurationProperties で読み出せます。パスワードのような秘密は、ファイルに直接書かず環境変数から渡すのが基本です。spring.datasource.password=${DB_PASSWORD} と書けば、実行時の環境変数が入ります。

環境ごとに設定を変えたいときは application-dev.properties や application-prod.properties を用意し、起動時にプロファイルを指定します。これを プロファイル と呼びます。

パッケージ構成には強い慣習があります

src/main/java の下は、com.example.demo のようにドメイン名を逆にした形で始めます。そして メインクラスは必ず一番上のパッケージに置きます。

理由は、次のレッスンで扱うコンポーネントスキャンにあります。@SpringBootApplication の付いたクラスは、自分のパッケージとその配下だけを走査対象にします。メインクラスを深い場所に置くと、その外側にあるコントローラやサービスが見つからず、動かない原因の分かりにくいバグになります。

配下の分け方には大きく 2 つの流派があります。

プレーンテキスト

com.example.demo com.example.demo ├── DemoApplication.java ├── DemoApplication.java ├── controller ├── user │ └── UserController.java │ ├── UserController.java ├── service │ ├── UserService.java │ └── UserService.java │ └── UserRepository.java ├── repository └── order │ └── UserRepository.java ├── OrderController.java └── domain └── OrderService.java └── User.java

左が レイヤごと に分ける形で、入門段階ではこちらが分かりやすく、教材でもよく使われます。右が 機能ごと に分ける形で、規模が大きくなるとこちらのほうが変更範囲がまとまります。どちらが正解ということはなく、チームで統一されていることのほうが大事です。このコースでは左の形を前提に説明していきます。

起動の入口はメインクラスです

Java

package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

普通の Java プログラムと同じく main から始まります。SpringApplication.run が、アプリケーションコンテキストを組み立て、コンポーネントをスキャンし、自動設定を適用し、組み込み Tomcat を起動するところまでを一気にやります。この 1 行の中で何が起きているのかは、次のレッスンで確認します。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • ディレクトリファイルを整理するフォルダのこと。
  • ブラウザユーザーから見たWebのクライアント
  • dependencies本番実行に必要な依存
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • コンパイルソースをバイトコードへ変換する処理
  • SQLデータベースを操作するための共通言語
  • HTMLHyperText Markup Languageの略。
  • テンプレート投稿の型。迷わず書き始められる
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • 起動のしくみと自動設定

    @SpringBootApplication が何を束ねているのかを確認します。

  • パスのマッチング

    パス変数を含む URL パターンの照合を実装します。

  • newで書くと何が困るのか

    直接 new する設計の差し替えにくさを、コードで確かめます。

  • RESTという設計方針

    リソースと操作から URL とメソッドを導けるようになります。

分からないところは Tap (AI先生) に質問できます

24 時間いつでも、あなたのレベルに合わせて日本語で答えます。