TOML から YAML へ:構文マップと落とし穴付きクイック変換ガイド

A sleek, modern visual showing the transformation from TOML to YAML

TOML を YAML に変換する最速の方法は yq -oy '.' file.toml を使うことです。手動変換では、TOML の [table] ヘッダーを YAML のインデントブロックに、TOML 配列をダッシュプレフィックスのリストにマッピングし、曖昧な文字列には常に引用符をつけて「ノルウェー問題」を回避してください。

クイック変換:yq CLI の使用

TOML(Tom’s Obvious, Minimal Language)は 2025 年 12 月にv1.1.0 をリリースしましたが、YAML は依然として CI/CD パイプラインや Kubernetes マニフェストの標準フォーマットです。yq ツールならコマンド 1 つで変換できます。

yq のインストール

プラットフォーム コマンド
macOS/Linux brew install yq
Windows choco install yq
Python(pip) pip install yq

高速な Mike Farah 版の Go 実装が推奨されます。Mike Farah の yq ドキュメントにある通り、このツールは TOML 構造をデコードし、整形された YAML として再エンコードします。

変換の実行

ターミナルに表示:

yq -oy '.' your-config.toml

ファイルに保存:

yq -oy '.' your-config.toml > your-config.yaml

-oy フラグは出力形式を YAML に設定します。キーと値のペア、ネストされたテーブル、配列をすべて処理できます。

シンプルな 3 ステップのターミナル変換プロセス

構文変換マップ:TOML 構造から YAML へ

開発者の Drew DeVault 氏は、TOML は人気があるものの、YAML の方が深いネストをよりシンプルに扱えると指摘しています。正確なマッピングは以下の通りです:

テーブルをインデントキーに変換

TOML はブラケットヘッダーを使い、YAML はインデントを使います。

TOML YAML
[server] server:
host = "127.0.0.1" host: 127.0.0.1
port = 8080 port: 8080

重要な違い:TOML ではインデントは装飾に過ぎません。YAML ではインデントが構造を決定します——スペース 1 つの間違いが設定ファイル全体を壊します。

配列をダッシュプレフィックスリストに変換

TOML: ports = [ 8000, 8001 ]

YAML:

ports:
  - 8000
  - 8001

TOML と YAML の構造を並べて比較

Knightli.com が説明しているように、YAML の「ブロックスタイル」は垂直方向の配置が一貫していれば、リストを見やすくします。

インラインテーブルとドット記法キー

TOML の構成 YAML の等価表現
[a.b.c](ドット付きヘッダー) a:b:c:(ネストされたインデント)
point = { x = 1, y = 2 }(インラインテーブル) point:x: 1y: 2

実際のユースケース

Hugo 静的サイト設定

Hugo は hugo.tomlhugo.yamlhugo.json のいずれかを受け付けます。多くのプロジェクトは TOML(デフォルト)で始め、設定を Netlify や GitHub Actions などのデプロイプラットフォームに合わせる必要が出たときに YAML に移行します。Hammer Europe によると、hugo コマンドはこれらのファイルを読み込んで Markdown を実際のサイトに変換する方法を決定します。

Python パッケージング:pyproject.toml から CI/CD YAML へ

Python コミュニティは PEP 518pyproject.toml を標準化しました。これらの設定は、GitHub Actions CI/CD ワークフロー用に YAML に変換する必要がよくあります。AI エージェントのワークフローについては、CocoIndex が最適化された YAML 設定でトークン使用量を最大 70% 削減できると報告しています。

ノルウェー問題とその他の変換の落とし穴

NO 国コードのバグ

YAML 1.1 では、NOOFFYES のような裸の文字列が自動的にブール値の false または true に強制変換されます。TOML はすべての文字列に引用符を要求するため、この問題を回避できます。変換時、YAML で曖昧な値には必ず引用符をつけてください:

YAML 1.1 の解釈 修正方法
NO false "NO"
OFF false "OFF"
YES true "YES"
On true "On"

YAML 1.2(現在の仕様)はこれらの強制変換の大部分を修正していますが、多くのパーサーは依然としてデフォルトで 1.1 の動作を使用しています。

「ノルウェー問題」の視覚的メタファー(ブール値 vs 文字列)

インデントエラー

YAML パーサーはインデントが一貫していないファイルを拒否します。よくある間違い:

  • タブとスペースの混用(YAML はタブを禁止しています)
  • あるブロックで 3 スペース、別のブロックで 2 スペースを使用
  • リスト項目の配置がずれている

AI 支援による生成

AgentBuilder のようなツールを使うと、自然言語で設定を記述し、検証済みの YAML を出力できます。この「記述 → 生成 → 検証」のサイクルは、インデントエラーとノルウェー問題の両方を防ぐのに役立ちます。

まとめ

自動変換には yq -oy '.' file.toml を使用してください。手動作業の場合、TOML テーブルを YAML インデントに、配列をダッシュプレフィックスリストにマッピングし、ブール値と間違えられる可能性のある文字列には常に引用符をつけてください。変換後は、デプロイ前に必ず YAML 出力を検証してください——1 つのずれたスペースや引用符なしの NO がパイプライン全体を壊す可能性があります。

よくある質問

YAML は TOML のようなコメントをサポートしていますか?

はい。どちらも 1 行コメントに # を使用します。YAML のコメントは複数行文字列の解析に影響する可能性があるため、迷った場合はコメントを独立した行に配置してください。

YAML の「ノルウェー問題」とは何ですか?

YAML 1.1 では、NO(ノルウェーの国コード)のような裸の文字列が自動的にブール値 false に変換されます。TOML はすべての文字列値に引用符を要求するため、この問題を回避できます。TOML から YAML に変換する際は、曖昧になる可能性のある文字列を引用符で囲んでください。

深いネストをより良く扱えるのはどちらのフォーマットですか?

YAML です。TOML は各レベルで [table.subtable.subsubtable] のような長いヘッダーを繰り返す必要があり、冗長になります。YAML は同じ階層構造をインデントで表現するため、深いネストではよりコンパクトで読みやすくなります。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です