macOS 開発環境のセットアップ
macOS 開発環境のセットアップ手順を体系的に解説。システム準備、パッケージ管理、シェル設定、言語ランタイム、Git、コンテナまで網羅し、make all で自動再現可能。
macOS 環境を初めてセットアップする、あるいは再インストール後に構成する際、ツールチェインのバージョン、インストールパス、権限制御のあたりでつまずきやすいものです。本記事では「システム準備 → パッケージ管理 → ターミナルとシェル → 言語ランタイム → バージョン管理 → コンテナと一般ツール」の順に汎用的なフローを整理し、以降の開発作業を迅速に開始できるようにします。
ワンクリック自動化:本記事に対応する自動化スクリプトは bitnpc/mac-dev-setup にまとめてあります。
make allを実行するだけで全ての設定が完了します。以下の各セクションには対応する Makefile ターゲットとシェルスクリプトが用意されており、対照しながら読むのに適しています。
- システムアップデート:まず最新安定版の macOS にアップグレードし(
設定 → 一般 → ソフトウェア・アップデート)、セキュリティパッチもあわせて適用することを推奨します。 - ディスクと権限:「システム設定 → プライバシーとセキュリティ」でターミナルや開発ツールに対してフルディスクアクセスを有効にし、インストール時の頻繁なポップアップを防ぎます。
- コマンドラインツールの確認:
xcode-select --installで Command Line Tools をインストールします。既にインストール済みの場合はxcode-select --print-pathでパスが想定通りの場所を指しているか確認します。
iOS/macOS アプリ開発に必須です。最新バージョンは App Store から、過去のバージョンは デベロッパセンター から入手できます。
# 現在のシステムで使用されているデフォルトの Xcode パスxcode-select --print-path
# 複数バージョンの切り替えsudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
# Command Line Tools のみインストールxcode-select --install自動化対応:make bootstrap → scripts/bootstrap.sh
Homebrew は macOS における事実上の標準パッケージマネージャーであり、CLI ツールや GUI アプリケーションのインストール、アップグレード、アンインストールを担当し、環境の自動化メンテナンスの中核を担います。
# インストール(Intel と Apple Silicon で共通)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# アンインストール/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"インストール完了後、スクリプトの指示に従って brew shellenv を現在のシェルに注入します。例:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"Brewfile を使って全ての依存関係を一元管理することを推奨します。Brewfile は環境全体の唯一のパッケージリストであり、CLI ツール、GUI アプリケーション、フォントも全てここに宣言します。
# 現在の依存関係を Brewfile にエクスポートbrew bundle dump --describe
# Brewfile に従って依存関係をインストールbrew bundle install自動化対応:make brew → scripts/install_brew_bundle.sh
- ミラーソースの切り替え:国内では清华大学 / 中国科学技術大学のミラーが推奨されます。インストール前に
HOMEBREW_BREW_GIT_REMOTEとHOMEBREW_CORE_GIT_REMOTEを設定するか、コミュニティスクリプトを使って一括置換します。 - 権限不足:Apple Silicon ではデフォルトで
/opt/homebrewにインストールされます。Intel マシンではsudo chown -R $(whoami) /usr/local/*で過去に残った権限問題を修正できます。 - 環境変数の残留:再インストールや移行後は、
~/.bash_profileと~/.zprofile内の古いbrew shellenvをクリーンアップし、無効なパスを指さないようにします。
参考リンク:
macOS 標準のターミナルは機能が限られているため、iTerm2、Oh My Zsh、Starship、および便利なプラグインを組み合わせて効率的なターミナル環境を構築することをお勧めします。
自動化対応:make shell → scripts/setup_shell.sh
brew install --cask iterm2# Oh My Zsh のインストール(既存の場合はスキップ)sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# zsh をデフォルトシェルに設定chsh -s /bin/zsh
# よく使うプラグインのインストール(自動補完 / シンタックスハイライト)brew install zsh-autosuggestions zsh-syntax-highlighting
# Starship クロスシェルプロンプトのインストールbrew install starship
# ~/.zshrc に追記cat <<'EOF' >> ~/.zshrcsource /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zshsource /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsheval "$(starship init zsh)"EOFmacOS 標準のシステム Python はバージョンが古いため、pyenv を使って複数バージョンを管理することを推奨します。
自動化対応:setup_languages.sh(make languages の一部)
# pyenv と仮想環境プラグインのインストールbrew install pyenv pyenv-virtualenv pipx
# 初期化(pyenv は .zprofile と .zshrc の両方に hook を設定する必要があることに注意)echo 'eval "$(pyenv init --path)"' >> ~/.zprofileecho 'eval "$(pyenv init -)"' >> ~/.zshrcsource ~/.zprofile
# 指定バージョンのインストール(デフォルト 3.11.6)pyenv install 3.11.6pyenv global 3.11.6
# (オプション)仮想環境の作成pyenv virtualenv 3.11.6 project-envpyenv activate project-envよく使う補助ツール:
pipx:CLI ツールを隔離してインストール(例:pipx install httpie);poetry/pipenv:プロジェクトの依存関係と仮想環境を管理;uv:仮想環境の高速作成と依存関係のインストールに対応し、pip/virtualenv に代わる新しい選択肢;~/.zshrcにexport PIP_REQUIRE_VIRTUALENV=trueを設定すると、誤ってグローバル環境にインストールするのを防げます。
軽量なバージョンマネージャー rbenv の使用を推奨します。余分なシェル Hook の注入を避けられます。複数言語を統一的に管理したい場合は、asdf と .tool-versions ファイルの組み合わせも検討してください。
自動化対応:setup_languages.sh(make languages の一部)
# rbenv と ruby-build のインストール(ruby-build が install サブコマンドを提供)brew install rbenv ruby-build
# 初期化echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrcsource ~/.zshrc
# 指定バージョンのインストール(デフォルト 3.2.2、Apple Silicon 対応のため OpenSSL パスの指定が必要)RUBY_VERSION=3.2.2rbenv install $RUBY_VERSION --with-openssl-dir=$(brew --prefix openssl@3)rbenv global $RUBY_VERSION
# よく使う gem のインストールgem install bundler cocoapodsVolta の使用を推奨します。Apple Silicon 上での動作がスムーズで、プロジェクトの package.json にバージョンを自動で固定できます。
自動化対応:setup_languages.sh(make languages の一部)
# Volta のインストールbrew install volta
# Volta は自動的に PATH に登録される(~/.zshrc または ~/.zprofile で初期化が必要)# シェルを再読み込み後、node/npm をインストールvolta install node@20volta install pnpmVolta は選択したバージョンをグローバルに固定すると同時に、プロジェクトディレクトリの package.json で volta フィールドを使ってバージョンを上書きすることも可能です。プロジェクトディレクトリを切り替えると自動的にランタイムバージョンが切り替わり、手動で nvm use を実行する必要はありません。
よく使うツールチェイン:
- パッケージマネージャー:
npm、yarn、pnpm。corepack enableを有効にして一元管理; - フォーマッターと Lint:
eslint、prettier、typescriptをプロジェクトのdevDependenciesに記述し、npx経由で呼び出し; - Monorepo:
turbo、nx、lageなどが選択肢。まずvolta pinでバージョンを固定。
自動化対応:setup_languages.sh(make languages の一部)
# Gobrew install gomkdir -p $HOME/go/bin# ~/.zshrc に以下を追加:# export GOPATH=$HOME/go# export GOBIN=$HOME/go/bin# export PATH=$GOBIN:$PATH
# Rustbrew install rustup-initrustup-init -y --no-modify-pathrustup component add rustfmt clippy企業での開発では通常、社内用の身份(GitLab / 自社 Git サービス)と個人用の身份(GitHub)を同時に管理する必要があり、それぞれでユーザー名、メールアドレス、SSH 鍵が異なります。このセクションでは、Git の init.templateDir メカニズムを利用してリポジトリごとに自動切り替えを実現する、自動化可能なデュアルアイデンティティ方式を提供します。
自動化対応:make git → scripts/setup_git.sh
brew install git gh glab
# グローバルデフォルト身份 — 会社用身份git config --global user.name "Your Name"git config --global user.email "your@company.com"git config --global init.defaultBranch maingit config --global core.autocrlf inputgit config --global pull.rebase false核心となる考え方:Git の init.templateDir を利用して、git clone のたびに post-checkout hook を注入し、初回 checkout 後にリモートリポジトリが github.com かどうかを自動検出し、該当する場合は GitHub 身份をローカル設定として追加します。
# 1. 独立した GitHub 身份設定ファイルを作成cat > ~/.gitconfig-github <<EOF[user] name = your-github-username email = your-github@email.comEOF
# 2. init.templateDir を設定git config --global init.templateDir ~/.git-template/hooks/
# 3. post-checkout hook を作成mkdir -p ~/.git-template/hookscat > ~/.git-template/hooks/post-checkout <<'HOOK'#!/bin/zsh# 初回 clone checkout 時のみ実行(SHA1 が全て 0)if [[ "$1" = "0000000000000000000000000000000000000000" ]]; then remote=$(git remote get-url origin 2>/dev/null) if echo "$remote" | grep -q "github.com"; then git config include.path ~/.gitconfig-github echo "✅ GitHub identity applied for $(basename $(git rev-parse --show-toplevel))" fifiHOOKchmod +x ~/.git-template/hooks/post-checkoutこれ以降、git clone したすべてのリポジトリで追加の操作は不要です。GitHub リポジトリは自動的に独立した身份が使われ、社内リポジトリはグローバルデフォルト身份が使われます。
# デフォルト鍵の生成ssh-keygen -t ed25519 -C "your@company.com"
# GitHub 専用鍵の生成(デフォルト鍵を上書きしない)ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "your-github@email.com"
# ssh-agent に追加(Apple Silicon では --apple-use-keychain に対応)ssh-add --apple-use-keychain ~/.ssh/id_ed25519ssh-add --apple-use-keychain ~/.ssh/id_ed25519_githubcat > ~/.ssh/config <<EOFHost * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_githubEOFあわせて推奨する設定:
gh auth loginで GitHub CLI にログイン;AddKeysToAgent yesとssh-add --apple-use-keychainを組み合わせて、パスワードの再入力を回避。
自動化対応:make containers → scripts/setup_containers.sh
# Colima(軽量 Docker ランタイム、Apple Silicon 推奨)brew install dockercolima start --arch aarch64 --runtime docker --vm-type=vz --mount-type=virtiofs --memory 4 --cpu 4
# Podman Desktop(CLI 含む、Docker Desktop に依存しない)brew install podman-desktoppodman machine init --nowパラメータ説明:
--vm-type=vz:Apple Virtualization.framework を使用し、パフォーマンスが向上;--mount-type=virtiofs:デフォルトの 9p よりファイル共有のパフォーマンスが良好;--memory 4 --cpu 4:物理リソースに応じて調整可能。
Dev Containers:VS Code + devcontainer.json でクロスプラットフォームで一貫したコンテナ化開発環境を実現。仮想マシン:UTM で Linux / Windows テスト環境を実行。
以下のツールはプロジェクトの Brewfile に宣言されています。CLI ツールと GUI アプリケーションはそれぞれ make brew と make apps でインストールします:
- ターミナル:iTerm2
- エディター:Visual Studio Code、JetBrains Toolbox
- AI プログラミング:Claude Code(Anthropic CLI コーディングアシスタント)、cc-switch-cli(複数 AI エージェント設定の切り替え)
- ブラウザ:Google Chrome
- 効率化ツール:Raycast、Hammerspoon
- データベースクライアント:TablePlus、Postico、MongoDB Compass
- ネットワークデバッグ:Proxyman、Wireshark
- コンテナ管理:Podman Desktop
- 仮想化:UTM
- Git GUI:Fork
- フォント:JetBrainsMono Nerd Font、MesloLGS NF
- Mac App Store:
masCLI で管理
上記の全ての手順は bitnpc/mac-dev-setup で一括実行でき、3 種類のデプロイ方式に対応しています。
make all # フル自動:bootstrap → brew → shell → languages → git → containers → apps → validatemake bootstrap # Xcode CLT + Homebrewmake brew # Brewfile インストール(CLI ツール)make shell # Oh My Zsh + プラグイン + Starshipmake languages # Python/Ruby/Node/Go/Rust ランタイムmake git # Git デュアルアイデンティティ + SSHmake containers # Colima + Podmanmake apps # GUI アプリケーション + フォントmake validate # 18 項目のセルフチェック全てのスクリプト(scripts/*.sh)は冪等になるよう設計されており、安全に繰り返し実行できます。
make chezmoichezmoi/ ディレクトリには完全な dotfiles テンプレート(.zshrc、.zprofile、.gitconfig、.ssh/config など)が用意されており、Go テンプレート構文を使って条件付きレンダリングと変数注入を実現しています。一部のテンプレートはセットアップスクリプトによって自動生成されます(言語バージョン情報、Go PATH 設定など)。
make ansibleansible/mac_dev.yml は宣言的な Ansible playbook として上記と同じフローを実装しており、チーム内の複数 Mac への統一的なデプロイに適しています。
# 項目ごとの確認(推奨)make validate
# または手動で確認xcode-select --print-pathbrew doctorgit --versionpython3 --versionnode --versiondocker infoscripts/validate.sh は以下の 18 項目が準備できているかチェックします:Xcode CLT、Homebrew、Git、Python、pyenv、Ruby、rbenv、Node.js、Volta、Go、Rust(rustc)、Cargo、Docker、Colima、Podman、Starship、chezmoi。
- コマンドが見つからない:
PATHに/opt/homebrew/bin、/opt/homebrew/sbinが含まれているか確認します。~/.zprofileの先頭にeval "$(/opt/homebrew/bin/brew shellenv)"を追加してください。 - Rosetta サポート:
softwareupdate --install-rosettaで Rosetta 2 をインストールし、arch -x86_64を使って Intel 専用の旧ソフトウェアを実行します。 - 権限とセキュリティポリシー:「開けません。Apple がマルウェアがないか確認できないため」というメッセージが表示された場合は、Finder で右クリックして「開く」を選択するか、
xattr -d com.apple.quarantine <file>を実行します。 - ネットワーク制限:VPN / プロキシを準備するか、Homebrew、npm、pip などのミラーソースを設定して、インストール中の長時間のタイムアウトを回避します。
- 先にシステムをアップデートし、Command Line Tools をインストールして、基本的なツールチェインを統一する;
- Homebrew で CLI / GUI ソフトウェアを管理し、Brewfile と dotfiles を組み合わせて再現可能なデプロイを実現する;
- iTerm2、Oh My Zsh / Starship とプラグインを使ってターミナルの効率を向上させる;
- pyenv、rbenv、volta などのツールで多言語ランタイムを管理する;
init.templateDir+post-checkouthook 方式で Git のデュアルアイデンティティを管理し、手動切り替えを不要にする;- 全ての設定を
Makefileスクリプトに自動化し、新しいマシンでmake allを実行するだけで素早く開発を開始できるようにする。