YAML バリデーター&リンター — エラーと隠れた落とし穴を発見

YAML を検証し、各エラーの正確な行と列を表示。yes/no の真偽値、タブ、重複キーなど、パーサーが黙って受け入れてしまうミスも見つけます。

16 行
無効な YAML(15 行目、5 列目):duplicated mapping key:1 つのマッピング内に同じキーが 2 回出現しています。
13 image: postgres:16
14 restart: always
15 restart: unless-stopped
^
Lint(5)
services:
  web:
    image: nginx:1.27
    ports:
      - '8080:80'
      - '22:22'
    environment:
      COUNTRY: 'NO'
      DEBUG: 'yes'
      APP_VERSION: 1.1
  db:
    image: postgres:16
    restart: unless-stopped

重複したキー:最後の値を採用して表示しています。多くのパーサーも警告なしにこの動作をします。 整形表示は解析したデータから再構築しているため、コメントやアンカーは残りません。問題は元のファイルで修正してください。

すべてブラウザ内で動作します。YAML がアップロードされることはないため、設定ファイル内の機密情報はお使いのマシンから出ません。 すべての無料ツールを見る.

不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。

この無料の YAML バリデーターは、YAML ファイルの構文エラーをチェックし、正確な行と列を、前後の行と問題箇所の下のキャレット付きで表示します。Kubernetes のマニフェスト、docker-compose.yml、GitHub Actions のワークフロー、OpenAPI の仕様を貼り付ければ、解析できるかどうか、できないならどこで壊れているかが一瞬でわかります。

パーサーがファイルを受け入れることと、ファイルが意図どおりの意味になることは別です。リンターは、YAML 1.1 のパーサー(PyYAML、SnakeYAML、Go の yaml.v2)が YAML 1.2 とは異なる解釈をする値も指摘します。NO は false に、0755 は 493 に、22:22 は 1342 に、1.10 は 1.1 になります。すべての重複キーを両方の行番号付きで、インデントのタブ、スペースなしで書かれた「key:value」も一覧表示します。チェックするのは構文とこれらの落とし穴で、Kubernetes API のようなスキーマに対する検証は行いません。

使い方

  1. YAML をエディターに貼り付けます。何が指摘されるかを示すため、わざとミスをいくつか入れた docker-compose の例が読み込まれています。
  2. ステータスバーを確認します。緑は有効、赤はエラーを行と列、前後の行とともに表示します。
  3. リントの一覧の項目をクリックすると、エディターのその行に移動して修正できます。
  4. 整形した YAML と JSON の表示を切り替えて、ファイルが実際にどう解析されたかを確認します。yes/no や 0755 の思わぬ解釈は、ここで一目瞭然になります。
  5. 必要なら整形した出力をコピーまたはダウンロードし、コメントが残るように修正は元のファイルで続けます。

よくある質問

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

YAML 1.1 では、引用符で囲まれていない y、yes、n、no、on、off という単語(一般的な大文字・小文字のどの組み合わせでも)は真偽値です。そのため、ノルウェーを表す NO を含む国コードのリストでは、文字列の "NO" ではなく false になってしまいます。YAML 1.2(2009 年)でこれは修正され、真偽値は true と false だけになりました。しかし PyYAML、Ruby の Psych、Java の SnakeYAML、Go の yaml.v2 など、広く使われている多くのパーサーは今も 1.1 に従っているため、安全な対処法はこうした値を引用符で囲むことです:"NO"、"yes"、"on"。

YAML でタブが使えないのはなぜですか?

YAML の仕様では、タブの幅が定義されておらず、YAML はインデントで構造を表すため、インデントにタブを使うことを禁止しています。値やコメントの中ではタブを使えますが、行頭の空白には使えません。.yml と .yaml ファイルではエディターがスペースを挿入するように設定しましょう。1 段につきスペース 2 つが最も一般的な慣習です。

YAML で重複キーは許されますか?

いいえ。YAML の仕様ではマッピングのキーは一意でなければなりませんが、その扱いはパーサーによって異なります。(このバリデーターのように)エラーにするものもあれば、黙って最後の値を採用するものもあります。そのため重複は危険で、長いマニフェストでは最初に出てきたほうを編集しても何も変わらない、ということが起こります。このツールは、すべての重複を、キーが最初に定義された行とともに一覧表示します。

