x86_64版のHomeBrew環境を一掃してarm64のみへ完全移行してみた

プライベートのMac環境にて処理中に、HomeBrew経由で導入したライブラリにx86_64用とarm64用が混在していることでエラーが度々発生していました。インストール時に片方にだけ入れたのが原因でしょうが、ARMベースの環境がメインストリームになって久しいこともあり、思い切って混在している環境から移行してみました。
2024.04.07

プライベート環境にて、arm64ベースの処理中にRosettaを使ってHomeBrewにてx86_64ベースで導入したライブラリが原因でエラーが時折あることに気が付きました。処理の際のパスは中々カバーし難い時もあります。

Intel Macが販売終了となり、ARMベースのMacがメインストリームとなり、HomeBrewもARMベースでおおよそカバーできているといえる状況です。そろそろ完全に移行したほうがトラブルも抑えられるかもしれません。

課題があるとすれば、ライブラリの移行漏れです。一つ一つ入れ直すのも手間なので、まるっと対応してみました。

手続き

x86_64版のみにあってarm64版にないライブラリについては改めてarm64版に移行させていきます。

また、x86_64とarm64のログとキャッシュが手続き上同じディレクトリに入っていました。x86_64版は削除しつつ、arm64版は残しておきたいため、以下順の手続きとしました。今回の作業以前のarm64のログとキャッシュについては目をつぶることにしました。

  1. x86_64版のライブラリリスト化
  2. x86_64版のHomeBrewをアンインストール
  3. arm64版のHomeBrewにライブラリをインストール

手順に入る前に、アンインストールを無事完了させるために余計なプロセスを落とす目的でMacを再起動します。

x86_64側インストール済みライブラリをリスト化する

x86_64側インストール済みライブラリをリスト化するため、x86_64のHomeBrewにzshをインストールします。

ターミナルが起動している場合は終了します。Finder上でターミナルの「情報を見る」を選択し、「Rosettaを使用して開く」にチェックを付けて起動します。

zshがすでに入っている場合は次のステップへ。

export PATH=/usr/local/bin:${PATH}
which zsh #zshの有無を確認する
# 存在しなければ以下を実行
/usr/local/bin/brew install zsh

念の為にuname -mでアーキテクチャを確認します。arm64になる場合はターミナルを終了させて起動しなおします。

Brewfileに出力するため、Homebrew/bundleを導入します。

/usr/local/bin/zsh
uname -m
> x86_64
/usr/local/bin/brew tap Homebrew/bundle
/usr/local/bin/brew bundle dump --global

x86_64側のHomeBrewをアンインストールする

x86_64版のHomeBrewパスが通っていることを確認します。

which brew
> /usr/local/bin/brew

HomeBrewアンインストールスクリプトを実行します。羅列される削除候補パスがx86_64のものであることを確認して実行します。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
Warning: This script will remove:
/Users/user/Library/Caches/Homebrew/
/Users/user/Library/Logs/Homebrew/
/usr/local/Caskroom/
/usr/local/Cellar/
/usr/local/bin/brew -> /usr/local/bin/brew
Are you sure you want to uninstall Homebrew? This will remove your installed packages! [y/N]

削除されなかったディレクトリは個別に削除しておきます。

arm64側にインストールする

ターミナルを終了させて、Finder上でターミナルの「情報を見る」を選択し、「Rosettaを使用して開く」からチェックを外して起動します。

念の為にuname -mでアーキテクチャを確認します。x86_64になる場合はターミナルを終了させて起動しなおします。

uname -m
> arm64

arm64側のHomebrewにHomebrew/bundleを追加し、dumpした内容をそのまま取り込みます。

/opt/homebrew/bin/brew tap Homebrew/bundle
/opt/homebrew/bin/brew bundle --global

Cask Installで追加したライブラリについては、上書きされないためインストールがほぼ失敗します。x84_64版とarm64版のいずれでも問題なく動作するケースもありますが、HomeBrew上では取り扱いできないため削除したあと再度インストール実行します。念の為設定ファイルなどをバックアップしておきましょう。

ポイントは… is built for Intel macOS and so requires Rosetta 2 to be installed.とログにある場合です。ARM版がなければ、代替ライブラリを見つける必要があるでしょう。

Tapping homebrew/cask-drivers has failed!のログが出る場合は既にdeprecatedで不要なCask用ライブラリが含まれています。~/.Brewfileから削除して再実行しましょう。

正常にインストールし終わると、ライブラリ数込でグリーンなログが出力されます。

Homebrew Bundle complete! 56 Brewfile dependencies now installed.

あとがき

Cask Installしているバイナリが多い場合、arm64でインストールする際に多数のエラーとなる可能性があります。辛抱強く対処しましょう。

業務用PCの場合、業務に支障がでる可能性もあります。必要なライブラリがARM版に存在するか、動作バージョンが問題ないか、個別に確認してから実行しましょう。