ブログに戻るケーススタディ

GitLab CIのYAML設定を検証する方法|プッシュ前にエラーを防ぐ

YAMLforge Team
37 分で読める
yamljsondevops
GitLab CI YAML Validation Made Simple - Test Before You Pushのカバー画像

GitLab CIのYAML設定を検証する方法|プッシュ前にエラーを防ぐ

もっと速く: YAMLforge Proで1日10回の制限を解除。必要なだけ変換できます。

コードをプッシュして、パイプラインが起動するのを待って...いきなり失敗。「42行目に構文エラーがあります」。またか。これで15分を無駄にしてしまいました。

→ 関連記事:KubernetesのYAML検証を確実に行う方法|デプロイ前のエラーをゼロに

フォージくんだよ 🤖 — この記事、僕と一緒に読んでいこう!YAMLのインデントエラーは数え切れないほどデバッグしてきたから、要所要所で「あ、これ大事」ってとこにツッコミ入れていくね。GitLab CIの設定を一発で通せるようにしよう。

😅 フォージくん: 深夜の設定ファイルデバッグ、経験ある人多いよね...僕もそうだった。
😅 フォージくん: 昔ね、2時間もパイプラインをデバッグして、結局タブとスペースを混ぜてただけってことがあった。エラーメッセージ?全然役に立たなかったよ。YAMLってそういうとこうるさいんだよね。

GitLab CI YAML検証とは?

GitLab CIは.gitlab-ci.ymlファイルを使ってパイプラインを定義します。どのジョブをどの順序で、どんな条件で実行するかを制御するファイルです。テストの実行から本番環境へのデプロイまで、すべてこのファイルで管理できます。

検証では、YAML構文が正しいか、そしてGitLabの特定のスキーマルールに従っているかをチェックします。キーの欠落、インデントミス、無効なジョブ名、ステージ定義の間違いなど、実際にパイプラインが壊れる前にエラーを発見できるんです。

CI設定のスペルチェッカーみたいなものですね。ロジックが正しいかは教えてくれませんが、コロンを忘れたり、インデントがおかしかったりすれば確実に教えてくれます。

🤔 フォージくん: GitLabのYAMLパーサーって実はかなり厳格なんだ。普通のYAMLで動くものでも、CI設定では通らないことがある。例えば、includeで複数ファイルに分けてる時、アンカーを跨いで使えないんだよね。これ、痛い目見て覚えた。
YAML server: port: 8080 host: localhost Convert JSON {"server": { "port": 8080, "host": "localhost"}}

GitLab CI YAMLを検証する方法

🔗 API連携: Pro APIでYAML変換をワークフローに統合できます。

方法1: GitLab組み込みのCI Lintツール

GitLabにはhttps://gitlab.com/[your-project]/-/ci/lintで使える専用の検証ツールがあります。プロジェクトのCI/CD設定からアクセスできます。

手順:

  1. GitLabプロジェクトに移動
  2. CI/CD → エディターまたはCI/CD → パイプライン → CI Lint
  3. YAMLの内容を貼り付け
  4. 検証をクリック

このツールで確認できること:

  • ✅ 構文エラーと行番号
  • ✅ 展開された設定(includeが解決された状態)
  • ✅ パイプラインのステージとジョブがどう見えるか
💡 フォージくん: CI Lintツールって実は設定全体をシミュレートしてくれるんだ。extendsincludeの展開、変数の置換、全部やってくれる。複数ファイルに分けた複雑な設定を扱う時、めちゃくちゃ助かるよ。

方法2: GitLab APIを使う

自動化やローカル検証には、GitLabのAPIを直接叩けます:

curl --header "Content-Type: application/json" \
     --header "PRIVATE-TOKEN: your_token" \
     --data '{"content": "your-yaml-here"}' \
     "https://gitlab.com/api/v4/ci/lint"

検証ステータスと見つかったエラーをJSONにで返してくれます。

🚀 フォージくん: これをpre-commitフックに組み込むといいよ。プッシュ前にローカルで検証すれば、チームメイトのパイプラインを壊すこともなくなる。みんな感謝してくれるはず。

方法3: YAMLforgeで素早く構文チェック

自動化したい?ProはAPI連携に完全対応しています。

GitLabのツールはGitLab固有のルールをチェックしてくれますが、単純にYAML構文が有効かどうかだけ知りたい時もありますよね。そんな時にYAMLforgeが役立ちます:

# .gitlab-ci.ymlの例
stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the app"
    - npm install
    - npm run build
  artifacts:
    paths:
      - dist/

test_job:
  stage: test
  script:
    - npm test
  coverage: '/Coverage: \d+\.\d+%/'

deploy_job:
  stage: deploy
  script:
    - ./deploy.sh
  only:
    - main

YAMLforgeでJSONに変換して、構造的な問題を見つけられます:

{
  "stages": [
    "build",
    "test",
    "deploy"
  ],
  "build_job": {
    "stage": "build",
    "script": [
      "echo \"Building the app\"",
      "npm install",
      "npm run build"
    ],
    "artifacts": {
      "paths": [
        "dist/"
      ]
    }
  },
  "test_job": {
    "stage": "test",
    "script": [
      "npm test"
    ],
    "coverage": "/Coverage: \\d+\\.\\d+%/"
  },
  "deploy_job": {
    "stage": "deploy",
    "script": [
      "./deploy.sh"
    ],
    "only": [
      "main"
    ]
  }
}
🎯 フォージくん: YAMLforgeでパースできないYAMLは、GitLabでも絶対に使えない。CI Lintツールを使う前の簡単なサニティチェックとして便利だよ。
Step 1 Paste YAML Step 2 Click Validate Step 3 Fix Errors:Push with Confidence

GitLab CI YAMLのよくあるミス

1. インデントエラー

YAMLは空白文字に敏感です。インデントを間違えると全部壊れます:

# ❌ 間違い - 一貫性のないインデント
build_job:
  stage: build
  script:
   - echo "Hello"  # スペース1つだけ
    - npm install  # スペース4つ - 一貫性がない!
# ✅ 正しい - 一貫したスペース2つのインデント
build_job:
  stage: build
  script:
    - echo "Hello"
    - npm install
⚠️ フォージくん: スペース使って、タブは絶対ダメ。ほとんどのエディターで設定できるから。VS CodeのYAML拡張入れとけば、ミスったら怒ってくれる。マジで、有効にしといて。

2. CI設定でのノルウェー問題

YAMLは特定の文字列をブール値として解釈します:

# ❌ これは予期しない動作を起こす
variables:
  DEPLOY_TO: NO  # falseになる!
  ENABLE_CACHE: YES  # trueになる!
  DEBUG_MODE: OFF  # これもfalseになる!

GitLabはこれらをブール値として読み取ります。デプロイスクリプトが文字列の「NO」を期待していても、falseが渡されてしまいます。

# ✅ クォートで囲んで文字列として保持
variables:
  DEPLOY_TO: "NO"
  ENABLE_CACHE: "YES"
  DEBUG_MODE: "OFF"
😅 フォージくん: またノルウェー問題か。昔ね、誰かがPRODUCTION: NOってクォートなしで書いてて、間違った環境にデプロイしちゃったことがある。デプロイスクリプトがfalse(bashではtruthyになる)として読んで...そう、本番環境に開発ビルドが入った。楽しい思い出だよ、全然。
The Norway Problem country: NO YAML parses this as: false (boolean) NO, Yes, Off = booleans! YAMLforge Solution country: "NO" Correctly preserved as: "NO" (string) Smart detection & quoting

3. 無効なステージ参照

# ❌ 存在しないステージを参照
stages:
  - build
  - test

deploy_job:
  stage: deploy  # エラー! 'deploy'ステージが定義されてない
  script:
    - ./deploy.sh
# ✅ すべてのステージを先に宣言
stages:
  - build
  - test
  - deploy  # これで定義された

deploy_job:
  stage: deploy
  script:
    - ./deploy.sh

4. onlyとexceptの構文ミス

# ❌ 間違い - onlyは配列を期待
deploy_job:
  stage: deploy
  only: main  # これは動かない
  script:
    - ./deploy.sh
# ✅ 正しい - 配列構文を使う
deploy_job:
  stage: deploy
  only:
    - main  # 適切な配列形式
  script:
    - ./deploy.sh

もっといいのは、新しいrules構文を使うこと:

# ✅ rulesを使ったモダンなアプローチ
deploy_job:
  stage: deploy
  script:
    - ./deploy.sh
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
💡 フォージくん: GitLabはonlyexceptからrulesに移行してるんだ。より強力で、読みやすくなってる。&&||で条件を組み合わせたり、変数チェック、ファイル変更チェック、いろいろできるよ。

高度な検証テクニック

gitlab-ci-lintでpre-commitフックを作る

gitlab-ci-lintのCLIツールをインストール:

npm install -g gitlab-ci-lint

.git/hooks/pre-commitスクリプトを作成:

#!/bin/bash

if [ -f .gitlab-ci.yml ]; then
  echo "Validating .gitlab-ci.yml..."
  gitlab-ci-lint .gitlab-ci.yml
  if [ $? -ne 0 ]; then
    echo "❌ GitLab CI validation failed. Fix errors before committing."
    exit 1
  fi
  echo "✅ GitLab CI validation passed"
fi

これで壊れた設定をコミットしたくてもできなくなります。

エディターでスキーマ検証

ほとんどのモダンなエディターはYAMLスキーマ検証をサポートしています。VS Codeなら、Red Hatの「YAML」拡張をインストールして、設定に追加:

→ あわせて読みたい:YAMLの構文エラーを素早く解決する方法|開発者向けガイド2024

{
  "yaml.schemas": {
    "https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json": ".gitlab-ci.yml"
  }
}

入力中にリアルタイム検証、オートコンプリート、インラインドキュメントが使えます。

