Skip to content

Instantly share code, notes, and snippets.

@ohsawa0515
Last active February 24, 2026 01:06
Show Gist options
  • Select an option

  • Save ohsawa0515/411eecc5dd76196bcc6d31ba31e9a924 to your computer and use it in GitHub Desktop.

Select an option

Save ohsawa0515/411eecc5dd76196bcc6d31ba31e9a924 to your computer and use it in GitHub Desktop.
macOS initial setup bootstrap script (Homebrew / gh / chezmoi / Ansible)
#!/bin/bash
# =============================================================================
# macOS Bootstrap Script
#
# 使い方(公開 Gist から実行):
# /bin/bash -c "$(curl -fsSL <gist_url>)"
#
# または手動で:
# bash bootstrap.sh
# =============================================================================
set -euo pipefail
# --- 色付きログ ---
log_info() { printf "\033[1;34m[INFO]\033[0m %s\n" "$*"; }
log_ok() { printf "\033[1;32m[ OK ]\033[0m %s\n" "$*"; }
log_warn() { printf "\033[1;33m[WARN]\033[0m %s\n" "$*"; }
log_error() { printf "\033[1;31m[ERROR]\033[0m %s\n" "$*" >&2; }
log_step() { printf "\n\033[1;36m==> %s\033[0m\n" "$*"; }
# --- 設定 ---
GITHUB_USER="ohsawa0515"
DOTFILES_REPO="${GITHUB_USER}/dotfiles"
DOTFILES_DIR="${HOME}/dev/src/github.com/${GITHUB_USER}/dotfiles"
CHEZMOI_CONFIG_DIR="${HOME}/.config/chezmoi"
CHEZMOI_CONFIG="${CHEZMOI_CONFIG_DIR}/chezmoi.toml"
# =============================================================================
# 前提チェック
# =============================================================================
if [[ "$(uname)" != "Darwin" ]]; then
log_error "このスクリプトは macOS 専用です"
exit 1
fi
log_step "macOS Bootstrap を開始します"
log_info "dotfiles: ${DOTFILES_DIR}"
# =============================================================================
# 1. Xcode Command Line Tools
# =============================================================================
log_step "Xcode Command Line Tools"
if ! xcode-select -p &>/dev/null; then
log_info "Xcode Command Line Tools をインストール中..."
xcode-select --install
log_warn "インストール完了後、Enter を押してください..."
read -r
else
log_ok "Xcode Command Line Tools: インストール済み"
fi
# =============================================================================
# 2. Homebrew
# =============================================================================
log_step "Homebrew"
if ! command -v brew &>/dev/null; then
log_info "Homebrew をインストール中..."
sudo echo 'sudo run... Enter password: '
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
# Apple Silicon / Intel 両対応で PATH を設定
if [[ -f /opt/homebrew/bin/brew ]]; then
eval "$(/opt/homebrew/bin/brew shellenv)"
elif [[ -f /usr/local/bin/brew ]]; then
eval "$(/usr/local/bin/brew shellenv)"
fi
log_ok "Homebrew: $(brew --version | head -1)"
# =============================================================================
# 3. 必須ツールのインストール (gh, chezmoi, ansible)
# =============================================================================
log_step "必須ツール (gh / chezmoi / ansible)"
TOOLS_TO_INSTALL=()
command -v gh &>/dev/null || TOOLS_TO_INSTALL+=(gh)
command -v chezmoi &>/dev/null || TOOLS_TO_INSTALL+=(chezmoi)
command -v ansible &>/dev/null || TOOLS_TO_INSTALL+=(ansible)
if [[ ${#TOOLS_TO_INSTALL[@]} -gt 0 ]]; then
log_info "インストール: ${TOOLS_TO_INSTALL[*]}"
brew install "${TOOLS_TO_INSTALL[@]}"
fi
log_ok "gh: $(gh --version | head -1)"
log_ok "chezmoi: $(chezmoi --version)"
log_ok "ansible: $(ansible --version | head -1)"
# =============================================================================
# 4. GitHub 認証
# =============================================================================
log_step "GitHub 認証 (gh auth login)"
if ! gh auth status &>/dev/null; then
log_info "ブラウザで GitHub にログインします..."
gh auth login --web -h github.com
else
log_ok "GitHub CLI: 認証済み ($(gh auth status 2>&1 | grep 'Logged in' | head -1 | xargs))"
fi
# =============================================================================
# 5. dotfiles リポジトリをクローン
# =============================================================================
log_step "dotfiles をクローン"
if [[ ! -d "${DOTFILES_DIR}/.git" ]]; then
log_info "${DOTFILES_REPO} を ${DOTFILES_DIR} にクローン中..."
mkdir -p "$(dirname "${DOTFILES_DIR}")"
gh repo clone "${DOTFILES_REPO}" "${DOTFILES_DIR}"
else
log_ok "dotfiles: すでにクローン済み (${DOTFILES_DIR})"
fi
# =============================================================================
# 6. Ansible Galaxy コレクション
# =============================================================================
log_step "Ansible Galaxy コレクション"
log_info "community.general をインストール中..."
ansible-galaxy collection install -r "${DOTFILES_DIR}/ansible/requirements.yml"
log_ok "Ansible Galaxy: インストール済み"
# =============================================================================
# 7. chezmoi 設定 & dotfiles 適用
# =============================================================================
log_step "chezmoi 設定 & dotfiles 適用"
if [[ ! -f "${CHEZMOI_CONFIG}" ]]; then
log_info "chezmoi 設定ファイルを作成中: ${CHEZMOI_CONFIG}"
mkdir -p "${CHEZMOI_CONFIG_DIR}"
cat > "${CHEZMOI_CONFIG}" <<EOF
sourceDir = "${DOTFILES_DIR}"
[data]
name = "Shuichi Ohsawa"
email = "ohsawa0515@gmail.com"
EOF
else
log_ok "chezmoi 設定: すでに存在します (${CHEZMOI_CONFIG})"
fi
log_info "chezmoi apply を実行中..."
chezmoi apply
log_ok "chezmoi: dotfiles 適用済み"
# =============================================================================
# 8. Ansible Playbook 実行
# =============================================================================
log_step "Ansible Playbook (macOS セットアップ)"
log_warn "sudo パスワードの入力が求められます"
cd "${DOTFILES_DIR}/ansible"
ansible-playbook mac.yml -K
printf "\n"
log_ok "============================================"
log_ok " セットアップ完了!"
log_ok "============================================"
printf "\n"
log_info "再起動してください。: sudo reboot"
@ohsawa0515
Copy link
Author

/bin/bash -c "$(curl -fsSL https://gist.githubusercontent.com/ohsawa0515/411eecc5dd76196bcc6d31ba31e9a924/raw/bootstrap.sh)" 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment