コンテンツにスキップ

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