macOS で複数アカウント使用時の Homebrew 権限問題を 5 分で解決する方法
ざっくり言うと
macOS で仕事用・プライベート用アカウントを分けていると Homebrew の権限問題でsudo chownを毎回実行する必要がある。この記事では5 分で永続的に解決する方法を解説します。
🤔 問題:毎回 sudo chown が必要で面倒
よくある状況
- 個人の MacBook で仕事用・プライベート用アカウントを分けている
- どちらのアカウントでも Homebrew(
/opt/homebrew)を使いたい - アカウントを切り替える度に以下のコマンドが必要
sudo chown -R 現在のユーザー名 /opt/homebrew
brew update # ようやく実行可能
なぜこの問題が起きるのか
Homebrew は/opt/homebrewディレクトリにインストールされますが、最初にインストールしたユーザーが所有者になります。他のアカウントからアクセスする際、書き込み権限がないためsudo chownでの所有者変更が必要となります。
💡 解決方法の比較
❌ 複雑すぎる方法
- アカウント別に Homebrew 環境を分離
- Brewfile による同期管理
- Docker Dev Container の導入
→ 個人使用には過剰で設定・メンテナンスが大変
✅ シンプルで効果的な方法(推奨)
グループ権限の設定で根本解決
🛠️ 具体的な解決手順
ステップ 1:現在の状況確認
# 現在のユーザー名を確認
whoami
# 全アカウントを確認
dscl . -list /Users | grep -v '^_'
# 現在のHomebrew権限を確認
ls -la /opt/homebrew | head -5
ステップ 2:グループ権限の設定
# 両アカウントをadminグループに追加
sudo dseditgroup -o edit -a 仕事用アカウント名 -t user admin
sudo dseditgroup -o edit -a プライベート用アカウント名 -t user admin
# Homebrewディレクトリをadminグループに設定
sudo chgrp -R admin /opt/homebrew
# adminグループに書き込み権限を付与
sudo chmod -R g+w /opt/homebrew
ステップ 3:設定確認
# 権限変更の確認
ls -la /opt/homebrew | head -5
# drwxrwxr-x になっていればOK(グループに書き込み権限あり)
# アカウントがadminグループに入ったか確認
dseditgroup -o checkmember -m プライベート用アカウント名 admin
# "yes" と表示されればOK
ステップ 4:動作テスト
# 両アカウントでテスト(sudoなしで実行)
brew --version
brew update
🎯 結果:権限問題が永続的に解決
設定後の状態
- ✅ 両アカウントから sudo なしで Homebrew 使用可能
- ✅ パッケージは共有される(無駄な重複インストールなし)
- ✅ 一度設定すれば今後メンテナンス不要
- ✅ セキュリティは適切に保たれる
実行可能なコマンド例
# どちらのアカウントでもsudo不要
brew install パッケージ名
brew update
brew upgrade
brew uninstall パッケージ名
🔍 他の解決策との比較
| 方法 | 設定時間 | メンテナンス | 複雑さ | 推奨度 |
|---|---|---|---|---|
| グループ権限設定 | 5 分 | なし | 低 | ⭐⭐⭐⭐⭐ |
| アカウント別 Homebrew | 30 分+ | 継続的 | 高 | ⭐⭐ |
| Brewfile 同期管理 | 60 分+ | 継続的 | 高 | ⭐⭐ |
| Dev Container | 120 分+ | 高 | 最高 | ⭐ |
⚠️ 注意事項
個人使用での安全性
この方法は個人使用の Macにおいて安全です:
- 物理的にアクセス可能な攻撃者にとって、アカウント分離は意味がない
- ホームディレクトリは依然として分離されている
- 重要なのはファイアウォール・フルディスク暗号化・強固なパスワード
企業環境では非推奨
複数人が使用するマシンや企業環境では、セキュリティポリシーに従って別の方法を検討してください。
🚀 まとめ
macOS の複数アカウントで Homebrew 権限問題に悩んでいる方は、グループ権限設定による解決が最もシンプルで効果的です。
5 分の設定で永続的に解決し、今後は煩わしいsudo chownから解放されます。複雑な同期システムを構築する時間を、本来の開発作業に充てることができるでしょう。