@shinyaz

dotfiles にテストスクリプトを書くとファイル差分まで検証できる

約1分

dotfiles を複数マシンで使っていると、「リポジトリは更新したのにデプロイし忘れた」「手動で設定をいじって差分が出ている」という状況が頻発する。install.sh の横に test.sh を置いて、3段階で検証するようにした。

# ファイル存在チェック
check_file() {
  [[ -f "$1" ]] && ok "$2: $1" || ng "$2 not found: $1"
}
 
# パーミッションチェック(SSH 用に 700/600 を検証)
check_permission() {
  local actual=$(stat -c "%a" "$1" 2>/dev/null)
  [[ "$actual" == "$2" ]] && ok "$3: $2" || ng "$3: $actual (expected: $2)"
}
 
# 内容差分チェック(リポジトリ vs デプロイ先)
check_file_diff() {
  local src_content dest_content
  if [[ "$4" == "user_section" ]]; then
    src_content=$(sed '/^\[user\]/,/^$/d' "$1")
    dest_content=$(sed '/^\[user\]/,/^$/d' "$2")
  else
    src_content=$(cat "$1")
    dest_content=$(cat "$2")
  fi
  diff -q <(echo "$src_content") <(echo "$dest_content") &>/dev/null \
    && ok "$3 content matches" \
    || ng "$3 content differs"
}

ポイントは check_file_diff の除外パターンだ。Git config の [user] セクション(名前・メール・署名鍵)はマシンごとに異なるので、sed でセクションごと除外してから比較する。これがないとすべてのマシンで差分が出てしまい、テストが実質無意味になる。

./test.sh を実行すれば色付きで pass/fail が一覧表示されるので、デプロイ忘れや意図しない差分に即座に気づける。

共有する

田原 慎也

田原 慎也

ソリューションアーキテクト @ AWS

AWS ソリューションアーキテクトとして金融業界のお客様を中心に技術支援を行っています。クラウドアーキテクチャや AI/ML に関する学びをこのサイトで発信しています。このサイトの内容は個人の見解であり、所属企業の公式な意見や見解を代表するものではありません。