⚙️ Spring Framework 講座【第19回】環境ごとに設定を切り替える!〜プロパティ管理とプロファイル〜

docs

前回、Controller、Service、Repositoryの三層構造による業務ロジックの連携を学びました。アプリケーションの骨格はこれで完成です。

しかし、実際の業務システムは、「開発環境」「テスト環境」「本番環境」といった複数の環境で動きます。環境が変われば、データベースの接続先やログレベルなど、設定値も変わる必要があります。

今回は、Spring Bootが提供する強力なプロパティ管理プロファイルの仕組みを学び、環境に応じた設定の切り替え方をマスターします。

1. プロパティファイル(application.properties/yml)

Spring Bootアプリケーションは、src/main/resources フォルダにある application.properties または application.yml ファイルから、設定値を自動で読み込みます。

このファイルに、サーバーポート、データベースのURL、ログレベルなど、システムに関する全ての外部設定を記述するのが基本です。

1-1. Properties形式(.properties)

key=value の形式で記述します。

Properties

# application.properties の例

# サーバーポートの設定
server.port=8080

# データベース接続情報 (開発環境用)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa

1-2. YAML形式(.yml)

階層構造をインデント(スペース)で表現するため、設定項目が多い場合に読みやすくなります。

YAML

# application.yml の例

server:
  port: 8080 # サーバーの設定
  
spring: # Spring全般の設定
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa

ヒント: Spring Bootでは、YAML形式(.yml)がモダンな記述として推奨されています。

2. 環境ごとの設定切り替え:Spring Profiles

同じアプリケーションでも、環境によって異なる設定を適用したい場合に使うのが「プロファイル (Profile)」という機能です。

プロファイルを使うことで、設定を論理的なグループ(例: devprodtest)に分けて管理できます。

2-1. プロファイル別の設定ファイルの作成

基本となる application.yml ファイルに加え、特定のプロファイル名を含むファイルを作成します。

  • application-dev.yml:開発環境(dev プロファイル)専用の設定
  • application-prod.yml:本番環境(prod プロファイル)専用の設定

ファイル名には、必ず -(ハイフン) を使ってプロファイル名を区切ります。

2-2. プロファイル別の設定例

例えば、ログレベルとデータベース接続先を環境ごとに変えたい場合。

application.yml (共通/デフォルト設定)

YAML

server:
  port: 8080 # 共通のポート
logging:
  level:
    root: INFO # デフォルトのログレベル

application-dev.yml (開発環境専用)

YAML

# devプロファイルが有効なときに適用される
logging:
  level:
    root: DEBUG # 開発中はログを詳細に出力したい
spring:
  datasource:
    url: jdbc:h2:mem:devdb # インメモリDBを使用

application-prod.yml (本番環境専用)

YAML

# prodプロファイルが有効なときに適用される
logging:
  level:
    root: WARN # 本番では警告以上のみ出力
spring:
  datasource:
    url: jdbc:postgresql://prod-db:5432/maindb # 外部PostgreSQLを使用

プロファイルが有効になると、application.yml の設定に、プロファイル固有の設定ファイルの設定が上書き(オーバーライド)されます

3. プロファイルの有効化

アプリケーションを実行する際に、どのプロファイルを有効にするかを指定します。

3-1. コマンドライン引数で指定

Jarファイルを起動する際に、-D オプションを使って指定するのが最も一般的です。

Bash

# devプロファイルを有効にしてアプリケーションを起動
java -jar -Dspring.profiles.active=dev your-application.jar

3-2. application.yml内で指定(デフォルト設定)

application.yml の中で、デフォルトで有効にするプロファイルを指定することもできます。

YAML

# application.yml
spring:
  profiles:
    active: dev # 実行時に指定がない場合、デフォルトでdevプロファイルを有効にする

4. まとめ:プロファイルによる高度な制御

プロファイル機能を使うことで、開発者はコードを変更することなく、設定ファイルだけで環境ごとの振る舞いを完全に切り替えることができます。

また、@Profile("プロファイル名") というアノテーションを使って、特定のプロファイルが有効なときだけBeanを登録するといった、より高度な制御も可能です。

Java

// devプロファイルが有効なときだけ、このBeanがコンテナに登録される
@Service
@Profile("dev") 
public class MockEmailService implements EmailService {
    // 開発用のダミーのメール送信処理を実装
}

✅ 本日のまとめ

  • プロパティ管理は、application.propertiesapplication.yml ファイルで行い、設定値を外部化する。
  • Spring Profiles を使うことで、設定を devprod などの環境グループに分けられる。
  • application-プロファイル名.yml の形式でファイルを作成すると、プロファイルが有効なときに設定が適用される。
  • java -jar -Dspring.profiles.active=プロファイル名 で、実行時にプロファイルを切り替える。
  • @Profile("プロファイル名") アノテーションを使うと、特定のプロファイルでのみBeanを有効化できる。

🔔 次回予告

これで、Spring Coreの概念と、Spring Bootによる設定・環境管理の土台が完全に整いました。

次回からはいよいよ、業務システムの根幹であるデータベース連携に進みます。Spring Bootで最も一般的に使われる**JPA(Java Persistence API)**の基本概念と、Hibernateという実装について学びます。

次回:【第20回】データ永続化の基本とJPA/Hibernate にご期待ください!

コメント

タイトルとURLをコピーしました