無理しないでゆっくり休んでね!

【Java】.properties と .yml の違いまとめ(設定ファイルとしての使い分け)

Java 開発において、設定ファイルは主に以下の2種類が使われる:

  • .properties ファイル:プロパティ形式
  • .ymlファイル:YAML形式

どちらも設定値を外部から読み込むために使われ、Spring Boot に限らず Java の各種フレームワークや独自アプリでも使える。

.properties の特徴

書式

  • key=value の形式で、単純明快
  • 1行に1設定
# config.properties
app.name=MyTool
app.version=1.2.3
app.maxUsers=100

Java標準による読み込み例(java.util.Properties)

import java.io.*;
import java.util.*;

public class PropertiesReader {
    public static void main(String[] args) throws IOException {
        Properties props = new Properties();
        try (FileInputStream fis = new FileInputStream("config.properties")) {
            props.load(fis);
        }

        String name = props.getProperty("app.name");
        int maxUsers = Integer.parseInt(props.getProperty("app.maxUsers"));

        System.out.println("アプリ名: " + name);
        System.out.println("最大ユーザー数: " + maxUsers);
    }
}

利点

  • Java 標準(java.util.Properties)で読み込み可能
  • IDEやツールが対応しやすい(補完・ハイライトなど)
  • 行単位で完結 → トラブル時の原因切り分けがしやすい

使用例

  • Java SE のコンフィグファイル
  • 独自開発ツールや CLI の設定
  • JDBC 設定(JDBC接続用propertiesファイルなど)

.yml(YAML)の特徴

書式

  • インデントにより構造を表現
  • JSON と同じく入れ子構造を自然に書ける
# config.yml
app:
  name: MyTool
  version: 1.2.3
  maxUsers: 100
  features:
    - login
    - dashboard
    - settings
// @Value(単発)
@Value("${app.name}")
private String appName;


// @ConfigurationProperties(まとめて取得)
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
    private int maxUsers;
    // getter/setter
}

利点

  • 階層的な設定に強い
  • 配列やマップの表現が直感的
  • .json に比べて記述が簡潔でコメントも書きやすい

弱点

  • インデントミスしやすい
  • Java 標準では読み込めず、外部ライブラリ(SnakeYAMLなど)が必要

使用場面

  • Spring Boot の application.yml(代表例)
  • Micronaut、Quarkus など近年のフレームワーク
  • Kubernetes, GitHub Actions 等 DevOps 系統でも広く使用

まとめ

項目.properties.yml
書き方単一キーで1行階層構造・リスト対応
Java 標準対応java.util.Properties で読み込める標準では不可、外部ライブラリ必要
可読性単純で IDE 向き構造が可視化しやすい
設定が深くなる場合a.b.c.d.e=f で読みにくくなるインデントで構造化しやすい
エラー影響範囲1行だけ壊れるインデントミスで全体が壊れることも
DevOps や設定管理ツール非対応(使いにくい)よく使われる(GitHub Actions, K8s 等)

コメント

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