本文へスキップ

YAMLからTOML形式への変換 — Numio

1 つの YAML ドキュメントを TOML に変換します。ネストしたマッピングは [table.sub] セクション、マッピングのリストは [[array of tables]] になり、値が null(~)のキーは削除されます。

プロジェクトが pyproject.toml、Cargo、Hugo、Netlify の TOML 設定に移行する際に、YAML の設定を TOML に書き換える。

YAML

TOML

こんなときに使えます

  • プロジェクトが pyproject.toml、Cargo、Hugo、Netlify の TOML 設定に移行する際に、YAML の設定を TOML に書き換える。
  • 設定フォーマットを決める前に、ネストした YAML の構造が TOML のテーブルではどうなるかを確認する。

使い方

  1. トップレベルがマッピングの YAML ドキュメントを 1 つ、左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。
  2. YAML のエラー(インデント、複数ドキュメント、トップレベルのリスト)が表示されたら修正します。
  3. TOML の日付、null、リストを確認してからコピーします。

YAML

# docker-compose style
version: "3.9"
services:
  web:
    image: nginx:1.27
    ports:
      - "8080:80"
    environment:
      DEBUG: false
      WORKERS: 4
  db:
    image: postgres:16

TOML

version = "3.9"

[services.web]
image = "nginx:1.27"
ports = [ "8080:80" ]

  [services.web.environment]
  DEBUG = false
  WORKERS = 4

[services.db]
image = "postgres:16"

仕様と制限

YAML は YAML 1.2 として読み込まれます。yes は文字列 "yes" のまま、0o17 は 15 になり、2024-01-05 のようなクォートなしの日付は TOML の日付ではなく文字列になります。

コメントとアンカーはそのままの形では保持されません。エイリアス(*name)と <<: *anchor のマージキーは、参照先の値に展開されます。

受け付けるドキュメントは 1 つだけで、--- 区切りを含む入力は複数ドキュメントのエラーになります。トップレベルがリストの場合や、マッピングと単純な値が混在するリストは、説明付きで拒否されます。

ブラウザ内で動作します(yaml + @iarna/toml)。[services.web.environment] のようなサブテーブルは 2 スペースでインデントされますが、TOML はこのインデントを無視します。

FAQ

docker-compose.yml を TOML に変換できますか?

例のように構造は変換できますが、Docker Compose が読むのは YAML だけです。データの確認や再利用に使い、Compose ファイルとしては使わないでください。

null 値はどうなりますか?

TOML には null 型がないため、値が ~ または null のキーは省略されます。

YAML のアンカーとマージキーに対応していますか?

はい。エイリアス(*name)は展開され、<<: *base は base のキーをそのマッピングにコピーします。並べて書いたキーが優先されます。TOML にはマージ後の値が出力されます。

仕様を確認する