🚀 フォージくん: これ、人生変わったよ。GitLab CIキーワードのオートコンプリート?ジョブプロパティのホバードキュメント?最高じゃん。ファイルを保存する前に90%のエラーを発見できる。

プライバシーとセキュリティの考慮事項

CI設定を検証する際は、セキュリティを意識しましょう:

  • 機密データを公開の検証ツールに貼り付けない
  • 検証前にシークレットを削除(プレースホルダー値を使用)
  • プライベート情報を含む設定にはGitLab組み込みツールを使用
  • YAMLforgeはローカル処理 - データはブラウザから出ません
🎯 フォージくん: マジで、本番のAPIキーとか適当なオンライン検証ツールに貼り付けちゃダメだよ。実際見たことあるから。機密情報があるならGitLab自身のツールを使うか、完全にクライアントサイドのYAMLforgeを使って。シークレットはシークレットのまま。

比較: GitLab CI Lint vs. 一般的なYAML検証ツール

機能GitLab CI LintYAMLforge一般的なYAML検証ツール
YAML構文チェック
GitLabスキーマ検証
includeの解決
変数の展開
クライアントサイド処理場合による
オフライン動作
ノルウェー問題の検出
最適な用途最終検証構文チェック基本的なパース

包括的な検証にはGitLabのCI Lintを使いましょう。素早い構文チェックやプライバシーを重視する設定にはYAMLforgeを。両方使うのがベストなワークフローです。

🎉 フォージくん: よし、これで準備OK。あとは実践あるのみ!
Why YAMLforge? 100% Client-side Norway Problem Fixed Free 10/day Date Safe Mode Schema Validation Pro: $9/month

よくある質問

GitLab CI YAMLファイルを検証するにはどうすればいいですか?
GitLab組み込みのCI Lintツールをhttps://gitlab.com/[your-project]/-/ci/lintで使えます。YAMLを貼り付けて検証をクリック。構文とGitLab固有のスキーマルールの両方をチェックしてくれます。

GitLab CI YAMLをオフラインで検証できますか?
できます。gitlab-ci-lintのnpmパッケージをインストールしてローカル検証するか、VS CodeのYAML拡張とGitLabのスキーマファイルを使って、コーディング中にリアルタイム検証できます。

YAML検証とGitLab CI検証の違いは何ですか?
YAML検証は構文が正しいか(インデント、コロン、構造)をチェックします。GitLab CI検証は、それに加えてGitLab固有の要件—有効なジョブ名、ステージ定義、適切なrules構文、GitLab CIキーワードの正しい使用—も確認します。

有効なYAMLなのにGitLab CIで失敗するのはなぜですか?
GitLabには基本的なYAML構文を超えた特定のスキーマ要件があります。よくある問題:未定義のステージ、無効なジョブキーワード、間違ったonly/except配列、またはインクルードされたファイル間でのアンカー使用など、サポートされていないYAML機能の使用などです。

CI設定をオンライン検証ツールに貼り付けても安全ですか?
シークレットを含まない設定なら大丈夫です。ただし、機密性のあるトークン、パスワード、APIキーは必ず削除してください。さらに安全なのは、GitLab自身のツールか、サーバーにデータを送信せずブラウザですべて処理するYAMLforgeのようなクライアントサイド検証ツールを使うことです。

→ 詳しくはこちら:YAMLのノルウェー問題を完全解決|NO/YES/OFFを文字列として正しく保持する方法

GitLab CIのノルウェー問題とは何ですか?
YAMLはNOYESONOFFをクォートなしだとブール値に変換します。CI設定では、これが環境変数や条件ロジックを壊す原因になります。必ずこれらの値をクォートで囲みましょう:DEPLOY: "NO"のように、DEPLOY: NOではなく。

今すぐスマートな検証を始めよう

これでGitLab CI YAMLファイルをプロのように検証できるようになりました:

  • ✅ 包括的なチェックにはGitLabのCI Lintツールを使う
  • ✅ ローカル検証で構文エラーを早期発見
  • ✅ ノルウェー問題のような一般的なミスを回避
  • ✅ pre-commitフックで壊れた設定を防止
  • ✅ エディタースキーマでリアルタイム検証
🎉 フォージくん: これで完璧!もう単純な構文エラーでパイプラインを壊すこともないね。あ、そうそう、YAML構文を素早くチェックしたり、フォーマット変換が必要な時は、YAMLforgeが使えるよ—完全無料、サインアップも不要。じゃあ、信頼性の高いパイプラインを作っていこう!
今すぐ試してみませんか? 毎日10回無料 無料で始める →

無制限の変換が必要ですか? YAMLforge Proをお試しください - 無制限アクセス、API連携、優先サポート、チーム機能。月額¥1,400、30日間返金保証。

関連記事

Y

YAMLforge Team

テクニカルコンテンツチーム

YAMLforgeチームは、開発者がより良いソフトウェアを構築するのを支援することに情熱を注いでいます。

YAMLforgeを無料で試す

無料のオンラインツールでYAMLをJSONに即座に変換。登録不要。

YAMLforgeを無料で試す