ARM版Macで開発を始めている方も多いかと思います。
Rosetta2やDocker Desktop on macのおかげでウェブ開発において全く開発ができないということはないんじゃないかと思います。
一方で、Dockerを使わずにネイティブで開発するにはいくつかの問題もまだ残っています。
例えば、homebrewでpythonのいくつかのバージョンがインストールできないとか、Rustがインストールできないとか、そういう問題にぶつかることがあるでしょう。
そこで、本記事ではhomebrewのx86_64 (intel) 版と、aarch64 (ARM) 版を共存させ、どちらを使うか選べるようにします。
Homebrewのインストール
ARM版homebrewのインストール
こちらは普通にインストールします。ターミナルを開き、aarch64であることを確認してインストールしましょう。
uname -m # "arm64" が表示されることを確認する
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Intel版homebrewのインストール
こちらは手動でインストールします。ARM版は /opt/homebrew/
にインストールされると思うので、Intel版は /opt/homebrew-x86_64/
にインストールすることにしました。
ターミナルをそのままで起動すると、aarch64アーキテクチャで動いてしまうため、x86_64で動くターミナルを作ります。
「ユーティリティ」フォルダにある「ターミナル」を「ターミナル(intel)」とでも名前をつけてコピーします。
新しくコピーした方のターミナルの情報を開き、「Rosettaを利用して開く」にチェックをつけます。
こちらのターミナルを起動すると、x86_64アーキテクチャで動作するターミナルを開くことができます。
ではこちらでもhomebrewをインストールしましょう。
uname -m # "x86_64" が表示されることを確認する
sudo mkdir /opt/homebrew-x86_64
sudo chown `whoami`:staff /opt/homebrew-x86_64
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C /opt/homebrew-x86_64
起動スクリプトをいい感じにする
~/.zprofile
で、稼働中のアーキテクチャによって使うhomebrewが変わるように次のように記述しました。
nodenvなどの初期化は、片方のアーキテクチャでインストールしている場合には片方のアーキテクチャでのみ実行されるようにしましょう。
arch=`uname -m`
if [ "$arch" = "x86_64" ]; then
export PATH=$PATH:/opt/homebrew-x86_64/bin
else
export PATH=$PATH:/opt/homebrew/bin
# eval "$(nodenv init -)" などはどちらかインストールした方に書く
fi
それでも完全ではない...
bisonはaarch64ならインストールできるのに、x86_64ではインストールできないとか...
x86_64でしかインストールできないものがaarch64でしかインストールできないものに依存してたりすると詰む