このツールの動作
入れ子は点に、並びは添字になります。
db:
host: db.example.com
port: 5432
hosts:
- a
- b
db.host=db.example.com
db.port=5432
hosts[0]=a
hosts[1]=b
[i] の形は Spring の慣習で、多くの読み手が期待する書き方です。
エスケープこそが仕事のすべて
.properties は単純に見えて、そのうち三つの規則が黙ってデータを食べます。
空白で始まる値。 Properties.load は区切りの後ろの空白を読み飛ばすので、key= x は x として戻ります。最初の空白を保護すれば——key=\ x——値は生き残ります。末尾の空白はそのままで構いません。
# または ! で始まるキー。 その行はコメントです。キーも値も含めて項目まるごとが読み込み時に消えます。この二文字がキーの先頭に来るときは保護します。
キーの中の =、:、空白も保護し、逆斜線もすべて保護します。値の中の改行は \n、タブは \t になります。
同じ名前に平坦化される二つのキー
"a.b": 1
a:
b: 2
どちらも a.b になります。形式はこれを区別できず、Properties.load は後のほうを採ります。つまり、二つの値のうち一方は、何の断りもなく消えることになります。
変換は止まり、そのキーを告げます。この道具が変換ではなく拒否を選ぶ唯一の場面であり、変換すれば嘘になる場面でもあります。
型は存在しない
.properties の中身はすべて文字列です。true は "true"、42 は "42"、null は空の値として戻ります。意味を決めるのは読み手です。Boolean.parseBoolean、Integer.parseInt、そして「空」が何を意味するかの判断が要ります。
文字コードについて一言
出力はアクセント付きの文字も含む UTF-8 のテキストです。現代の Java が読むのはこれであり、Properties.load(Reader) が常に読んできたのもこれです。
ただし Properties.load(InputStream)——より古く、より広く使われている呼び出し——は ISO-8859-1 として読み、café は文字化けします。読み手がそれなら、Reader を取る多重定義に切り替えるか、ファイルを渡す前に非 ASCII を \uXXXX に置き換えてください。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。