9.

properties(.properties)の完全ガイド — Java の設定ファイル・Spring Boot application.properties・i18n

編集
この記事の要点
  • .properties は Java エコシステムで標準的に使われるキー=値形式の設定ファイルjava.util.Properties クラスでロードする
  • 1 行に key=value または key:value を書く。空白区切りも許容、= 前後の空白は無視される
  • コメントは # または ! で始まる行。値を継続させたい場合は行末に \ を置く
  • ISO-8859-1 が伝統的なデフォルトエンコーディング。日本語は native2ascii でユニコードエスケープ (\u3042) に変換するか、Java 9+ で UTF-8 直接読み込みを行う
  • Spring Boot では application.properties がアプリ設定のデフォルト。同等の YAML 版 (application.yml) も選べる
  • ResourceBundle と組み合わせて国際化 (i18n)のメッセージ辞書としても使う(messages_ja.properties など)
  • JSON/YAML に比べて階層構造を表現しにくい。ドット区切り (app.db.url=...) で疑似階層を表現するのが慣習

概要

.properties は、Java で長年使われてきたキー=値形式の設定ファイルである。標準ライブラリ java.util.Properties クラスがそのまま読み書きできる形式で、Java の世界では「アプリの設定」「国際化メッセージ」「ライブラリのデフォルト挙動」など、ありとあらゆる場面で目にする。拡張子は .properties。形式自体は極めて単純で、特別なパーサを要しないテキストファイルである。

Spring / Spring Boot を触ったことのある開発者は application.properties という名前を必ず目にしたことがあるはずで、これがまさに同形式のファイル。データソースの接続情報、ログレベル、ポート番号、機能フラグなど、アプリの起動時パラメータを宣言する用途で使われる。Log4j や JBoss 等、Java 系ミドルウェアの設定にも採用例が多い。

内部構造・構文

形式はシンプルで、1 行 1 エントリ。keyvalue=:、または空白文字(スペース/タブ)で区切る。key 内には区切り文字を入れたい場合 \\ でエスケープする。

# これはコメント
! これもコメント

# 基本: key=value
app.name=My Application
app.version=1.2.3

# コロン区切りも可
server.port: 8080

# 空白区切りも可(推奨はしない)
db.url jdbc:mysql://localhost:3306/mydb

# 値の継続: 行末に \
log.message=これは長い長い長い長い長い長い長い長い\
メッセージです。

# 日本語はユニコードエスケープ (旧来の方法)
greeting=こんにちは

# Spring Boot 風のドット区切りで疑似階層を表現
spring.datasource.url=jdbc:postgresql://localhost/mydb
spring.datasource.username=admin
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update

コメントは行頭の # または ! から行末まで。空行は無視される。=: の前後の空白は読み飛ばされるため、整列のためにスペースを入れても問題ない。

注意したいのがエンコーディングで、伝統的に .properties は ISO-8859-1(Latin-1)として解釈される。日本語を直接書き込んだ古いプロジェクトでは、文字化けを防ぐために JDK 同梱の native2ascii ツールで 形式のユニコードエスケープに変換するのが定番だった。Java 9 以降は Properties.load(Reader) 経由で UTF-8 として直接読めるようになり、ビルドツール (Maven/Gradle) も自動で UTF-8 として扱えるため、現代のプロジェクトでは日本語をそのまま書いて UTF-8 で保存するケースが増えている。

主な用途

  • アプリケーション設定 — Spring Boot の application.properties、Tomcat の catalina.properties
  • 国際化 (i18n) メッセージ辞書messages.properties(デフォルト)、messages_ja.properties(日本語)、messages_en_US.properties(米英語)を ResourceBundle で切り替え
  • ライブラリのデフォルト値 — Logback / Log4j のフォーマット指定、Hibernate の方言指定など
  • 環境差分の管理application-dev.properties / application-prod.properties のように環境別にファイルを分け、Spring Profile で切替
  • ビルドツール — Gradle の gradle.properties でビルド時プロパティを定義

関連形式との比較

形式主な舞台階層コメント
.propertiesJavaドット区切りで疑似文字列のみ# / !
.yml / .yamlJava / Ruby / DevOpsインデントで自然に階層文字列 / 数値 / 真偽値 / リスト#
.json言語横断、API波括弧でネスト4 種類のスカラー + 配列 + オブジェクト不可
.tomlRust 等の設定セクション + ドット豊富(日時含む)#
.ini古典的設定セクション [name]文字列; / #

Spring Boot は application.propertiesapplication.yml のどちらでも読めるが、階層を持つ複雑な設定は YAML、フラットでシンプルな設定は properties、と使い分けるチームが多い。

編集・パーサ・ツール

  • Java 標準java.util.Propertiesload(InputStream) / load(Reader) / store() でロード・保存
  • Spring@Value("${app.name}")@ConfigurationProperties で型安全に注入
  • エディタ — IntelliJ IDEA / Eclipse は properties ファイルに専用ハイライト・補完を持ち、Spring プロジェクトでは設定キーの補完まで効く
  • 変換ツール — properties ↔ YAML 変換ツール(Spring Boot 公式に Properties to YAML Converter あり)
  • i18nResourceBundle.getBundle("messages", Locale.JAPAN) で対応する messages_ja.properties を読む

注意点・落とし穴

  • 文字コード — 旧来の ISO-8859-1 で読まれると、日本語が文字化けする。プロジェクトで使う JDK バージョンとビルドツールの設定を確認し、UTF-8 統一を明示する
  • バックスラッシュ — Windows のパス C:\app\config を書くときは \\ でエスケープする必要がある (C:\\app\\config)
  • 値の継続行 — 行末の \ は次行と連結するため、Windows パスをそのまま書くと意図しない継続が起こる
  • 階層構造の表現が苦しい — ドット区切りで疑似階層を表現するが、配列を含む構造は list[0] / list[1] のような苦しい書き方になる
  • 機微情報の平文管理 — DB パスワードや API キーを直書きすると流出リスク。環境変数注入や Vault / Spring Cloud Config / Secrets Manager との連携を検討
  • 順序不定Properties は HashMap ベースで、保存・列挙時の順序が保証されない。順序が必要なら LinkedProperties 等を自前で用意

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. HTML(.html / .htm)
  2. CSS(.css)
  3. JSON(.json)
  4. XML(.xml)
  5. YAML(.yaml / .yml)
  6. TOML(.toml)
  7. env(.env)
  8. INI(.ini)
  9. properties(.properties)
  10. conf(.conf)

最近更新/作成されたページ