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仕様
技術仕様
| コンテナアーキテクチャ | [tables]とkey = valueの組で構成され、ハッシュテーブルへ明確に対応する人が読みやすい設定ファイル |
| 圧縮 | 非圧縮テキストストリーム |
| バイトエンディアン | UTF-8テキストストリーム |
| 色空間 | 該当なし(設定ファイル) |
| チャンネルと構造 | テーブル、テーブル配列、インラインテーブル、文字列、整数、浮動小数点数、真偽値、RFC 3339日時 |
| 最大寸法 | テキスト長に上限なし |
| 透過性 | なし |
| ストリーミングとプログレッシブ | 設定ファイルを行単位で順次解析 |
技術比較表: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.app 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(セマンティックバージョニング)も作成したトム・プレストン=ワーナーによって作成されました。
- Cargo パッケージではメタデータ、依存関係、ターゲットの宣言に Cargo.toml を使います。他のビルドシステムを使う Rust プロジェクトでは別のファイルを使う場合があります。
- 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に即座に変換できます。