Spring Bootの@Profileとspring.profiles.activeの使い方を完全ガイド!初心者向けプロファイル活用術
生徒
「Spring Bootで環境ごとに設定を切り替える方法ってありますか?」
先生
「Spring Bootでは、プロファイルという仕組みを使って、開発環境や本番環境など、目的に応じた設定の切り替えが可能です。」
生徒
「そのプロファイルって、具体的にどうやって使うんですか?@Profileとかspring.profiles.activeとか見たことあります。」
先生
「とても良い着眼点です!それでは、@Profileアノテーションとspring.profiles.activeの基本的な使い方を詳しく解説していきましょう。」
1. Spring Bootにおけるプロファイルとは?
Spring Bootのプロファイル機能は、アプリケーションの実行環境に応じて、使用するBeanや設定を切り替えるための便利な仕組みです。たとえば、開発環境ではH2データベース、本番環境ではMySQLなど、同じコードベースでも環境によって構成を変更できます。
このように、環境別の構成を柔軟に管理できるのが、Spring Bootにおけるプロファイルの強みです。
2. spring.profiles.activeの基本的な使い方
spring.profiles.activeは、どのプロファイルを有効にするかを指定するための設定キーです。指定されたプロファイルに対応するBeanや設定ファイルがアクティブになります。
指定方法は複数あります。
- application.properties で指定
- コマンドライン引数で指定
- 環境変数で指定
たとえば、application.properties内に次のように書きます:
spring.profiles.active=dev
または、起動時にコマンドライン引数で指定する方法もあります。
java -jar myapp.jar --spring.profiles.active=prod
このようにして、任意のプロファイルを指定して起動させることが可能です。
3. application-{profile}.properties の活用
Spring Bootでは、プロファイルごとの設定をファイル分割して管理することができます。ファイル名の末尾にプロファイル名をつけることで、そのプロファイルが有効なときだけ読み込まれるようになります。
例として、次のような設定ファイルを用意します:
- application.properties(共通設定)
- application-dev.properties(開発環境用設定)
- application-prod.properties(本番環境用設定)
そして、spring.profiles.activeでdevを指定すれば、application-dev.propertiesの内容が読み込まれます。
4. @Profileアノテーションの基本
@Profileアノテーションは、Javaクラスやメソッドに付けて、特定のプロファイルがアクティブなときだけBeanとして登録するために使用されます。
次の例では、開発環境専用のBeanを定義しています:
@Configuration
@Profile("dev")
public class DevConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.build();
}
}
このDevConfigクラスは、プロファイルにdevが指定されているときだけ有効になります。
5. プロファイルを使ったBeanの切り替え例
Spring Bootアプリケーションでよく使われるのが、データベースやメール送信機能などの環境依存コンポーネントを、プロファイルごとに切り替える方法です。
以下に、開発と本番で異なる実装を提供する例を紹介します。
public interface MailService {
void sendMail(String to, String message);
}
@Service
@Profile("dev")
public class DummyMailService implements MailService {
public void sendMail(String to, String message) {
System.out.println("開発用ダミーメール:" + to + " " + message);
}
}
@Service
@Profile("prod")
public class RealMailService implements MailService {
public void sendMail(String to, String message) {
// 本番用のメール送信処理
}
}
このように、開発時はログ出力だけにし、本番では実際にメールを送信する実装を切り替えることができます。
6. プロファイルが設定されていないときの動作
プロファイルが明示的に指定されていない場合、@Profileが付いたクラスは無視され、読み込まれません。そのため、必ずspring.profiles.activeの指定を行うことが重要です。
なお、条件に応じてプロファイルを自動切り替えしたい場合は、デフォルトプロファイルの設定も活用できます。
spring.profiles.default=dev
7. 複数のプロファイルを同時に指定する
Spring Bootでは、カンマ区切りで複数のプロファイルを同時にアクティブにすることが可能です。
spring.profiles.active=dev,test
このようにすると、devとtestの両方の設定やBeanが有効になります。複雑な構成を実現したいときに便利です。
8. Spring Bootプロファイル機能の活用シーン
プロファイルの活用は、開発・テスト・本番の各環境に応じた設定を安全に管理するために不可欠です。
- 開発環境では、H2などのインメモリDBを使用
- テスト環境では、モックサービスやStubを有効化
- 本番環境では、実際のデータベースやメール送信サービスを使う
このように、Spring Bootのプロファイル機能を使えば、コードの修正を最小限に抑えつつ、柔軟な環境構成を実現できます。
9. Spring Bootアプリケーションでプロファイルを確認する方法
現在アクティブになっているプロファイルを確認するには、次のようなコードを使用します。
@RestController
public class ProfileCheckController {
@Autowired
private Environment environment;
@GetMapping("/profile")
public String getActiveProfile() {
return String.join(", ", environment.getActiveProfiles());
}
}
このエンドポイントにアクセスすると、現在有効なプロファイルを確認することができます。
Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。
Spring Framework超入門をAmazonで見る※ Amazon広告リンク