😸

ymlとpropertyのどちらが推奨されるのか

2024/09/09に公開

結論

ymlのほうが圧倒的に見やすい。と個人的に思います
※設定ファイルに限る

そもそもymlとは?

yml(YAML Ain't Markup Language)の略。
propertyと同じ役割を持ち、ソフトコーディングとすべく環境ごとの設定情報を外部で管理する場合に用いられます。
例)

  • DBの接続設定・・・・接続先、パスワード、ドライバなど、環境毎に利用するDBを変更したい場合
  • メッセージ・・・国際対応などで異なる言語のメッセージを返却したい場合

ymlとpropertyはなにが違うのか

大きく以下が異なります。

  • yml・・・階層構造
  • property・・・キーバリュー方式

SpringBootの場合、値の利用方法はyml,propertyともに同じです。

ymlで記載した場合とpropertyで記載した場合

propertyで記載した場合

[application.properties]
# アプリケーション名
spring.application.name=demo

# データベースの接続URL
spring.datasource.url=jdbc:mysql://localhost:3306/tododb

# データベースのユーザー名
spring.datasource.username=root

# データベースのパスワード
spring.datasource.password=my-secret-pw

# メッセージ
message.exception.badcredentials=認証情報が無効です。ユーザー名またはパスワードが正しくありません。

ymlで表すと、、、

[application.yml]
# アプリケーション名
spring:
  application:
    name: demo

# データベースの設定
spring:
  datasource:
    # データベースの接続URL
    url: jdbc:mysql://localhost:3306/xxxx
    # データベースのユーザー名
    username: xxxx
    # データベースのパスワード
    password: xxxxxxxx
    # JDBCドライバのクラス名
    driver-class-name: com.mysql.cj.jdbc.Driver

# メッセージ設定
message:
  exception:
    badcredentials: "認証情報が無効です。ユーザー名またはパスワードが正しくありません。"

ymlのほうが見やすい

特に大量のメッセージがある場合、どこに追加すればいいかがわかりやすいためチームでも管理も楽そうです。
(ただしすべての値にコメントをいれると見づらそう)

デメリット

  • メッセージを管理する場合、messages.ymlではMessageSourceでの取得ができないのでpropertyの管理のほうがいいかも
  • 実際にプロパティを利用するときは「xxx.xxx.xxx」として利用するためpropertyではそのままコピペできるがymlだと少し大変

総評

階層構造になっているため見やすく、スケールが効きそうなymlはpropertyの代替案として選択肢に入ると思います。

Discussion