YAML で「bad indentation of a mapping entry」と表示されるのはなぜですか?

その行のインデントが同じ階層の他のキーと異なっているか、値にコロンとスペースが含まれていて引用符が必要かのどちらかです。たとえば title: Note: read this は、パーサーが 2 つ目のキーがあると判断するため失敗します。title: "Note: read this" と書いてください。表示された行とその上の行を確認しましょう。エラーは前の行から始まっていることがよくあります。

YAML は JSON の上位互換ですか?

YAML 1.2 は有効な JSON が有効な YAML にもなるよう設計されており、実際どんな JSON 文書もここで解析できます。逆は成り立ちません。YAML にはコメント、アンカーとエイリアス、複数行の文字列、1 ファイル内の複数ドキュメントがあります。YAML ファイルが素の JSON データにどう対応するかは、JSON の表示で確認できます。

Kubernetes や GitHub Actions のスキーマも検証できますか?

いいえ。チェックするのは YAML の構文と上記の落とし穴で、実際の失敗の大半はこれが原因ですが、Kubernetes の Deployment や GitHub のワークフローでどのキーが使えるかは判断しません。スキーマの検証には、kubectl apply --dry-run=server、kubeconform、または対応する JSON Schema を設定した VS Code の YAML 拡張機能を使ってください。

YAML 1.1 と YAML 1.2:意味が変わる値

このバリデーターは YAML 1.2 のルール(js-yaml)で解析します。ファイルを YAML 1.1 のパーサーが読む場合、次の引用符なしの値は別の意味になるため、リンターがそれぞれについて警告します。

• yes、no、on、off、y、n → 1.1 では真偽値、1.2 では文字列。GitHub Actions のワークフローは on: で始まり、1.1 のパーサーはこれを true というキーとして読みます。

• 0755 → 1.1 では 8 進数の 493、1.2 では 10 進数の 755。ファイルのパーミッションや、先頭がゼロの郵便番号がどちらも影響を受けます。

• 22:22 → 1.1 では 1342(60 進数)、1.2 では文字列の "22:22"。Docker の Compose のドキュメントがポートのマッピングを引用符で囲むよう勧めているのは、まさにこのためです。

• 1.10 → どちらのバージョンでも数値の 1.1。バージョン番号は引用符で囲みましょう。

• 2024-01-05 → 多くのパーサーで文字列ではなくタイムスタンプ。

これらすべてを避けるルール:テキストのつもりなのに別のものに見える値は、引用符で囲みましょう。

よくある YAML のエラーと対処法

• "bad indentation of a mapping entry":インデントの不一致、または ": " を含む引用符なしの値。

• "end of the stream or a document separator is expected":たいていは同じ階層の行よりインデントが浅い行か、閉じ引用符の後のテキスト。

• "can not read a block mapping entry; a multiline key may not be an implicit key":前の行のコロンの欠落や、開いたまま閉じていない引用符であることが多いです。

• "unexpected end of the stream within a double quoted scalar":報告された行より上のどこかに閉じていない " があります。

• @、`、*、&、!、|、> で始まる値は特別な意味を持つか予約されています。引用符で囲みましょう。

• 前にスペースがある # はコメントの開始なので、password: abc #123 では abc が保存されます。" #" を含む値は引用符で囲みましょう。

関連する無料ツール

  • JSON 整形 — JSON を整形、圧縮(minify)、検証し、解析エラーは行と列で位置を示します。ブラウザ上で動作、アップロード不要。
  • JSON → TypeScript 変換 — JSON のサンプルを貼り付けると、TypeScript のインターフェース、Zod スキーマ、JSON Schema、または Go、Python、Java、C#、Kotlin、Swift、Rust の型を生成します。
  • SQL フォーマッター — 乱雑な SQL を、PostgreSQL、MySQL、T-SQL、BigQuery などに対応した、読みやすく一貫したインデントのクエリに整形します。ブラウザで動作します。
  • 正規表現テスター — サンプルテキストに対して正規表現をテストし、マッチのハイライト、キャプチャグループ、置換のプレビューをリアルタイムで確認。無料、ブラウザ上で動作。
  • 差分チェッカー — テキスト、コード、JSON ファイルの 2 つのバージョンを比較し、どの行、単語、文字が変わったかを正確に確認できます。