Last active
February 24, 2026 01:06
-
-
Save ohsawa0515/411eecc5dd76196bcc6d31ba31e9a924 to your computer and use it in GitHub Desktop.
macOS initial setup bootstrap script (Homebrew / gh / chezmoi / Ansible)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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" |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
/bin/bash -c "$(curl -fsSL https://gist.githubusercontent.com/ohsawa0515/411eecc5dd76196bcc6d31ba31e9a924/raw/bootstrap.sh)"