コース一覧
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入門

本番へ出すための次の一歩

このレッスンでは、ここまで作ってきたアプリケーションを実際に動かして届けるために必要なことと、次に学ぶべき範囲の地図を手に入れます。

ビルドと実行可能 jar

Spring Boot のアプリケーションは、1本の jar ファイルに固めて配れます。Maven なら次のコマンドです。

ターミナル

./mvnw clean package java -jar target/myapp-0.0.1-SNAPSHOT.jar

Gradle なら ./gradlew bootJar で同じことができます。出来上がった jar には、アプリケーションのクラスだけでなく、依存しているライブラリと Tomcat 本体まで入っています。だから Java さえ入っていれば java -jar の一行で起動します。動かす側に Tomcat を設置して war を置く、という昔ながらの手順が不要になったのが、Spring Boot がもたらした大きな変化のひとつです。

この jar を fat jar や実行可能 jar と呼びます。中身は普通の jar とは少し構造が違い、BOOT-INF の下にアプリケーションのクラスと依存ライブラリが分けて置かれています。起動時に Spring Boot 独自のクラスローダーがそこを読みます。

コマンドの頭に付いている ./mvnw は Maven Wrapper です。開発者ごとに Maven のバージョンが違って挙動が変わる事故を避けるため、プロジェクトが使うバージョンを自分で取りに行く仕組みです。CI でも同じものを使えば、手元と同じ結果になります。

プロファイルで環境を切り替える

開発中はローカルのデータベース、本番はクラウドのデータベース、という切り替えが必要になります。これを担うのがプロファイルです。

設定ファイルを環境ごとに分けて置きます。

プレーンテキスト

src/main/resources/ application.yml 共通の設定 application-dev.yml dev のときだけ追加で読まれる application-prod.yml prod のときだけ追加で読まれる

どれを使うかは起動時に指定します。

ターミナル

java -jar myapp.jar --spring.profiles.active=prod

環境変数 SPRING_PROFILES_ACTIVE でも同じ指定ができます。共通の application.yml が先に読まれ、そのうえにプロファイル固有のファイルが重ねられるので、違うところだけを書けば済みます。

プロファイルは Bean にも効きます。@Profile("dev") を付けた Bean は dev のときだけ登録されます。開発中だけダミーのメール送信を使う、といった切り替えに向いています。

ここで大事な原則をひとつ挙げます。パスワードや API キーを設定ファイルに直接書かないことです。ソースコードの管理下に秘密が入ると、取り消すのが非常に難しくなります。環境変数や外部の秘密管理の仕組みから読ませます。Spring Boot は ${DB_PASSWORD} のような記法で環境変数を設定値に差し込めます。

Spring Security の入口

ここまでのアプリケーションは、誰でも全部のエンドポイントを呼べる状態です。実際のサービスでは、誰であるかを確かめる認証と、その人に何を許すかを決める認可が要ります。この2つを担うのが Spring Security です。

依存を追加した瞬間に、すべてのエンドポイントがログインを要求するようになります。これは驚かされる挙動ですが、既定で閉じておくという方針の表れです。開けるほうを明示的に書く形になります。

Java

@Configuration class SecurityConfig { @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth -> auth .requestMatchers("/public/**").permitAll() .anyRequest().authenticated()); return http.build(); } }

仕組みの中心はフィルタチェーンです。リクエストがコントローラに届く前に、認証用のフィルタが順番に並んでいて、そこを通り抜けたものだけが先へ進みます。このコースでフィルタチェーンを扱ったときに書いた「順番に通して、途中で止まったらそこで返す」という構造が、そのまま本物にも当てはまります。

次に学ぶ順番としては、まずフォームログインで認証の流れをつかみ、それから REST API 向けにトークンを使う方式へ進むのが分かりやすいです。パスワードは必ずハッシュ化して保存する、という点だけは最初から守ってください。

Actuator で状態を覗く

動かし始めると、生きているかどうかを外から確かめる口が必要になります。Spring Boot Actuator は、そのための入口を用意してくれます。

エンドポイント分かること
/actuator/health生きているか、依存先につながっているか
/actuator/infoアプリケーションのバージョンなどの情報
/actuator/metricsメモリ、スレッド、リクエスト数などの計測値

既定では health と info だけが公開されます。ほかを出したい場合は設定で明示します。これも既定で閉じるという方針です。health はコンテナオーケストレーションの死活監視の宛先としてそのまま使えます。ただし内部の詳細を誰にでも見せてよいわけではないので、公開範囲は必ず絞ってください。

Docker で持ち運ぶ

