👌

Yet Another な Apple Silicon (M1) + Homebrew のベストプラクティス

2 min read

ベストプラクティス多すぎ?

参考にさせていただきました。

https://qiita.com/chibiegg/items/43b7604a589e3760e88e

https://qiita.com/yujiod/items/56002a7cef5b5a3be3fb

https://zenn.dev/ress/articles/069baf1c305523dfca3d

はじめに

  • 基本的にはフロントエンド開発環境( Node.js や Yarn、Git、GnuPG など)の構築を目指します
  • ターミナル.app の Rosetta を使用して開くオフ にして、arm64 環境をデフォルトとして利用します
  • zsh シェルを使います

エイリアスの作成

x64 もしくは a64 でアーキテクチャを行ったり来たりできるように ~/.zshrc でエイリアスを設定します。

.zshrc
if (( $+commands[arch] )); then
	alias x64='exec arch -arch x86_64 "$SHELL"'
	alias a64='exec arch -arch arm64e "$SHELL"'
fi

Homebrew arm64 のインストール

arm64 環境でターミナルが開かれていることを確認し、Homebrew のインストーラを起動します。

zsh
% arch
arm64

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

インストーラが M1 Mac に対応したため、自動的に /opt/homebrew/ 以下にインストールされます。

パッケージのインストール(一例)

% which brew
/opt/homebrew/bin/brew

% brew install -v node yarn git gnupg

Homebrew x86_64 のインストール

ターミナルを x64 へ切り替えます。

zsh
% x64
% uname -m
x86_64

インストーラarm64 版と同じです。従前通り /usr/local/ 以下へインストールされます。

zsh
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

せっかくなので、こちらでは LTS 版の node@14 をインストールします。

zsh
% which brew
/usr/local/bin/brew

% brew install -v node@14 yarn

環境ごとに PATH などのシェル変数を切り換える

arm64 では /opt/homebrew/bin を優先します。x64 では node@14 のために /usr/local/opt/node@14 を優先し、LDFLAGSCPPFLAGS の2つのシェル変数も設定します。

.zshrc

if [[ $(uname -m) = "x86_64" ]]; then
  typeset -U path PATH
  path=(
    $HOME/bin(N-/)
    /usr/local/opt/node\@14/bin(N-/)
    /usr/local/bin(N-/)
    /usr/local/sbin(N-/)
    /usr/bin
    /usr/sbin
    /bin
    /sbin
    /Library/Apple/usr/bin
  )
  export LDFLAGS="-L/usr/local/opt/node@14/lib"
  export CPPFLAGS="-I/usr/local/opt/node@14/include"
else
  typeset -U path PATH
  path=(
    $HOME/.bin(N-/)
    /opt/homebrew/bin(N-/)
    /opt/homebrew/sbin(N-/)
    /usr/bin
    /usr/sbin
    /bin
    /sbin
    /Library/Apple/usr/bin
  )
  export LDFLAGS=""
  export CPPFLAGS=""
fi

いまのところ、うまく行っている感じです。

Discussion

ログインするとコメントできます