01.ShellScript コーディング規約
このドキュメントでは、CI/CDのワークフローや、開発補助のためのスクリプトでBash/Zshなどのシェルスクリプトを記述する際の規約を定めます。 シェルスクリプトは、書き方によって挙動が大きく変わるため、安全で予測可能なコードを書くことが重要です。
共通原則との関係
本規約は、01.共通コーディング原則を、シェルスクリプトに特化・具体化したものです。必ず共通原則にも目を通してください。
1. 基本方針: Google Shell Style Guide準拠
- 本プロジェクトのシェルスクリプトは、世界的に広く参照されているGoogle Shell Style Guideに準拠することを基本とします。
- このガイドは、堅牢で保守性の高いシェルスクリプトを書くための、優れたベストプラクティス集です。
2. スクリプトの作法
2.1. Shebang (シバン)
- 全てのスクリプトファイルの先頭には、どのシェルで実行すべきかを明記するShebangを必ず記述します。
bash
を想定している場合は、環境によるパスの違いを吸収するため、#!/usr/bin/env bash
を使用することを推奨します。
2.2. エラー発生時の即時終了 (安全設定)
-
スクリプトの意図しない動作を防ぐため、ファイルの先頭(Shebangの直後)に、以下の「安全設定」を記述することを強く推奨します。
*set -euo pipefail
set -e
: コマンドがエラー(ゼロ以外の終了コード)になった時点で、スクリプトを即座に終了させます。 *set -u
: 未定義の変数を使用しようとした時点で、スクリプトを即座に終了させます。 *set -o pipefail
: パイプライン(|
)の途中でいずれかのコマンドが失敗した場合、パイプライン全体の終了コードをエラーとします。
3. 自動チェックツールの利用
ShellCheck
の利用を強く推奨します。- 役割: シェルスクリプトの一般的なエラー、バグ、アンチパターン、スタイル問題を自動で検出してくれる、非常に強力な静的解析ツールです。
- VSCodeの拡張機能も存在し、リアルタイムでコードをチェックできます。CI/CDプロセスへの組み込みも推奨します。
4. コーディングスタイル
4.1. 変数
- 命名:
lower_snake_case
(小文字のスネークケース)を基本とします。環境変数との衝突を避けるため、ローカル変数を大文字にするのは避けてください。 - 展開: 変数を展開する際は、意図しない単語分割やグロブ展開を防ぐため、常にダブルクォーテーションで囲みます。
- 良い例:
echo "$my_variable"
- 悪い例:
echo $my_variable
- 良い例:
4.2. コマンド置換
- 古いバッククォート (
`command`
) は使用せず、ネストも可能なモダンな$(command)
形式を必ず使用します。
4.3. 条件分岐
-
文字列比較やファイルチェックには、古い
[
(testコマンド)ではなく、より高機能で安全な[[ ... ]]
を使用します。# 良い例 if [[ "$my_var" == "hello" ]]; then # ... fi
5. 要求IDとの連携
-
スクリプト内の特定の処理が、何らかの要求仕様に関連する場合は、コメントで要求IDを明記します。
# REQ-CI-2.1: ビルド成果物をS3にアップロードする echo "Uploading artifacts to S3..." aws s3 cp ./site s3://my-bucket/ --recursive