| この記事の要点 |
|
概要
TOML(トムル、Tom's Obvious Minimal Language)は、GitHub 共同創業者の Tom Preston-Werner(マスコットの mascot Mojombo)が 2013 年に発表した、設定ファイル向けのデータシリアライゼーション形式です。「明確(obvious)で最小限(minimal)」を哲学に掲げ、INI ファイルの読みやすさを残しつつ、JSON のような厳密な型システムを備えています。
拡張子は .toml、MIME タイプは application/toml。最新仕様は v1.0.0(2021 年 1 月)。Rust のパッケージマネージャ Cargo(Cargo.toml)、Python の標準ビルド設定(pyproject.toml、PEP 518 / PEP 621)、Hugo(hugo.toml)、Poetry、Black、Ruff など、近年の開発者向けツールチェーンで強い存在感を発揮しています。Python 3.11 からは標準ライブラリに tomllib が追加されました。
構文・データモデル
キー = 値の行と、[section] のテーブル見出しで構造化します。値の型は string / integer / float / boolean / datetime / array / inline table と豊富です。
# これはコメント
title = "TOML サンプル"
[owner]
name = "Alice"
dob = 1990-05-27T07:32:00Z # 日時型ネイティブ対応
[database]
enabled = true
ports = [8000, 8001, 8002]
data = [["delta", "phi"], [3.14]]
temp_targets = { cpu = 79.5, case = 72.0 } # インラインテーブル
[[servers]] # 配列テーブル
name = "alpha"
ip = "10.0.0.1"
[[servers]]
name = "beta"
ip = "10.0.0.2"
Cargo.toml の実例(最も目にする TOML):
[package]
name = "my-app"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
主な用途
- Rust エコシステム:
Cargo.toml(パッケージ定義)、rustfmt.toml、rust-toolchain.toml - Python エコシステム:
pyproject.toml(PEP 518 / 621、ビルド・依存・メタデータの一元化)、Poetry・Black・Ruff・mypy などほぼ全ツールが採用 - 静的サイトジェネレータ: Hugo(
hugo.toml、config.toml)の標準設定 - クラウド・CLI ツール: Netlify、Fly.io(
fly.toml)、Cargo Lambda など - アプリケーション設定: 階層が深すぎず、人間が手で書く設定ファイル全般
関連形式との比較
| 項目 | TOML | YAML | JSON | INI |
|---|---|---|---|---|
| 仕様の厳密さ | 非常に厳密 | 緩い(暗黙変換) | 厳密 | 仕様統一なし |
| コメント | 可(#) | 可(#) | 不可 | 可(; or #) |
| 日時型 | ネイティブ対応 | あり | なし(文字列) | なし |
| ネスト | テーブル+ドット | インデント | 波カッコ | 基本フラット |
| 可読性 | 高(フラット気味) | 非常に高い | 中 | 高(ただし機能不足) |
| 主用途 | Rust・Python 設定 | K8s・CI | API・データ交換 | レガシー設定 |
編集・パーサ・ツール
- Python: 標準ライブラリ
tomllib(3.11+、読み取り専用)、書き込みにはtomli-w/tomlkit - Rust:
tomlクレート(serde 連携) - Go:
BurntSushi/tomlが定番 - JavaScript / Node.js:
@iarna/toml、smol-toml - PHP:
yosymfony/toml - VS Code: Even Better TOML 拡張がシンタックスハイライト・スキーマ対応を提供
- taplo: TOML 用フォーマッタ・Linter・LSP サーバ
注意点・落とし穴
- 文字列は必ずクォート: YAML や INI と違って裸の文字列は書けない。
name = Aliceはエラー - キー重複は不可: 同じテーブル内で同じキーを定義すると仕様違反
- テーブル定義の順序:
[a.b]と[a]の両方を書くとき、後から親[a]を定義するとサブテーブルが上書きされて壊れる - 深いネストは苦手: 3 階層を超えるとドット記法が長くなり可読性が落ちる。深い構造には YAML・JSON が向く
- バージョン差異: v0.5 と v1.0 で挙動が違うパーサがある。
tomllibは v1.0 準拠 - 日時型のタイムゾーン: RFC 3339 形式必須。
Zや+09:00を省略するとローカル日時扱いで曖昧になる
関連リンク
- Web・データ・設定
- ファイル拡張子とは
- JSON(.json)
- YAML(.yaml / .yml)
- XML(.xml)
- env(.env)
- INI(.ini)
- properties(.properties)
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- djangoのテンプレートの作成とヘッダー・フッターの共通化 2026-10-03 21:41:49
- テンプレートフラグメント(ヘッダー等の共有化) 2026-10-03 21:41:49
- reCAPTCHA v3 使い方(サンプル付き) 2026-10-03 21:37:05
- Content-Type一覧|MIMEタイプとはとHTTPでの主な使用場面 2026-10-03 21:37:05
- SpringにおけるAOPの使い方 2026-10-03 21:37:05
- X (Twitter) API でツイートできないがエラーが出ない問題の原因と対処 2026-10-03 11:33:01
- X (Twitter) API アプリケーション登録完全ガイド|v2・Bearer Token・OAuth 2.0 PKCE 2026-10-03 11:33:01
- X (Twitter) API 完全ガイド|従量課金の料金・単価(2026年10月)と v2 移行 2026-10-03 11:32:40
- Google DeepMind とは?Gemini・AlphaFold の開発元 2026-10-03 11:26:56
- Cursor とは?AI 統合型コードエディタの使い方・料金 2026-10-03 11:26:56
- Claude (Anthropic) とは?AIチャットの使い方・モデルファミリ・API 2026-10-03 11:26:56
- AIベンダー一覧:OpenAI・Anthropic・Google DeepMind・Microsoft・Meta 2026-10-03 11:26:56
- クラウド・インフラ完全ガイド — AWS/Azure/GCP/Kubernetes 2026-10-03 11:26:56
- テキストエディタ完全比較 (VS Code / Cursor / Vim / Emacs / IDE) 2026-10-03 11:26:56
- プログラミング学習プラットフォーム|Scratch・micro:bit ほか 2026-10-03 11:26:56