対象ファイル
- 00_Developer_Terms.md
はじめに
新しく個人学習として boot_basic という Spring Boot プロジェクトを進めることにしました。CampReserve の分析が一段落したので、次のステップとして Spring Boot ベースのプロジェクトに取り組んでいます。
まずはプロジェクトを読み進める前に、開発用語をまとめた「Developer Terms」を整理しておこうと思います。用語をちゃんと理解した状態で読み進めた方が、後々のコード分析がスムーズになると感じたからです。
Spring Boot の基本的な仕組み
Spring Boot は、Spring Framework の複雑な設定を自動化して、独立した Java アプリケーションをすぐに構築できるようにしたフレームワークです。今まで何となく「便利なやつ」くらいの認識だったんですが、改めて読むと Embedded Tomcat(内蔵 Tomcat)のおかげで別途 WAS をインストールしなくても JAR ファイル単体で実行できる、という部分が地味に大きいポイントだなと感じました。
Auto Configuration と Component Scan の関係も気になったところです。@SpringBootApplication が置かれているパッケージ配下を自動でスキャンして、@Controller や @Service などのアノテーションが付いたクラスを Bean として登録してくれる。DI(依存性注入)と合わせて、開発者が new でオブジェクトを直接生成しなくていいようにする設計思想が一貫しているんだなと理解しました。
ApplicationContext が Bean のライフサイクル全体を管理する核心インターフェースだという点も、頭の中で整理できてすっきりしました。
アーキテクチャと Web 層
Spring MVC は Model-View-Controller のパターンに沿って、リクエスト処理・ビジネスロジック・画面描画の責務をきっちり分離する構造です。
特に DispatcherServlet がフロントコントローラーとしてすべての HTTP リクエストを最初に受け取り、該当する Controller に処理を委譲する、という流れは今まで何となくブラックボックスだった部分だったので、今回読んでいて腑に落ちました。
ViewResolver が Controller から返された View 名の前後に Prefix・Suffix を付け足して、実際の JSP ファイルにマッピングしてくれる仕組みも、/WEB-INF/views/ + aaa + .jsp という具体例で見るとイメージしやすかったです。
ディレクトリ構造とリソース
src/main/resources/static は CSS・JS・画像などの静的リソース用、src/main/resources/templates は Thymeleaf などのテンプレートエンジン用、という役割分担がある一方で、src/main/webapp/WEB-INF はブラウザから直接アクセスできない保護領域だという点が印象的でした。Controller を経由しないと画面が見えない、というセキュリティ的な設計意図がちゃんとあるんだなと。
application.properties(または YAML)にサーバーのポート番号や DB 接続情報、ViewResolver の設定などをまとめて書く、という基本もここで再確認できました。
ビルド・テスト周り
Gradle については build.gradle に依存関係やプラグインを書いて、Dependency Management で必要なライブラリを自動的にダウンロード・バージョン管理してくれる仕組みです。
JSP を使う Spring Boot プロジェクトだと tomcat-embed-jasper が必須になる、という部分は知らなかったので新しい発見でした。地味にハマりやすいポイントな気がします。spring-boot-devtools はコード変更時に自動リロードしてくれる開発専用ライブラリで、開発効率を上げてくれるやつです。
Gradle Wrapper(gradlew)のおかげで、開発環境に Gradle を個別インストールしなくてもプロジェクト固定のバージョンでビルドできる、というのも改めて理解しました。
アノテーションまとめ
よく使うアノテーションを整理すると、こんな感じです。
@SpringBootApplication // Configuration + AutoConfiguration + ComponentScan
@Controller // MVC の Controller として登録
@RequestMapping // URL マッピングの汎用アノテーション
@GetMapping // GET 専用
@PostMapping // POST 専用(登録・送信処理向け)
@SpringBootTest // 統合テスト用、ApplicationContext を全ロード
@Test // JUnit5 のテストケース明示
@SpringBootApplication が3つのコア機能を統合したものだと知って、なるほどこれ一つでいろいろやってくれてたのか、と腑に落ちました。
Git・バージョン管理
最後に Git のコマンドと GitHub の概念も整理しました。git init → git add → git commit → git remote → git push という一連の流れ自体は普段からやっていることですが、改めて一つひとつの役割を言語化すると理解が深まります。
コミットメッセージ規約(feat: docs: fix: refactor:)も、チーム開発では地味に大事な部分だと思うので、今後意識して使い分けていきたいです。
今回学んだこと
Spring Boot の自動設定・DI・MVC 構造といった基本概念を、用語レベルからしっかり整理できました。特に DispatcherServlet や ViewResolver の役割は、今まで何となく理解していた部分だったので、今回きちんと言語化できて良かったです。
次は 01_Project_Map.md を読んで、プロジェクト全体の構成を理解していこうと思います。