TOML パーサー

TOML(Tom's Obvious Minimal Language)は、読み書きしやすいように設計された最小限の設定ファイル形式です。Rust(Cargo.toml)、Pythonパッケージング(pyproject.toml)、その他多くのモダンな開発ツールの標準設定形式です。

仕様

よくあるユースケース

  • Cargo.tomlを解析してRustプロジェクトの依存関係とメタデータを取得
  • pyproject.tomlを読み取ってPythonビルド設定を確認(PEP 518/621)
  • Hugo、Zola、その他の静的サイトジェネレータの設定を処理
  • Deno設定ファイル(deno.toml)の編集
  • デプロイ前の設定検証

機能

  • TOML v1.0.0仕様の完全サポート
  • テーブル、テーブルの配列、ネストされた構造の解析
  • インラインテーブルと配列の処理
  • 日付/時刻値のサポート
  • JSON、YAML、またはXMLへの変換
  • エラーメッセージ付き構文検証

Rust Cargo.toml

試してみる →

パッケージのメタデータと依存関係を定義するCargoマニフェスト。

[package]
name = "my-project"
version = "0.1.0"
edition = "2021"

[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }

Python pyproject.toml

試してみる →

ビルドシステムとメタデータを含むPythonプロジェクト設定。

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "my-package"
version = "1.0.0"
dependencies = ["requests>=2.28"]

ヒント

  • TOMLはキーと値のペアに = を使用します。YAMLのコロンとは異なります。
  • 文字列は引用符で囲む必要があります。複数行文字列には """ を使用してください。
  • テーブル([table])はネストされた構造を作成します。
  • テーブルの配列は [[array]] 構文を使用します。

解説 TOML パーサー

TOML(Tom's Obvious Minimal Language)は、曖昧さがなく読みやすいことを目指した設定ファイル形式です。Tom Preston-Werner(GitHub共同創設者)によって作成され、TOMLはハッシュテーブルにクリーンにマッピングされます。意図的にYAMLよりシンプルで、INIファイルよりも表現力があります。バージョン1.0.0は2021年に確定しました。

TOMLの設計は明確さを重視しています。キーと値は単純な「key = value」構文を使用します。テーブル(セクション)は[角括弧]で示され、インデント感度なしにネストされた構造を作成します。テーブルの配列は[[二重角括弧]]を使用して繰り返しセクションを定義します。TOMLはネイティブに文字列、整数、浮動小数点数、ブール値、日付、時刻、日時をファーストクラスの型としてサポートし、JSONやYAMLで一般的なパーシングの曖昧さを排除します。

RustエコシステムはCargo.tomlをパッケージマニフェスト形式として早期にTOMLを採用しました。Pythonはpyproject.toml(PEP 518およびPEP 621)で続き、setup.pyとsetup.cfgの現代的な代替となりました。TOMLはGoツール、Deno(deno.toml)、Hugo、その他多くの明示的で読みやすい設定を重視する開発者ツールにも登場します。

TOMLは柔軟性を予測可能性と交換しています。YAMLとは異なり、各データ構造を表現する方法は1つだけです。アンカーもエイリアスも暗黙の型変換のサプライズも重要な空白文字もありません。トレードオフとして、深くネストされた構造は冗長になります。各レベルに独自のテーブルヘッダーが必要だからです。

TOMLは、人間が頻繁に編集するフラットまたは適度にネストされた設定ファイルに優れています。その曖昧さのない構文は、ブール値の型強制やインデントエラーなどのYAMLの落とし穴を避けつつ、設定目的ではJSONよりも読みやすくなっています。TOMLはプロジェクトマニフェスト(Cargo.toml、pyproject.toml)やツール設定の自然な選択です。YAMLはKubernetesマニフェストのような深くネストされた構造に引き続き適しており、JSONはシステム間のデータ交換の標準です。

[[二重角括弧]]構文はテーブルの配列を作成し、ヘッダーが出現するたびに配列に新しい要素が追加されます。たとえば、[[products]]が3回出現すると、それぞれ順番に収集されたキーと値のペアを持つ3つの製品オブジェクトの配列が作成されます。TOMLはハッシュ記号(#)を使用した単一行コメントもサポートしており、独立した行または値の後に記述できます。複数行コメント構文はありませんが、単一行のバリアントでも、コメントサポートがまったくないJSONに比べれば大きな利点です。

テーブルとインラインテーブルは異なる目的を果たします。テーブルは[header]構文を使用して複数行にわたり、キーが多いセクションの可読性を高めます。インラインテーブルは1行で波括弧を使用し(key = { a = 1, b = 2 })、その1行で完全に定義する必要があります——定義後に拡張することはできません。経験則として、セクションに2つか3つ以上のキーがある場合は、可読性のために標準テーブルを使用してください。

← すべてのツールに戻る