TOML フォーマッター
TOML(Tom's Obvious, Minimal Language)を整形・バリデーションします。key = value・テーブル・配列を読みやすく整列し、構文エラーがあれば行番号付きで表示します。
TOML の主なデータ型
| 型 | 記述例 | 説明 |
|---|---|---|
| 文字列(基本) | "hello" | ダブルクォートで囲む。\n・\t などのエスケープシーケンスが使える。 |
| 文字列(リテラル) | 'C:\path' | シングルクォートで囲む。エスケープ処理を一切行わないため、バックスラッシュを含むパス文字列に便利。 |
| 整数 | 42 | 10進数のほか、0x(16進)・0o(8進)・0b(2進)や 1_000 のようなアンダースコア区切りも可能。 |
| 浮動小数点数 | 3.14 | 指数表記(1e10)や inf・nan も有効な値として扱える。 |
| 真偽値 | true | true か false のいずれか。大文字始まり(True)は無効。 |
| 配列 | [1, 2, 3] | 角括弧内にカンマ区切りで値を並べる。末尾カンマも許可される。 |
| テーブル | [server] | セクションヘッダー以降の key = value が、そのテーブルの子要素になる。 |
| 配列テーブル | [[fruits-basket]] | 同名のテーブルを複数回繰り返すことで配列を表現する(例: 依存パッケージの複数定義)。 |
| 日付・日時 | 1979-05-27T07:32:00Z | RFC 3339 形式。引用符なしで書ける唯一の複合的な値。 |
Tips
- インライン配列・インラインテーブルは1行で完結する記法のみ対応しています。複数行にまたがる配列は事前に1行へまとめてから貼り付けてください。
- 整形結果は「=」の前後を必ず半角スペース1つに揃え、配列・インラインテーブルの区切りも「, 」に統一します。書き手ごとの表記ゆれを吸収できます。
- コメント(# 以降)は保持されますが、内容が変わらないよう「#」の直後に半角スペースを1つ補うだけの軽微な整形にとどめています。
- 連続する空行は1行にまとめて出力するため、テーブルごとの区切りが見やすくなります。
- このツールはブラウザ内で完結して処理されます。入力した設定ファイルの内容が外部サーバーに送信されることはありません。
よくある質問
[[section]] ヘッダーの整形自体は行いますが、同名セクションを1つの配列にまとめてJSONオブジェクトへ変換するような処理は行っていません。複雑な配列テーブル構造は、行単位の整形結果を目視で確認してからご利用ください。"""...""" や '''...''' は現時点では未対応で、その行はエラーとして検出されます。長文を扱う場合は、1行で書けるエスケープ形式の文字列に変換してからお試しください。
余談ですが ― TOML はなぜ「設定ファイルの共通語」になったのか
TOML は GitHub の共同創業者である Tom Preston-Werner が 2013 年に考案したフォーマットで、名前の「Tom's Obvious, Minimal Language」がそのまま設計思想を表しています。JSON のように機械にとって扱いやすく、かつ人間が素で読み書きしても迷わない構文を目指して作られました。
普及の決定打になったのは、Rust のパッケージマネージャー Cargo が設定ファイル形式に Cargo.toml を採用したことです。以降、Python のパッケージング標準を定めた PEP 518 が pyproject.toml を導入し、Python エコシステムの setup.py・setup.cfg・requirements.txt が乱立していた状況を一本化する役割も担いました。
YAML との最大の違いは「インデントに意味を持たせない」設計にあります。YAML はインデント幅のズレが構文エラーやデータ構造の誤認識を引き起こしやすい一方、TOML は [section] と key = value の組み合わせだけで階層を表現するため、コピー&ペーストによる事故が起きにくいと言われています。
一方で TOML は YAML に比べて表現力がやや控えめです。アンカー・エイリアスによる値の再利用や、複雑な多階層構造の簡潔な記述は苦手とされ、用途に応じて YAML・JSON と使い分けるのが実務上の定石になっています。