TOMLとは? Toms Obvious Minimal Languageの解説
TOMLは、読みやすく、解析に曖昧さがないように設計されたミニマルな設定ファイルフォーマットで、Rust、Python、Goのツールで広く使われています。
TOML("Toms Obvious Minimal Language")は、人間にとって明白で、機械にとって曖昧さのない設定フォーマットを目指しています。古いINIファイルのように見えますが、本物の仕様と適切な型を備えています。Cargo.tomlやpyproject.tomlを開いたことがあるなら、あなたはTOMLを読んだことがあります。
TOMLとは
TOMLは設定をキーと値のペアのtable(セクション)に整理します。明確で型付きの値を持ちます: string、整数、float、boolean、日付、配列、ネストしたtable。設計目標は、ある値を書く明白な方法がちょうど1つあることであり、これによりTOMLファイルは読みやすく、誤って解析されにくくなっています。
TOML対INI
TOMLはINIに似ています - 角括弧のセクションヘッダとkey = valueの行 - が、INIと違って正式な仕様、本物のデータ型、ネストしたtable、配列を備えています。INIの振る舞いはparserによって異なりますが、TOMLはどこでも同じように振る舞います。これが現代的なツールがプレーンなINIではなくTOMLを選んだ理由です。
TOML対YAMLとJSON
YAMLと比べると、TOMLは空白が意味を持つインデントと型推測の落とし穴を避けますが、深くネストしたデータには冗長になるという代償があります。JSONと比べると、コメントを許可し、手で編集するのに親しみやすいです。フラットから中程度にネストしたツール設定にとって、ちょうど良いバランスを実現しています。
CIとツールにおけるTOML
TOMLはいくつかのエコシステムのbuildと依存関係設定の住処です: RustのCargo.toml、Pythonのパッケージングやruffのようなツールのpyproject.toml、そして多くのGoやlinterの設定。CIでは通常、TOMLを間接的に読みます - ツールがそれを解析します - が、releaseのjob中にテンプレートで値を挿入することはあるかもしれません。
# pyproject.toml read by a CI build step
[project]
name = "myapp"
version = "1.4.0"
[tool.ruff]
line-length = 100パイプラインがTOMLを好む理由
TOMLは曖昧さがなくコメントに親しみやすいため、YAMLを悩ませる"意図と違う解析をされた"という失敗を減らします。コードの隣に置かれ、すべてのCI実行で読まれるツール設定にとって、その予測可能性は少し冗長な構文に見合う価値があります。
重要なポイント
- TOMLは、角括弧のtableとkey = valueのペアを持つ、ミニマルで型付きの設定フォーマットです。
- INIに似ていますが、本物の仕様、データ型、ネストしたtableを備えているため、一貫した振る舞いをします。
- Cargo.toml、pyproject.toml、多くの現代的なCLIツールの設定の住処です。