そもそも「設定ファイルフォーマット」という表現が正しいのかどうかもあれですが、いろいろあるようなので観測できた限りを並べてみようと思いました。
それぞれ詳細は書かないのでどんなのがあるか眺めるぐらいの用途でしか使えません。
JSON (JavaScript Object Notation)
直訳: JavaScriptオブジェクト表記
IETF STD 90、RFC 8259とECMA-404 2nd editionで国際標準が定められている。
コメントが書けないということもあり、人間には嫌われている。
多くのプログラミング言語実装(ライブラリ含む)で、同じ結果を出してくれることが多いので安心感はある。
{
"Comment": "こんな感じ",
"key1": "value",
"key2": "value"
}
YAML (YAML Ain't Markup Language)
直訳: YAMLはマークアップ言語ではありません
インデントによるデータの記述(ブロックスタイル)とJSONっぽい記述(フロースタイル)で表現される。
実装による結果の違いとYAMLのバージョン違いでハマることがある。ノルウェー問題とかには気をつける必要がある。
# こんな感じ
root:
key1: value
key2: value
TOML (Tom's Obvious Minimal Language)
直訳: トムの明白な最小言語
INIっぽい記述方法。INIよりは多くのデータ型を表現できる。しっかりと仕様が決められている。
最近TOML仕様のバージョン1.0がリリースされた。
# こんな感じ
[section]
key1 = "value"
key2 = "value"
ここからはJSONっぽい何かをいくつか書きます。
JSON5
ES5.1の仕様を取り入れたJSON。シングルクォートOKとか、キーはクォートなしでもアリとか。コメントも書ける。
{
// こんな感じ
key: 'value',
}
JSONC (JSON with comments)
コメントが書けるJSON。ケツカンマもOK。
{
// こんな感じ
"key": "value",
}
Hjson
人間が書きやすい読みやすいJSONを目指しているらしい。現時点では、いくつかの言語実装のメンテナがいなくて困っているようだ。
{
# こんな感じ
key: value
}
CSON (CoffeeScript-Object-Notation)
直訳: CoffeeScriptオブジェクト表記
CoffeeScriptなフォーマットのJSON。
# こんな感じ
key: [
'value1'
'value2'
'value3'
]
以上でJSONっぽい何かは終了です。
XML (Extensible Markup Language)
直訳: 拡張マークアップ言語
タグで表現されるあれ。設定ファイル的に使われることもあるけど、タグ名、属性、コンテンツが何をどう示すのか読み込む側次第なので、設定ファイルとしては人間には書けない読めない印象がある。
<!-- こんな感じ -->
<key>value</key>
INI
INIは Initialization の略らしい。
Windowsによくいる。仕様は定められていないらしく方言が多いらしい。
; こんな感じ
[section]
key = value
PLIST (property list)
Macにいる。
// こんな感じ
{
"key" = "value";
}
XML形式のもあるそう。
yarn.lock
Yarnのlockファイルに使われる独自フォーマット。
このフォーマットの名前なんて言うんだろうと思って頑張って調べたのに、名前なんて無いただの野良フォーマットだった。
.properties
Javaといえば.properties
。エンプラ界隈ではJava以外で使うこともあるとかないとか。文字コードの問題で悪名高い。
# こんな感じ
key1 = value
key2 : value
HOCON (Human-Optimized Config Object Notation)
直訳: 人間に最適化された構成オブジェクト表記
Play Framework 以外で使っているところはあるのでしょうか?
→ あるらしい。コメント参照。
Amazon Ion
AmazonのOSSでたまに現れる形式だとかの噂はあるが真偽は不明。
HCL (HashiCorp Configuration Language)
Terraformにいるそう。
UCL (Universal Configuration Language)
HCLもそうだけど、nginxの設定を参考にしているらしい。nginxのフォーマットを標準化してくれたらいいのに。。。
CUE (Configure Unify Execute)
Goの実装しかないのかな?
CSV
これが設定ファイルとして使われてたら僕は逃げ出す準備をする。