Spring Boot:アプリケーションを組み立てる
Spring BootがHTTPサーバー、設定、依存性注入、JSON変換、ヘルスチェックをどう組み立て、Payment Serviceを起動可能なサービスにしているかを学びます。
Java / Spring Bootを入口に、金融システムのService・Repository・Transaction設計を読む。
先に学ぶ内容 — Prerequisite: ソフトウェア工学 / 銀行システム学ぶこと — LEARNING GOALS
このページで学ぶこと
- Spring Bootの自動設定と起動点
- Beanと依存性注入
- application.ymlと環境変数の役割
体験34 · JAVA SPRING BOOT(土台を組み立てる)
main()メソッドは、振込の業務処理そのものを実行しているか確かめよう
まずは予想をひと言。本文を読んだ後、教材内の参照元で実際の起動点と設定を確認します。
- 01まず予想する — PREDICT
まずここだけ:思ったことをひと言書く
Payment Serviceのmain()メソッドは、振込の業務処理そのものを実行していると思いますか?
正解でなくて大丈夫です。「〜だと思う」から始めてみましょう。
ヒント1を見る
main()の中身は何行くらいだと思いますか?
ヒント2を見る
ControllerやServiceは誰が生成してつないでいるでしょうか?
もっと詳しく:この問いで使う専門用語
- Beanは、Springが生成と寿命を管理するオブジェクトです。
- 依存性注入は、必要な部品を外から渡してもらう仕組みです。
- Actuatorは、アプリの状態を観測するための機能です。
日常語で理解する — PLAIN LANGUAGE
まず、ここだけつかむ
Spring Bootは、HTTPサーバーやJSON変換、設定、オブジェクトの接続をまとめて準備するアプリケーションの土台です。
Controller、Service、Gatewayは必要な相手を自分でnewせず、コンストラクタで受け取ります。Springが設定に従って生成し、つなぎます。
接続先やデモ機能はapplication.ymlと環境変数で切り替えます。コードへ環境固有値や強い秘密を埋め込みません。
順番に理解する — DIFFICULT PARTS, STEP BY STEP
難しいポイントを、順番にほどく
専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。
Bean
Springが生成と寿命を管理するオブジェクトです。
構成を一か所で管理し、依存先を差し替えやすくするためです。
RestClient、PaymentController、PaymentApplicationServiceなどが管理対象です。
依存性注入
必要な部品を外から渡してもらう仕組みです。
クラスが生成方法まで抱えず、自分の責任へ集中できるからです。
ControllerのコンストラクタへServiceが渡されます。
Actuator
アプリの状態を観測するための機能です。
プロセスが起動しているかを運用から確認するためです。
/actuator/healthを公開し、詳細は隠します。
発展 — ADVANCEDもっと詳しく確認する最初の学習では読まなくても問題ありません。仕組みをもっと深く理解したい場合に開いてください。
起動点は小さく、組み立てはSpringへ任せる
@SpringBootApplicationは、設定クラス・自動設定・コンポーネント探索の入口です。com.minibank.payment配下のController、Service、Component、Configurationが検出されます。
main()は業務処理を行いません。Springのコンテナを起動し、必要なオブジェクトを生成して接続します。
@SpringBootApplication
public class PaymentServiceApplication {
public static void main(String[] args) {
SpringApplication.run(PaymentServiceApplication.class, args);
}
}依存性注入で、作る責任と使う責任を分ける
各クラスがnewを連鎖させないため、構成の変更やテスト時の差し替えが容易になります。Payment Serviceはコンストラクタ注入を使い、必要な依存関係を明示しています。
- 01SpringがSupabasePropertiesを設定から生成
- 02RestClientConfigがRestClientをBeanとして生成
- 03SupabaseRpcClientへRestClientとObjectMapperを注入
- 04PaymentRpcGatewayへSupabaseRpcClientを注入
- 05PaymentApplicationServiceへGatewayを注入
- 06PaymentControllerへServiceを注入
設定値と秘密をコードへ埋め込まない
| 設定 | 用途 | 既定の考え方 |
|---|---|---|
| server.port | Payment Serviceの待受ポート | 8081 |
| minibank.supabase.rest-url | PostgRESTの入口 | SUPABASE_URLから構成 |
| publishable-key | Supabase Data APIの公開キー | service role鍵は保持しない |
| demo-otp-display-enabled | 教材用OTP表示 | falseでfail-closed |
Actuatorは生存確認の入口
Spring Boot ActuatorによりGET /actuator/healthを提供します。詳細情報は外部へ出さない設定です。
healthがUPでも、振込が正しく完了できるとは限りません。本番ではPostgREST到達性、RPC成功率、遅延、DB照合など別の観測が必要です。
体験学習の続き · LEARNING LOOP
ここまで読めましたか?続けて確認してみましょう
BeanとActuatorの考え方を読んだところで、教材内の参照元で実際の起動点と設定を確認し、自分の言葉で説明してみます。
- 02仕組みを確かめる — CONCEPT CHECK
画面操作なしで、仕組みを確かめる
この仕組みは、Mini Bankの画面には現れません。次のEvidenceとCode Trail、教材本文だけで理解を進めます。
- 03証拠を確認する — EVIDENCE
何を見たか、1つずつ確かめる
Evidence(判断の根拠となる記録)を確認したらチェックします。各項目の「何を見るか」を手がかりにしてください。
画面を開けない項目は、Source Trail(教材の参照元)と教材の説明で確認できます。失敗を実際に起こす必要はありません。
- 04コードの処理経路を追う — CODE TRAIL
コードを書く必要はありません
ここでは「説明されている仕組みが、実際のMini Bankのどこに実装されているか」を確認します。まずは日本語の役割説明を読み、入力した依頼がどこへ渡るかをつかみましょう。コードの全文を読む必要はありません。
まずmain()の起動点を見て、次に設定ファイルでActuatorの公開範囲を見ます。起動と業務処理の違いを確かめましょう。
教材の参照元を確認する — Source Trail ↓Spring Bootの起動点。main()が何をしているかを探します。
services/payment-service/src/main/java/com/minibank/payment/PaymentServiceApplication.javaポート・Supabase・Actuator・ログ設定。
services/payment-service/src/main/resources/application.yml - 05自分の言葉で説明する — EXPLAIN
LEVEL 1 — やさしい説明(まずここだけ)
なぜmain()は業務処理をせず、Springへの起動命令だけを行うのでしょうか? 短い2文を目安に説明してください。
日常語だけで完了できます。専門用語の数や正誤を自動採点するものではありません。
ヒント1を見る
「起動」と「業務処理」という2つの言葉を使って書いてみましょう。
ヒント2を見る
healthがUPであることと、振込が成功することの違いを考えてみましょう。
もっと詳しく:LEVEL 2 — 専門用語を使った説明(任意)
Bean、依存性注入、Actuatorの3つを使って、Spring Bootがアプリケーションをどう組み立てるか説明してみましょう。
挑戦する場合は、上の説明欄に追記できます。追加しなくても完了できます。
説明の確認ポイント — Checkpoint- main()は起動の入口であり業務処理をしないと説明できる
- healthのUPと業務の正常性は別だと説明できる
理解を確かめる — CHECK YOUR UNDERSTANDING
3問で理解チェック
答えを頭の中で考えてから、各項目を開いて確認してください。
Q1mainメソッドが振込処理を実行しますか?
いいえ。Springを起動し、Controllerなどの部品を組み立てる入口です。
Q2healthがUPなら振込も必ず成功しますか?
いいえ。プロセスの生存確認と、依存先を含む業務処理の正常性は別です。
Q3service role鍵をPayment Serviceへ置いていますか?
置いていません。publishable keyと呼出者のBearer tokenで既存の権限境界を使います。
完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。
教材の参照元 — SOURCE TRAIL
根拠と関連教材
CURRENT IMPLEMENTATIONは確認したrepository内の実装です。HISTORICAL IMPLEMENTATIONは導入・修正の履歴で、後続migrationによる再定義があり得ます。RELATED LESSONは教材への案内で、実装の一次Sourceではありません。ASSUMPTIONは仮定、UNKNOWNは未確認を表します。
確認基点: d02eae8914f39cbf06bfe422dc39c71886f82b3e / 2026-09-11。稼働環境への適用確認: UNKNOWN。パス実在の自動検査と、記述した技術的事実の確認は別です。
- 現在の実装 — CURRENT IMPLEMENTATION
services/payment-service/src/main/java/com/minibank/payment/PaymentServiceApplication.javamainSpring Bootの起動点 - 現在の実装 — CURRENT IMPLEMENTATION
services/payment-service/src/main/java/com/minibank/payment/config/RestClientConfig.javaPostgREST向けRestClientの組み立て - 現在の実装 — CURRENT IMPLEMENTATION
services/payment-service/src/main/resources/application.ymlポート・Supabase・Actuator・ログ設定 - 現在の実装 — CURRENT IMPLEMENTATION
services/payment-service/pom.xmlSpring BootとJavaの依存関係