実行可能 jar があれば、コンテナ化は短く書けます。

dockerfile

FROM eclipse-temurin:21-jre COPY target/myapp-0.0.1-SNAPSHOT.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]

これで、どこでも同じ環境で動く単位ができます。設定は環境変数で外から渡せるので、同じイメージを dev と prod の両方で使い回せます。同じものを動かしているという確信が持てることが、コンテナ化のいちばんの利点です。

このコースで書いた裏側と、本物の対応表

このコースの演習は、Spring のアノテーションを使わずに pure Java で書いてきました。それは Spring を避けたかったからではなく、アノテーションを1行書いたときにフレームワークが何を判断しているのかを、手で追える形にしたかったからです。書いたものが実際には何に対応していたのかを、ここで一覧にして振り返ります。

演習で自分の手で書いたもの本物の Spring での対応
Map に登録して型で取り出す小さなコンテナDI コンテナ、@Component、@Bean
コンストラクタで依存を受け取る組み立てコンストラクタインジェクション、@Autowired
インスタンスを1つだけ保持するか毎回作るかの分岐@Scope の singleton と prototype
メソッドとパスを表と突き合わせる照合@RequestMapping、@GetMapping、@PostMapping
パスの一部を切り出して変数にする処理@PathVariable
クエリ文字列を分解して既定値を当てる処理@RequestParam の defaultValue
入力の値を1件ずつ規則に照らして集める判定@Valid と Bean Validation の各制約
違反の一覧をまとめて返す組み立てBindingResult、MethodArgumentNotValidException
エンティティから公開してよい項目だけを選ぶ変換DTO、record、マッパー
状況に応じて数値のステータスを選ぶ分岐ResponseEntity、@ResponseStatus
順番に通して途中で止める仕組みフィルタチェーン、OncePerRequestFilter
条件が揃ったときだけ既定の部品を用意する判断自動構成、@ConditionalOnMissingBean
呼び出し回数を数える偽の実装Mockito のモック、@MockBean、verify
メソッドとパスからレスポンスを決めて期待と比べる処理MockMvc の perform と andExpect

この表を見て、それぞれの行で自分が何を書いたかを思い出せるなら、このコースの目的は達成されています。アノテーションは魔法ではなく、ここに並んだ判断を代わりにやってくれる短い指示です。だから予想外の動きをしたときも、裏で何を判断しているのかを考えれば原因に辿り着けます。

次に学ぶものの地図

最後に、ここから先の道筋を挙げます。順番はおおよそ学びやすい並びです。

  1. Spring Data JPA を掘り下げる — 関連の張り方、遅延読み込み、N+1 問題への対処。データベースを使うアプリケーションでは、性能問題のほとんどがここに集まります
  2. トランザクションの理解を深める — @Transactional が既定では非検査例外だけでロールバックすること、同じクラス内の呼び出しでは効かないこと。この2つは実務で必ず一度は踏みます
  3. Spring Security — 認証と認可、パスワードのハッシュ化、トークンによる API 保護
  4. テストを厚くする — Testcontainers で本物のデータベースを使った結合テスト。組み込みデータベースとの差で落ちる問題を潰せます
  5. 観測できるようにする — 構造化ログ、メトリクス、分散トレーシング。動かし始めてから効いてきます
  6. CI と CD — テストを自動で回し、通ったものだけを自動で配る仕組み

どれから始めても構いませんが、一度に広げないことをお勧めします。小さなアプリケーションを1本作り、それをビルドして、コンテナに入れて、実際に動くところまで運ぶ。この一往復を経験すると、ここに挙げた項目がなぜ必要なのかが自分の言葉で分かるようになります。フレームワークの学習は、機能を覚える作業ではなく、困りごとと解決策を結びつける作業です。まず困ってください。そのときに、このコースで見てきた裏側の知識が効いてきます。

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

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

  • クラスデータと振る舞いを束ねる単位
  • データベースデータを構造化して保存する仕組み
  • クラウドクラウドはインターネット経由でサーバーリソースを借りる形態。
  • 環境変数JWT_SECRET など秘匿値を渡す手段
  • 変数データに名前をつけて参照する仕組み
  • パスワードDBが漏洩しても元のパスワードがわからないようにするため。
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • MockMvcでエンドポイントを試す

    リクエストの組み立てから期待する結果までを検証します。

  • モックで依存を差し替える

    呼び出し回数を記録する偽の実装を作れるようになります。

  • Serviceの単体テスト

    依存を差し替えて業務ロジックだけを検証します。

  • テストの種類と使い分け

    @SpringBootTest と @WebMvcTest の違いを確認します。

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

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