Skip to content
Latchkey

YAMLとは? YAML Aint Markup Languageの解説

YAMLは、CIのworkflow、Kubernetesマニフェスト、ツール設定などの設定を書くために使われる、インデントベースで人間に優しいデータフォーマットです。

YAML("YAML Aint Markup Language"の再帰的頭字語)は、ほとんどのCI/CDパイプラインが書かれるフォーマットです。括弧の代わりにインデントを使うため、手で読み書きするのが快適ですが、その同じ空白への敏感さがほとんどのYAMLのミスの原因です。.github/workflowsファイルを編集したことがあるなら、あなたはYAMLを書いたことがあります。

YAMLとは

YAMLはJSONと同じデータ - map(キーと値のペア)、sequence(リスト)、scalar(string、数値、boolean) - を表現しますが、中括弧や角括弧の代わりにインデントとダッシュを使います。JSONの厳格なsupersetなので、JSONも有効なYAMLです。コメント、複数行のstring、再利用可能なanchorをサポートしており、設定を書く人がこれを好む理由です。

インデントは意味を持つ

YAMLはネストを表現するためにスペース(tabは決して使わない)を使うため、たった1行のずれがキーを子から兄弟に変え、意味を静かに変えてしまうことがあります。これはworkflowファイルが壊れる最も一般的な原因です。ほとんどのエディタとlinterは、CIに到達する前にインデントエラーを指摘できます。

落とし穴: ノルウェー問題と型

YAMLは型を推測するため、驚きを引き起こします。典型的なのは"ノルウェー問題"です: 国コードの"NO"がbooleanのfalseとして解析されます。1.20のような引用符なしのバージョン番号は、floatになることで末尾のゼロを失うことがあります。あいまいなscalarをstringとして引用符で囲むことで、これらの罠を避けられます。

CIのworkflowにおけるYAML

GitHub Actions、GitLab CI、CircleCI、そしてほとんどのパイプラインツールは、workflowをYAMLで定義します。job、step、trigger、matrixをネストしたmapとリストとして宣言します。インデントが重要なので、pre-commitフックでYAMLのlinterを使ってファイルを検証すると、多くの失敗した実行を節約できます。

A workflow file is YAML
# A minimal GitHub Actions workflow in YAML
name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo "hello"

Latchkeyについての注記

既存のworkflowファイルで、1つのYAML値 - runs-onのlabel - を変更するだけで、Latchkeyのマネージドrunnerを選択できます。新しい構文も別の設定フォーマットも不要です: あなたのYAMLパイプラインの残りは、そのまま変わりません。

重要なポイント

  • YAMLはインデントベースで人間に優しいデータフォーマットであり、JSONの厳格なsupersetです。
  • 空白は意味を持ち、tabは禁止されているため、ほとんどのYAMLのバグはインデントのミスです。
  • CIのworkflowファイルの標準フォーマットなので、CIにYAMLのlinterを入れると多くの失敗を防げます。

関連ガイド