TOML設定 (.toml)
TOML 標準Tom's Obvious Minimal Language(TOML)は、GitHubの共同創業者であるトム・プレストン=ワーナー(Tom Preston-Werner)によって作成された、曖昧さのない人間中心の設定フォーマットです。Rust(Cargo)やPython(pyproject.toml)をはじめとする現代のプログラミングエコシステムで広く採用されています。
TOML を JSON に変換
無料のブラウザ内 TOML から JSON へのコンバーター。お使いのデバイスでファイルを即座に変換します。
調査とメタデータ
オペレーティングシステムやファイル解析ツールは、先頭のバイナリバイトシーケンスを検査することで TOML ファイルを識別します:
バイトレベルのヘッダーシグネチャ (マジックバイト)
オペレーティングシステムやファイル解析ツールは、先頭のバイナリバイトシーケンスを検査することで TOML ファイルを識別します:
16進数シグネチャ (オフセット 0):
5B ... 5DASCII表現: [...]
標準化: TOML v1.0.0 Specification
技術仕様
| コンテナアーキテクチャ | Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs |
| 圧縮 | Uncompressed text stream |
| バイトエンディアン | UTF-8 text stream |
| 色空間 | N/A (Configuration File) |
| チャンネルと構造 | Tables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes |
| 最大寸法 | Unbounded text length |
| 透過性 | None |
| ストリーミングとプログレッシブ | Sequential line-by-line configuration parsing |
技術比較マトリックス: TOML 対 競合製品
| 技術属性 | TOML (現在) | YAML | JSON | INI |
|---|---|---|---|---|
| 曖昧さのリスク | ゼロ(厳密に曖昧さのない仕様) | 高い(YAMLの「ノルウェー問題」によるブール値のバグ) | ゼロ(厳密なデータ型) | 中程度(公式標準なし) |
| ネイティブ日時型 | ネイティブなRFC 3339の日付と時刻のサポート | 暗黙的な文字列/日付のパース | なし(文字列のみ) | なし(文字列のみ) |
| コメントのサポート | ネイティブ(# コメント) | ネイティブ(# コメント) | コメント不可 | ネイティブ(; および # コメント) |
| 主要なエコシステム | Rust(Cargo)、Python(PEP 518)、Go | Kubernetes、Ansible、CI/CDパイプライン | Web API、ブラウザ通信 | レガシーWindows、Git設定 |
一般的な破損モードと16進数リカバリガイド
パーサーのエラー:「Duplicate key in table(テーブル内の重複キー)」または「Invalid table header(無効なテーブルヘッダー)」。
根本原因: ドキュメント内で既存のキーまたはテーブルの名前空間を再定義しようとしています。
復旧: File2File TOMLフォーマッタを使用して、TOML構文を検証および再フォーマットしてください。
セキュリティ分析とパーサー攻撃ベクトル
TOMLパーサーは、プロトタイプ汚染や、病的なテーブル配列のネストによるCPU枯渇に対して警戒する必要があります。
既知の攻撃ベクター
- JavaScriptのTOMLパーサーにおけるプロトタイプ汚染により、Object.prototypeにプロパティが注入される。
- 深くネストされたテーブル配列の宣言によるサービス拒否(DoS)。
- 巨大なインライン配列のパース中の無制限なメモリ割り当て。
防御的ベストプラクティス:
歴史的背景とマイルストーン
主な利点とメリット
- 完全に曖昧さがありません:予期しない型変換を一切起こさず、ハッシュテーブルへクリーンかつ予測通りにマップされます。
- 文字列のエスケープなしで、ファーストクラスのネイティブ日時サポート(RFC 3339のタイムスタンプ、日付、時刻)を提供します。
- モダンな言語ツール(RustのCargo.toml、Pythonのpyproject.toml)の公式標準設定フォーマットとして採用されています。
技術的な制限とデメリット
- 深くネストされた多層オブジェクトツリーは、YAMLと比較して冗長になる場合があります。
- テーブルの配列([[table.array]])の構文は、初心者にとって直感的ではない場合があります。
- スループットの高いマシン間APIデータ交換においては、JSONよりもコンパクトではありません。
興味深い技術トリビア
- TOMLは、GitHubの共同創業者であり、GravatarやSemVer(セマンティックバージョニング)も作成したトム・プレストン=ワーナーによって作成されました。
- すべてのRustプロジェクトにある「Cargo.toml」ファイルは、すべてのパッケージ依存関係とコンパイラフラグをTOML形式で指定します。
- JSONとは異なり、TOMLはコメント(「#」文字を使用)と複数行文字列をネイティブでサポートしています。
よくある技術的な質問
TOMLは何に使用されますか?
TOMLは、RustのCargo.toml、Pythonの pyproject.toml、Go Hugoの設定、コンテナツールなど、ソフトウェアの設定に主に使用されます。
設定にYAMLよりもTOMLが好まれるのはなぜですか?
TOMLは、クォートなしの「NO」がブールのfalseになってしまうようなYAMLの悪名高いエッジケースの解析バグを回避しつつ、コメントや明確なテーブルを備えて人間にとって扱いやすい状態を維持します。
TOMLをJSONまたはYAMLに変換するにはどうすればよいですか?
Webブラウザから直接File2File.appを使用して、TOMLファイルをJSONまたはYAMLに即座に変換できます。