application.ymlが読み込まれないときの対処法【初心者向けにやさしく解説】
新人
「Spring Bootの設定ファイルとして使うapplication.ymlって、読み込まれないことがあるんですか?」
先輩
「あるよ。特に初心者が開発環境で設定を間違えたり、ファイルの場所を誤ったりすることで起こることが多いんだ。」
新人
「えぇ……設定ミスって怖いですね。どんなときに起こるのか教えてもらえますか?」
先輩
「もちろん。まずはapplication.ymlが何かというところから見ていこう。」
1. application.ymlとは何か?
application.ymlは、Spring Bootでアプリケーションの設定を行うための重要なファイルです。サーバーポートの指定やデータベース接続情報、ログ出力の設定などを記述することができます。
このapplication.ymlファイルを使うことで、設定を簡潔にまとめ、複数のプロファイル(devやprodなど)を一つのファイルに定義できます。
通常は、次のようにsrc/main/resourcesフォルダ内に配置します。
src
└── main
└── resources
└── application.yml
このファイルが見つからなかったり、文法にエラーがあると、Spring Bootは設定を正しく読み込めなくなります。
2. Spring Bootでapplication.ymlを使う意味と役割
application.ymlは、アプリケーション全体の設定を統一して管理するために使います。特に、複数のプロパティを構造的に書けるのが特徴です。たとえば、以下のように書くことでポートや文字コードの設定ができます。
server:
port: 8081
servlet:
encoding:
charset: UTF-8
enabled: true
Spring Bootは起動時にこのファイルを自動的に読み込みますが、設定ミスや場所の誤りがあると読み込みに失敗します。
特にPleiades環境でGradleプロジェクトを作成している場合、resources配下に配置されていないと無視されてしまうので注意が必要です。
3. 読み込まれないときに考えられる一般的な原因
ここではapplication.ymlが読み込まれないときにありがちな原因を紹介します。
application.ymlは必ずsrc/main/resourcesフォルダに置く必要があります。間違ってsrcやmain直下に配置すると、読み込まれません。
よくある間違いとして、ファイル名をaplication.yml(pが一つ足りない)やapplication.yamlと誤記することがあります。
Spring Bootはapplication.ymlかapplication.propertiesしか自動で読み込まないため、名前の誤りは致命的です。
ymlファイルはインデントに厳格です。スペースの数が揃っていなかったり、コロン:の後にスペースがないと、読み込みに失敗します。
server:
port: 8080 # ← インデント不足でエラー
Gradleでビルドする際に、resourcesフォルダがクラスパスに含まれていないと、application.ymlが認識されません。build.gradleに次のような設定があるかを確認してください。
sourceSets {
main {
resources {
srcDir 'src/main/resources'
}
}
}
Pleiades(Eclipseベース)でGradleプロジェクトを扱っていると、プロジェクトの再読み込みが必要なケースがあります。「プロジェクトの再ビルド」や「クリーン」を行うことで、読み込みエラーが解消することもあります。
application-dev.ymlなど、特定のプロファイル用ファイルを作成している場合、起動時にspring.profiles.activeが指定されていないとその設定が読み込まれません。
spring:
profiles:
active: dev
この設定がapplication.ymlに記述されていない、または誤っていると、意図した設定ファイルが無視される原因になります。
まれに、application.ymlがUTF-8以外で保存されていて、設定が正しく読み込まれないことがあります。エディタで保存形式を確認し、「UTF-8(BOMなし)」で保存しましょう。
4. ファイル配置ミスによる読み込みエラーの原因と確認方法
application.ymlがSpring Bootに読み込まれない原因として、最も多いのが「ファイルの配置場所が間違っている」ことです。特にpleiades環境でGradleを使っている場合、このミスが初心者に多く見られます。
Spring Bootでは、設定ファイルは必ずsrc/main/resourcesディレクトリ内に存在している必要があります。これは、resources配下がビルド時にクラスパスへ自動的に追加される仕組みになっているからです。
以下のように正しいフォルダ構成になっているか、pleiadesで確認しましょう。
your-project/
└── src/
└── main/
└── resources/
└── application.yml
一方で、誤ってsrc/main/javaやsrc直下などに置いてしまうと、アプリケーション起動時に読み込まれず、設定が反映されません。Spring Bootではこの配置を自動的に検出できないため、ファイルを正しい場所に移動させる必要があります。
5. ymlの文法ミスで読み込まれないケースと修正例
application.ymlは、見た目がシンプルで書きやすい一方、文法に非常に厳格な形式が求められます。特に、インデントのミスやコロン:の使い方の誤りで、Spring Bootが読み込みエラーを出すことがあります。
YAMLでは、スペースの数が重要です。スペースの数がバラバラだったり、タブを使ってしまうと正しく解釈されません。
server:
port: 8080 # ← インデント不足(正しくは2スペース必要)
YAMLでは、コロンの直後には必ずスペースが必要です。これがないとパースエラーになります。
spring:profiles:active:dev # ← 誤り
正しい書き方は次のようになります。
spring:
profiles:
active: dev
文字列の値に記号(例::や@など)が含まれる場合は、引用符("または')で囲む必要があります。
spring:
application:
name: "my-app:dev" # ← 引用符が必要
YAMLに文法ミスがあると、Spring Boot起動時に次のようなエラーメッセージが表示されます。
Caused by: org.yaml.snakeyaml.error.MarkedYAMLException:
while scanning a simple key
このエラーが出たら、まずapplication.ymlのインデントや構文を確認しましょう。
6. Gradleプロジェクト特有の設定ミスの対処(resourcesの設定やビルド設定)
pleiades + Gradle環境では、application.ymlが正しく記述されていても、Gradleのビルド設定に不備があるとファイルがクラスパスに含まれず、読み込まれないことがあります。
Gradleでは通常、src/main/resourcesは自動的にクラスパスに含まれますが、明示的に設定しておいた方が安心です。build.gradleに以下のような記述があるかを確認してください。
sourceSets {
main {
resources {
srcDir 'src/main/resources'
}
}
}
Gradleビルド時にresourcesフォルダの内容が正しく出力ディレクトリに反映されないことがあります。これはタスクの設定ミスや依存関係の不備によるものです。
この問題が発生した場合は、次のコマンドでプロジェクトをクリーンしてからビルドをやり直してください。
./gradlew clean build
pleiades環境では、Gradleプロジェクトの再読み込みやGradleタスクの再実行が必要な場合があります。ビルドに失敗していたり、依存関係が正しく読み込まれていないとapplication.ymlの読み込みに影響します。
次のような手順で解消を試みてください。
- プロジェクトを右クリック → Gradle → 「プロジェクトを同期」
- Gradleタスクから「build」や「clean」を手動実行
- エラーがある場合は「コンソールビュー」で内容を確認
pleiadesでアプリケーションを実行するときに、起動構成が正しくないとapplication.ymlが適用されないことがあります。Run Configurationで「プロジェクトのクラスパス」を使って実行する設定になっているか確認してください。
プロジェクト内にapplication.ymlが複数あると、意図しないファイルが読み込まれることがあります。特にマルチモジュール構成のGradleプロジェクトでは注意が必要です。
使用されているapplication.ymlがどれかを確認するには、アプリケーション起動時のログ出力を見て、設定の内容が想定通りかをチェックします。
7. Spring Bootのプロファイル設定による読み込みの違い(dev、prodなど)
Spring Bootでは、application.ymlを使って環境ごとの設定を分離できる「プロファイル機能」が用意されています。たとえば、開発環境用にはapplication-dev.yml、本番環境用にはapplication-prod.ymlというように、設定を分けて管理できます。
プロファイルごとのapplication-xxx.ymlが読み込まれるためには、spring.profiles.activeというプロパティで、アクティブなプロファイルを指定する必要があります。
spring:
profiles:
active: dev
この設定により、application-dev.ymlがapplication.ymlに追加する形で読み込まれるようになります。ただし、プロファイル名の指定が間違っていたり、そもそも該当するapplication-dev.ymlが存在していないと、設定が正しく読み込まれません。
また、Pleiadesからアプリケーションを起動する際に、プロファイル指定が起動引数に含まれていないと無視されます。Run Configurationに以下のようなVMオプションを追加して確認してください。
-Dspring.profiles.active=dev
プロファイルが正しく機能していないときは、まずこの起動オプションと、該当ファイルの存在を確認しましょう。
8. @PropertySourceや明示的な設定ファイル読み込みによる回避方法
application.ymlがうまく読み込まれない場合、@PropertySourceアノテーションを使って別の設定ファイルを明示的に読み込む方法もあります。これはSpring Frameworkの機能で、JavaConfigクラスや構成用クラスに付与することで利用できます。
@Configuration
@PropertySource("classpath:custom-settings.properties")
public class AppConfig {
// 必要に応じて@Beanを定義
}
このように書くことで、通常のapplication.ymlとは別に、custom-settings.propertiesという設定ファイルを読み込むことができます。ただし、.yml形式の読み込みには非対応なので、.propertiesファイルで定義する必要があります。
どうしてもyml形式を使いたい場合は、Spring Bootの構成クラスに@ConfigurationPropertiesを併用し、Bean定義と紐付ける方法が必要になります。
@Component
@ConfigurationProperties(prefix = "sample")
public class SampleConfig {
private String name;
private int port;
// ゲッターとセッターを定義
}
この設定では、application.yml内に以下のような記述が必要です。
sample:
name: testapp
port: 8080
もしSpring Bootの構成方法や読み込み順をカスタマイズしたい場合、SpringApplicationBuilderなどを使った起動制御が必要ですが、初心者にはまずはapplication.ymlの正しい配置と構文を整えることが大切です。
9. 最終的なデバッグ方法とログ確認のコツ(application.propertiesとの比較も)
ここまでの対処を行ってもapplication.ymlが正しく読み込まれない場合は、Spring Bootの起動ログを確認して原因を特定することが重要です。
Spring Bootでは、起動時に読み込んだプロパティの内容をログで確認できます。たとえば、server.portをapplication.ymlで設定している場合、ログに指定したポート番号が表示されているかチェックしましょう。
application.ymlが読み込まれているかを細かく確認するためには、ログレベルをDEBUGに変更します。設定例は以下の通りです。
logging:
level:
org.springframework: DEBUG
この設定により、プロパティの読み込み状況やバインディング処理の詳細が出力されるようになります。
Spring Bootではapplication.ymlとapplication.propertiesのどちらも設定ファイルとして使用可能です。ただし、yml形式はインデントなどの文法ミスが発生しやすく、初心者にはproperties形式のほうが扱いやすい場合もあります。
例えば、以下は同じ内容をapplication.propertiesで記述した例です。
server.port=8080
spring.profiles.active=dev
文法的なミスを避けたい、あるいはプロファイル切り替えをシンプルに行いたい場合には、一時的にapplication.propertiesに切り替えてみるのも手段の一つです。
より詳細にプロパティの状態を確認したい場合は、Spring Boot Actuatorというライブラリを使うことで、HTTPエンドポイントから現在の設定値を取得することも可能です。ただし、初心者はまず、ログ出力と起動確認から丁寧に進めるのがおすすめです。