YAMLインデントスタイル:2スペース vs 4スペース
2スペースと4スペースのYAMLインデントスタイルを比較します。どのツールやエコシステムがどのスタイルを好むかを学び、YAMLフォーマッターでスタイル間を変換する方法を解説します。
詳細な説明
YAMLインデント:適切なスタイルの選択
YAMLはインデントを使用して構造を表現し、インデント幅の選択は可読性、ファイルサイズ、エコシステムの互換性に影響します。最も一般的な2つのスタイルは2スペースと4スペースのインデントです。
2スペースインデント
2スペースインデントはクラウドネイティブエコシステムの事実上の標準です:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 3
template:
spec:
containers:
- name: app
image: my-app:latest
ports:
- containerPort: 8080
使用ツール: Kubernetes、Docker Compose、Helm、GitHub Actions、Prettier、ほとんどのYAMLリンター
4スペースインデント
4スペースインデントはネストレベル間により多くの視覚的分離を提供します:
- hosts: webservers
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Start nginx
service:
name: nginx
state: started
使用ツール: Ansible(歴史的に)、SaltStack、一部のPythonエコシステムツール
インデントが重要な理由
ほとんどのプログラミング言語ではインデントは純粋に見た目ですが、YAMLのインデントは構文的に重要です:
- 不正確なインデントはドキュメント構造を変える
- ファイル内のインデントの混在はパースエラーを引き起こす
- タブはYAMLで明示的に禁止されている(仕様ではスペースのみ必要)
リスト項目のインデント
よくある混乱の原因は、リスト項目(-)が親キーとどのように関係するかです:
# スタイルA:キーコンテンツと同じレベルのリスト項目
items:
- first
- second
# スタイルB:キーの下にインデントされたリスト項目
items:
- first
- second
両方とも有効なYAMLです。スタイルA(インデントされた -)がより一般的で、ほとんどのリンターで推奨されています。
スタイル間の変換
YAMLフォーマッターは、ドキュメント全体をデータ構造にパースし、目的のインデント幅で再シリアライズすることで再インデントできます。これは複数行文字列やネストされた構造を含むすべてのエッジケースを処理するため、最も安全な変換方法です。
ユースケース
インデントの標準化は、チームが共有のYAMLスタイルを採用する際に重要です。ツール間の移行時(例:4スペースのAnsibleから2スペースのKubernetesへ)、一括再インデントにより一貫性が確保されます。CI/CDパイプラインは、自動修正ステップとしてフォーマッターと共にyamllintのようなYAMLリンターを使用してインデント標準を強制できます。