| この記事の要点 |
|
概要
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アノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15