🌱

Spring Bootの構成原理を理解する

に公開

― 自動構成とユーザー構成のつながり ―

Spring Boot は「設定より規約(Convention over Configuration)」の原則に基づいて、開発者がすべての設定を手作業で行わなくてもすぐにアプリケーションを立ち上げられるように設計されています。

しかし、開発が進むにつれてカスタマイズや拡張が必要になったとき、「なぜこのBeanが登録されているのか」「どのようにオーバーライドできるのか」といった内部構造の理解が必要不可欠になります。

本記事では、Spring Boot の構成がどのように組み立てられているか、そして自動構成とユーザー構成の関係性について、図を交えながら詳しく解説していきます。


🛠 アプリ構築のスタート地点:技術選択

Spring Boot プロジェクトは通常、次のようなステップで構成が決まっていきます:

  1. Spring Initializr で技術スタックを選ぶ

    • Web / JPA / Security などの依存関係を選択
  2. build.gradle あるいは pom.xml が自動生成される

  3. Starterライブラリの導入

    • 例: spring-boot-starter-web, spring-boot-starter-data-jpa など

⚙️ 自動構成(AutoConfiguration)のメカニズム

Spring Boot の目玉機能のひとつが「自動構成」です。
これは、選択された依存ライブラリに応じて、適切な設定やBean定義を自動で読み込んでくれる仕組みです。

主な構成の流れは以下のとおりです:

  • @AutoConfiguration による構成クラスの読み込み
  • spring.factoriesAutoConfiguration.imports に定義されたクラス群を評価
  • @ConditionalOnClass, @ConditionalOnProperty などの条件が満たされると、構成が有効化
  • 結果として、デフォルトのインフラ用 Bean が生成されます(例:DataSource, Tomcat, DispatcherServlet など)

🧾 application.properties でのプロパティ適用

アプリケーションの動作に大きく関わるのが application.propertiesapplication.yml です。
これは外部設定として読み込まれ、構成クラス内で @ConfigurationProperties, @Value などを通じて利用されます。

server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/mydb

このような設定により、デフォルト構成を簡単に上書きできます。


👨‍💻 ユーザー構成:アプリ固有のロジック

一方で、アプリケーションごとのビジネスロジックやカスタム設定は開発者自身が定義します。

  • @Component, @Service, @Controller などで構成された アプリケーションロジック用 Bean
  • @Configuration によって定義された カスタム構成用 Bean

これらは @ComponentScan によって自動的にスキャンされ、Spring コンテナに登録されます。


🔄 自動構成とユーザー構成の関係

Spring Boot の柔軟さは、自動構成がユーザー定義によって簡単に上書きされるように設計されている点にあります。

たとえば、自動構成クラスの多くは以下のように記述されています。

@ConditionalOnMissingBean(DataSource.class)
@Bean
public DataSource dataSource() {
    return new HikariDataSource();
}

このように、開発者が DataSource を独自に定義すると、自動構成は無効化されます。
これは拡張性と柔軟性を両立させる非常に強力な仕組みです。


🧭 全体の構成フロー図

以下の図は、自動構成とユーザー構成がどのように連携してアプリケーションを構成しているかを示したものです。

🖼 構成の流れ(Mermaid図)

上記のように、アプリケーションは
自動構成 → application.properties → ユーザー定義構成 という流れで動的に組み立てられます。


✅ まとめ

項目 内容
自動構成 Spring Boot が提供するデフォルト構成(例:Tomcat, DataSource)
application.properties 外部設定で自動構成に影響を与える
ユーザー構成 開発者が定義するロジックやカスタム構成。優先される

Spring Boot の自動構成は非常に便利ですが、仕組みを理解することでより柔軟な設計が可能になります。


✍️ おすすめの次の一歩

  • spring-boot-autoconfigure の中身を読んでみる
  • @Conditional の組み合わせを実際に書いて試す
  • 本番環境向けに @ConfigurationProperties を活用して構成を分離する

Discussion