設定ファイルフォーマットまとめ


そもそも「設定ファイルフォーマット」という表現が正しいのかどうかもあれですが、いろいろあるようなので観測できた限りを並べてみようと思いました。
それぞれ詳細は書かないのでどんなのがあるか眺めるぐらいの用途でしか使えません。

JSON (JavaScript Object Notation)

直訳: JavaScriptオブジェクト表記

IETF STD 90RFC 8259ECMA-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

これが設定ファイルとして使われてたら僕は逃げ出す準備をする。