TOML設定 (.toml)

TOML 標準

Tom's Obvious Minimal Language(TOML)は、GitHubの共同創業者であるトム・プレストン=ワーナー(Tom Preston-Werner)によって作成された、曖昧さのない人間中心の設定フォーマットです。Rust(Cargo)やPython(pyproject.toml)をはじめとする現代のプログラミングエコシステムで広く採用されています。

TOML を JSON に変換

無料のブラウザ内 TOML から JSON へのコンバーター。お使いのデバイスでファイルを即座に変換します。

調査とメタデータ

オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してTOMLファイルを識別します:

ファイルを選択するか、ここにドロップしてください

プライベート - ファイルがデバイスの外に出ることはありません

または貼り付け Ctrl+V
ネットワーク送信ゼロのプライバシー保証: 外部サーバーへのデータ送信は0バイトです。すべての処理はお使いのブラウザのサンドボックス内でローカルに実行されます。

バイトレベルのヘッダーシグネチャ (マジックバイト)

オペレーティングシステムやファイル解析ツールは、先頭のバイナリ列を検査してTOMLファイルを識別します:

16進数シグネチャ(オフセット0):

5B ... 5D

ASCII表現: [...]

標準化: TOML v1.0.0仕様

技術仕様

コンテナアーキテクチャ[tables]とkey = valueの組で構成され、ハッシュテーブルへ明確に対応する人が読みやすい設定ファイル
圧縮非圧縮テキストストリーム
バイトエンディアンUTF-8テキストストリーム
色空間該当なし(設定ファイル)
チャンネルと構造テーブル、テーブル配列、インラインテーブル、文字列、整数、浮動小数点数、真偽値、RFC 3339日時
最大寸法テキスト長に上限なし
透過性なし
ストリーミングとプログレッシブ設定ファイルを行単位で順次解析

技術比較表:TOMLと競合製品

技術属性TOML (現在)YAMLJSONINI
曖昧さのリスクゼロ(厳密に曖昧さのない仕様)高い(YAMLの「ノルウェー問題」によるブール値のバグ)ゼロ(厳密なデータ型)中程度(公式標準なし)
ネイティブ日時型ネイティブなRFC 3339の日付と時刻のサポート暗黙的な文字列/日付のパースなし(文字列のみ)なし(文字列のみ)
コメントのサポートネイティブ(# コメント)ネイティブ(# コメント)コメント不可ネイティブ(; および # コメント)
主要なエコシステムRust(Cargo)、Python(PEP 518)、GoKubernetes、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)。
  • 巨大なインライン配列のパース中の無制限なメモリ割り当て。

防御的ベストプラクティス: テーブルのネスト制限を検証し、プロトタイプ汚染に対して安全な辞書オブジェクトを使用します。

歴史的背景とマイルストーン

2021TOML v1.0.0が正式にリリースされ、コア構文の仕様が固定されました。
2018Pythonが、モダンなビルド設定標準として「pyproject.toml」(PEP 518)を標準化しました。
2013トム・プレストン=ワーナーが、YAMLの複雑さを持たないクリーンな設定フォーマットを提供するためにTOMLを公開しました。

主なメリット

  • 完全に曖昧さがありません:予期しない型変換を一切起こさず、ハッシュテーブルへクリーンかつ予測通りにマップされます。
  • 文字列のエスケープなしで、ファーストクラスのネイティブ日時サポート(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に即座に変換できます。