ToolActToolAct

YAML フォーマットツール

YAML入力
出力結果
行数: 1文字数: 0バイト数: 0
行数: 1文字数: 0

YAMLとは?

YAML(YAML Ain't Markup Language)は人間可読のデータシリアライゼーション言語で、設定ファイルとデータ交換用に設計されています。簡潔、明確な構文で有名で、XMLより読みやすく、JSONより表現力があります。YAMLはインデントで階層関係を表現し、コロンでキーと値を分け、ハイフンでリスト項目を表し、設定ファイルの作成に最適です。

使い方

使い方

  1. 左の入力ボックスにYAMLデータを貼り付けるか入力します
  2. プロジェクトスタイルに合ったインデントサイズを選択します
  3. 「フォーマット」で整形、「圧縮」でサイズ削減、「検証」で構文チェックを行います
  4. 右側に結果を表示します
  5. 「コピー」をクリックしてクリップボードにコピーします

オプションの説明

インデントサイズ2スペースまたは4スペースのインデントから選べます

キーボードショートカット

  • Ctrl + Enterフォーマット
  • Ctrl + Shift + C結果をコピー

YAMLのヒント

  • YAMLはインデントが意味を持つため、CIやKubernetes、デプロイ用の設定ファイルに使う前にネストされたリストやマップを見直してください
  • 可能であれば対象のツールのスキーマで検証してください。構文的に正しいYAMLでも、GitHub Actions、Docker Compose、OpenAPIでは無効になることがあります

利用シーン

コミット前にシンプルなYAML設定を正規化アプリケーション・サーバー・データベース・フィーチャーフラグ・ロギング・ユーザー権限などのYAMLを貼り付けて、2スペースまたは4スペースのインデントでフォーマットします。このツールは通常のキー・値、ネストされたオブジェクト、配列、ブール値、数値、null、引用符付き文字列の構造を想定しています。
YAMLのよくあるスペースミスを素早く発見組み込みバリデーターが、コロン区切りのない行、コロン後に必須のスペースが欠けている値、スペースが必要な場所でのTabの使用を検出します。CIパーサーやデプロイスクリプト、ドキュメントページに渡す前に、コピペや手作業による多くのミスを捕捉できます。パースとバリデーションはすべてブラウザ内で完結するため、社内サービス名や未公開のイメージタグ、ステージングの資格情報を含むドラフトも、外部バリデーターにアップロードせずに整えられます。
乱れたドラフトからきれいなYAMLサンプルをダウンロードパース後、フォーマッターがオブジェクトツリーを一貫したYAMLに書き直し、formatted.yamlとしてコピーまたはダウンロードできます。フル機能のYAMLエンジンではなく軽量パーサーを使用しているため、アンカー・エイリアス・複雑な複数行スカラー・タグ・高度なスキーマ動作が必要な場合は、実際に利用するランタイムで確認してください。
YAMLをJSONに変換してダウンストリームパイプラインに渡すトグルで出力をJSONに切り替えつつ同じインデント選択を維持できるため、CIスクリプトやjqフィルター、ポリシーチェックが2つ目のパーサーなしでファイルを処理できます。混合型配列や引用符付き文字列はそのまま保持されますが、YAMLのアンカーとエイリアスは軽量パーサーによってフラット化されます。
KubernetesやDocker Composeのマニフェストをプレフライトdeployment.yamlやdocker-compose.ymlを貼り付け、バリデーターが検出したスペースエラーを修正し、apiVersion・kind・specブロックの配置を確認します。このページは読みとクリーニングのクイックステップですが、最終的なマニフェストには`kubectl apply --dry-run=client`や`docker compose config`でスキーマの問題を検出する必要があります。

仕組み

YAMLフォーマットはYAML 1.2.2仕様(2021年10月改訂)に基づいています。この仕様はJSONをYAMLの厳密なサブセットとして正式に定義しており、有効なJSONドキュメントはすべてYAMLとしてパースできます。パースは3層で進行します。プレゼンテーション層がUnicodeコードポイントをスキャンし文字エスケープを解決し、シリアライゼーション層がスカラー、シーケンス、マッピングのノードグラフを構築し、ネイティブ層がYAML Core Schemaを適用してスカラーを`!!str`、`!!int`、`!!float`、`!!bool`、`!!null`、`!!seq`、`!!map`の解決済み型に型変換します。一般的なランタイムライブラリにはNode.jsのjs-yamlや新しい`yaml`パッケージ、PythonのPyYAMLやruamel.yaml、JVMのSnakeYAMLがあります。ブラウザ側のフォーマッターは通常、js-yamlの`load`/`dump`でプレーンなJSオブジェクトにパースしてラウンドトリップします。 インデントは最も重要なプリミティブです。ASCIIスペース(U+0020)のみが許可されており、仕様§6.1でインデントにタブ文字(U+0009)を使用することは明示的に禁止されています。自動変換するコードエディタからのコピペが最もよくあるパース失敗の原因です。ブロックスタイルは列位置からネストを純粋に決定するため、子ノードは親より少なくとも1スペース(慣例では2スペース)多くインデントする必要があります。フロースタイルはJSON構文を借用し(`[1, 2, 3]`や`{a: 1, b: 2}`)、ワンライナーのためにブロックスタイル内にネストできます。ブロックスカラーはインジケーター駆動のフォールディングを使用します。`|`(リテラル)は改行をそのまま保持し、`>`(フォールド)は単一の改行をスペースに折りたたみ、空行を段落区切りとして保持します。.chompインジケーターの`-`(末尾改行を除去)と`+`(末尾改行をすべて保持)はインジケーターの後に付きます(`|-`、`>+`)。引用ルールは異なります。シングルクォートスカラーは`\\`をリテラルとして扱い、引用符の埋め込みに`''`を使用します。ダブルクォートスカラーはCスタイルのエスケープ(`\\n`、`\\t`、`\\uXXXX`)を処理します。 フォーマッターは通常、1つのブロックスタイルに正規化し、アンカーとエイリアスを再出力します。アンカー`&name`はノードをマークし、エイリアス`*name`はそれを参照し、マージキー`<<: *name`(YAML 1.1の名残で、ほとんどのパーサーでサポート)は別のマッピングからキーを現在のマッピングに引き出します。複数ドキュメントストリームは`---`開始マーカーとオプションの`...`終了マーカーで分割されます。これはKubernetesが1つのマニフェストで複数のリソースを出荷するパターンです。安全に再出力すべき2つの有名な落とし穴があります。ノルウェー問題——引用符なしのスカラー`no`がYAML 1.1スキーマで`false`として解釈される問題(国コードがブール値になる)——とCVE-2017-18342——PyYAMLの`yaml.load`が任意のPythonオブジェクトをデシリアライズできた問題(`safe_load`に切り替えて修正)。どちらも、フォーマッターがスカラーの解決を慎重に扱い、タグ付きコンストラクターを決して実行すべきでない理由です。パースは入力長に対してO(n)です。コメントはほとんどのASTベースのライブラリで破棄されます。これはYAML情報モデルの一部ではないためです。

  • 仕様:YAML 1.2.2(2021年10月)。JSONはYAML 1.2の厳密なサブセットであるため、有効なJSONドキュメントはすべてYAMLとしてパースできます。主なライブラリはjs-yaml、`yaml`パッケージ、PyYAML、ruamel.yaml、SnakeYAMLです。
  • インデントはASCIIスペース(U+0020)でなければなりません。仕様§6.1でインデントにタブ文字(U+0009)は禁止されています。`mapping values are not allowed here`エラーの最もよくある原因です。
  • ブロックスタイル vs フロースタイル:ブロックは列位置によるネスト(慣例では2または4スペース)、フローはJSONライクな`[1, 2, 3]`や`{a: 1}`を使用。両方をネストできます。
  • ブロックスカラー:`|`リテラルは改行を保持、`>`フォールドは単一改行をスペースに折りたたみ。.chompインジケーターの`-`(除去)と`+`(保持)はインジケーターに付きます(例:`|-`、`>+`)。
  • アンカー`&name`はノードをマークし、エイリアス`*name`はそれを参照し、マージキー`<<: *name`は別のマッピングからキーを引き出します(YAML 1.1の名残、ほとんどのパーサーでサポート)。
  • 複数ドキュメントストリームは`---`(開始)とオプションの`...`(終了)マーカーで分割されます。Kubernetesが1つのマニフェストで複数のリソースを出荷するパターンです。
  • 落とし穴:ノルウェー問題(引用符なしの`no`/`yes`/`on`/`off`がYAML 1.1スキーマでブール値としてパースされる。YAML 1.2 Core Schemaは大部分を修正)とCVE-2017-18342(PyYAMLの`yaml.load`が任意のコードを実行。`safe_load`を使用すること)。

使用例

設定ファイルのインデント不揃いを修正

入力 (壊れた状態):
server:
   port: 8080
     host: localhost
  debug: true

整形後 (2 スペース):
server:
  port: 8080
  host: localhost
  debug: true

docker-compose.yml のサービスのネストリスト

version: '3.8'
services:
  web:
    image: nginx:1.25
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - api
  api:
    image: node:20
    environment:
      NODE_ENV: production

Kubernetes Deployment マニフェスト

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    spec:
      containers:
        - name: web
          image: nginx:1.25

jq パイプライン用に YAML を JSON へ変換

YAML 入力:
user:
  id: 42
  name: alice
  roles:
    - admin
    - editor

JSON 出力:
{
  "user": {
    "id": 42,
    "name": "alice",
    "roles": ["admin", "editor"]
  }
}

コロン後のスペース欠落を検出

入力:
name:alice
age: 30

1 行目でエラー: コロンの後にスペースがありません
修正後:
name: alice
age: 30

よくある質問

YAML 整形ではどのようなことが行われますか?

インデントの正規化(通常はスペース2つ)、引用符スタイルの統一、リストマーカーの整列、長いインライン・コレクションのブロック形式への展開などです。実際の YAML はほとんどが手作業で編集されており、スタイルが不統一になりがちです。フォーマッターはそれを揃えます。

フロー形式をブロック形式に変換できますか?

多くのビルドではフロー形式(JSON 風の {key: value, key2: value2})とブロック形式(複数行のインデント形式)を選べます。ブロック形式は人間が編集しやすく、フロー形式はコンパクトです。両者の間でラウンドトリップしてもデータは保持されますが、見た目は変わります。

なぜ引用符が変更されるのですか?

YAML では引用符なし、シングルクォート、ダブルクォートの文字列が使え、それぞれ細かな違いがあります。yes/no、true/false、on/off は引用符で囲まないと真偽値として解釈され、引用符のない数字は数値、引用符付きは文字列になります。フォーマッターは誤解釈される可能性のある値を区別するために引用符を追加することがあります。

コメントは保持されますか?

ほとんどのビルドでは YAML コメント(#)が保持されますが、AST ノードに対する位置が若干変わることがあります。キーの上のコメントは通常上のままで、同じ行の末尾コメントは付随したまま残ります。整形後は再読み込みして、コメントの位置が依然として意味をなしているか確認してください。

YAML はアップロードされますか?

いいえ。パースと整形は js-yaml などを介してブラウザ内で実行されます。ペーストされた YAML は送信されません。

YAML をラウンドトリップするとアンカーやエイリアスが変わるのはなぜですか?

YAML の & (アンカー)と * (エイリアス)構文を使うと、値を一度参照しておき再利用できます。一部のフォーマッターはデフォルトでエイリアスをインライン展開してしまい、重複排除が失われます。アンカーを保持するオプションがあるか確認してください。

YAML がタブインデントを使っている場合はどうなりますか?

YAML はインデントにタブを使うことを禁じています。スペースである必要があります。フォーマッターは設定に応じてタブをスペースに変換するか、パースを拒否します。パースエラーが発生した場合は、ペースト前にタブをスペースに置き換えてください。

関連ツール

JSON フォーマットツール

オンラインJSONフォーマットツール。シンタックスハイライト、エラー検出、圧縮・美化をサポート。ワンクリックでJSONデータを美化し、フォーマットエラーを素早く特定し、開発効率を向上させます。

XML フォーマットツール

オンラインXMLフォーマットツール。自動インデント美化、構文検証、圧縮処理をサポート。カスタムインデント対応、XMLフォーマットエラーを素早く検出。

JSON to TypeScript

オンラインJSON to TypeScriptツール。インターフェース定義を自動生成。ネストオブジェクト、配列、ユニオン型対応、TypeScript開発を加速。

JSON Schema ジェネレーター

無料オンラインJSON Schemaジェネレーター、JSONデータから標準準拠のスキーマ定義を自動生成。ネストオブジェクト、配列型推論、必須フィールド設定に対応、データ検証ルールを素早く作成。

CSV to JSON 変換ツール

カスタム区切り文字と最初の行をヘッダーとして使用するオプションをサポートする無料のオンラインCSV to JSONコンバーター。表形式データを素早くJSON形式に変換。

Markdown エディタ

オンラインMarkdownエディタ。リアルタイムプレビュー、シンタックスハイライト、HTMLエクスポート。テーブル、コードブロック、フローチャートなど拡張構文対応、ライティング効率向上。