application.propertiesとymlの違いとは?初心者向けに比較
新人
「Spring Bootでよく出てくるapplication.propertiesとかapplication.ymlって、いったい何に使うんですか?」
先輩
「それはSpring Bootで設定を管理するためのファイルだよ。アプリの動作に関わる様々な設定をまとめておけるんだ。」
新人
「でも、なんで.propertiesと.ymlの2種類あるんですか?どっちを使えばいいのか迷っちゃいます…」
先輩
「それじゃあ、それぞれの違いや使い方を初心者向けにわかりやすく解説していこう!」
1. application.propertiesやapplication.ymlとは?用途と役割
Spring Bootでは、アプリケーションの設定を記述するためにapplication.propertiesやapplication.ymlというファイルを使用します。これらは「設定ファイル」と呼ばれ、アプリケーションの起動ポート、データベースの接続情報、ログの設定などを記述する場所です。
例えば、以下のようにアプリのポート番号を指定することができます。
server.port=8081
このように、開発者がアプリの動作を細かく制御できるのが、設定ファイルの役割です。特に、複雑なJavaコードを書かずに、設定だけで挙動を変えられるのは大きなメリットです。
Spring Bootでは、デフォルトでsrc/main/resourcesフォルダ内にあるapplication.propertiesやapplication.ymlが自動的に読み込まれます。
2. Spring Bootでの設定ファイルの読み込みと使い方の基本
Spring Bootでは、application.propertiesとapplication.ymlのどちらか一方、または両方を使用することができます。ただし、両方が存在する場合、優先順位や上書きのルールに注意が必要です。
基本的に、プロファイルによって切り替えるためのapplication-{profile}.ymlやapplication-{profile}.propertiesなども用意できます。
例えば、以下のように記述することで、開発用と本番用で設定を切り替えることができます。
spring.profiles.active=dev
上記のように指定すれば、application-dev.propertiesまたはapplication-dev.ymlが読み込まれます。
また、Spring Bootは「外部設定」の仕組みを持っており、コマンドライン引数、環境変数、YML、Propertiesファイルなど、さまざまな設定の読み込み元があります。
設定ファイルの階層は以下のように優先されます:
- コマンドライン引数
- 環境変数
application.ymlやapplication.properties
例えば、コントローラクラスで設定値を利用するには、@Valueアノテーションを使って以下のように記述します。
@Controller
public class SampleController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/")
public String index(Model model) {
model.addAttribute("port", serverPort);
return "index";
}
}
このようにすることで、設定ファイルで指定したserver.portの値をJavaコードで利用できるようになります。
設定値の変更を再ビルドなしで反映できるというのも、初心者にとっては非常に便利なポイントです。
3. application.propertiesとapplication.ymlの文法の違いとは?
application.propertiesとapplication.ymlは、どちらもSpring Bootの設定ファイルですが、記述方法(文法)に大きな違いがあります。
application.propertiesは「キー=値」の形式で1行ずつ設定を記述します。一方で、application.ymlはインデントで階層構造を表す、YAML形式で書かれます。
文法の違いを簡単にまとめると、以下のようになります。
| 項目 | application.propertiesの書き方 | application.ymlの書き方 |
|---|---|---|
| 形式 | key=value | key: value |
| ネスト構造 | ドット区切りで記述 | インデントで階層を表現 |
| コメントの書き方 | # コメント | # コメント |
| リストの表現 | カンマ区切り | - を使って記述 |
このように、読みやすさ・階層構造の表現力という点では、application.ymlが優れています。ただし、インデントのミスでエラーになりやすいため、初心者にはapplication.propertiesの方が扱いやすい場合もあります。
次に、同じ設定をpropertiesとymlそれぞれで書いた場合の具体例を比較してみましょう。
4. 同じ設定を記述する場合の例(application.propertiesとapplication.ymlの比較)
まずは、アプリケーションのポート番号を指定する場合の例です。
【application.propertiesの書き方】
server.port=8081
【application.ymlの書き方】
server:
port: 8081
yml形式では、インデントによって階層を表現します。次に、データベース接続設定の例を見てみましょう。
【application.propertiesの書き方(DB接続設定)】
spring.datasource.url=jdbc:mysql://localhost:3306/sampledb
spring.datasource.username=root
spring.datasource.password=pass123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
【application.ymlの書き方(DB接続設定)】
spring:
datasource:
url: jdbc:mysql://localhost:3306/sampledb
username: root
password: pass123
driver-class-name: com.mysql.cj.jdbc.Driver
このように、application.ymlでは見た目がすっきりしていて、構造がわかりやすいという利点があります。ただし、空白やインデントの間違いでアプリが起動しなくなるリスクがあるため、初心者は注意が必要です。
また、リスト構造の設定を行いたい場合も、両者で記述が異なります。たとえば、複数の許可されたIPアドレスを設定したい場合の例を見てみましょう。
【application.propertiesでのリスト表現】
app.allowlist=192.168.0.1,192.168.0.2,192.168.0.3
【application.ymlでのリスト表現】
app:
allowlist:
- 192.168.0.1
- 192.168.0.2
- 192.168.0.3
上記のように、リスト形式の記述では.ymlの方が読みやすく、編集もしやすいと言えます。チーム開発などで設定の見通しをよくしたいときには、application.ymlが好まれるケースが多くあります。
一方で、既存のJavaプロパティ形式に慣れている人や、設定が少ない小規模プロジェクトでは、application.propertiesが扱いやすいという意見も多いです。
開発チームのスキルやプロジェクトの規模に応じて、適切な形式を選ぶことが大切です。次回は、実際のプロジェクトではどちらの形式が使われているのか、よくある使い分けのパターンや、初心者がどちらを使えば良いかについて解説していきます。
5. application.propertiesとapplication.ymlの使い分けポイント
Spring Bootの設定ファイルとして、application.propertiesとapplication.ymlのどちらを使うべきか悩む初心者は多いです。それぞれにメリットとデメリットがあり、プロジェクトの特性やチームのスキルに応じて選ぶのがポイントです。
以下に、どちらを選べばよいか判断するための基準をまとめます。
- 設定の階層が浅く、内容がシンプルな場合 →
application.propertiesが向いています。 - 設定項目が多く、構造が深い(ネストが多い)場合 →
application.ymlが見やすくなります。 - チーム全体がYAMLに慣れているなら →
application.ymlで統一すると良いでしょう。 - 過去の資産やサンプルコードが.propertiesで多くあるなら →
application.propertiesを選ぶと学習しやすくなります。
プロジェクトの初期段階では、以下のように考えるのがおすすめです。
- 小規模開発や試作段階 →
application.propertiesで素早く試す - 本番環境も視野に入れた中〜大規模開発 →
application.ymlで構造を明確に
どちらを選んでも、基本的な設定内容に違いはないため、まずは片方を使って慣れておくのが初心者にとっての近道です。
6. 現場でよく使われるパターンとは?実際のプロジェクトでの使い分け例
実際の現場では、設定ファイルの使い方には以下のようなパターンがあります。
- 開発段階では.properties、本番では.yml
開発中は設定項目が少ないため.propertiesで記述し、最終的に.ymlにまとめて移行するという方法です。 - 設定項目ごとにファイルを分ける
Spring Bootでは@PropertySourceや@ConfigurationPropertiesを使って複数の設定ファイルを読み込むことが可能です。 - プロファイルごとの設定
環境ごとにapplication-dev.yml、application-prod.ymlを用意して、動的に切り替えることも一般的です。
例えば、以下のように設定することで開発用と本番用を切り替えられます。
spring.profiles.active=dev
現場の実例としては、以下のようなケースが多くあります。
- 既存プロジェクトの継続開発 → そのまま.propertiesを使用
- 新規構築でチーム開発 → 可読性を重視して.ymlを採用
- 外部ファイルと連携 → yaml形式の方が他システムと相性がよい
また、Spring Bootは設定ファイルの優先順位を自動的に判断してくれるため、必要に応じてapplication.propertiesとapplication.ymlを併用するプロジェクトも存在します。
ただし、同じプロパティを両方に記述してしまうと、意図しない設定が適用される恐れがあるため注意が必要です。
7. 初心者が設定ファイルでつまずかないためのコツ
Spring Bootの設定ファイルは、見た目は簡単でも初学者がつまずきやすいポイントがいくつかあります。以下に、初心者向けの注意点やコツをまとめます。
- YAMLでのインデントミス
半角スペースでインデントを行う必要があります。タブを使うとエラーになります。 - 階層のズレ
プロパティ名の階層を間違えると、意図した値が反映されません。構造を意識して記述しましょう。 - 設定ファイルが読み込まれていない
配置場所が正しいか確認しましょう。src/main/resourcesに配置されているか要チェックです。 - プロファイルが意図せず切り替わっている
spring.profiles.activeの設定に注意し、誤って本番用が読み込まれないようにしましょう。
- @Valueでプロパティを参照するときは、プロパティ名に誤字がないか確認
- プロジェクトをGradleでビルドする場合は、設定ファイルの内容が自動反映されるので、都度再ビルドしなくてOK
- 設定ファイルのバックアップを取っておくと、間違って書き換えてもすぐに戻せる
以下は、プロパティをコントローラ内で使う際の例です。
@Controller
public class ConfigExampleController {
@Value("${spring.datasource.url}")
private String dbUrl;
@GetMapping("/config-check")
public String showConfig(Model model) {
model.addAttribute("dbUrl", dbUrl);
return "configView";
}
}
このようにして、設定ファイルとJavaコードを連携させることで、コードの保守性が高まります。
初心者のうちは、設定ファイルを1つずつ手書きで試しながら、変更を即時反映させて動作確認するスタイルが学習効果も高くおすすめです。
Gradleでビルドし直さなくても反映されるという特性を活かして、どんどん書き換えと確認を繰り返すことで、設定ファイルへの理解が深まります。
Spring Bootの開発において、設定ファイルを正しく使いこなすことは必須スキルです。どちらの形式でも、基本を押さえて丁寧に扱うことが、エラーの少ない開発につながります。