M1 Mac で x86_64 の ruby をビルドして CocoaPods を使う


M1 native な ruby ではまだ CocoaPods がうまく動かなかったので、x86_64 版 ruby をビルドして CocoaPods を動かすためのメモです。

追記: そういえば、いつの間にか brew で入れた cocoapods がちゃんと動くようになってますね。

目標

  • Rosetta 2 の利用は最小限にする。
    • 特に、ターミナルを Rosetta 2 で動かすなんてあり得ない。
    • Homebrew は arm64 版のみを利用。
  • x86_64 版 ruby は 2.7.2-x64 みたいな名前にして、arm64 版と共存させる。
  • ruby のバージョンは rbenv global ではなく、環境変数で切り替える。

ruby ビルド

1) Homebrew で rbenv をインストール
rbenv 自体はシェルスクリプトなので、CPU アーキテクチャ関係ないはず。

% brew install rbenv

2) x86_64 版 readline ライブラリをダウンロード
次のリンク先から、readline-8.1.big_sur.bottle.tar.gz をダウンロード。
x86_64 版が欲しいので、arm64 じゃないやつを選ぶこと。

3) ダウンロードした readline ライブラリを展開
展開先はとりあえず ~/.rbenv/lib-x64 あたりで。

% mkdir -p ~/.rbenv/lib-x64
% tar zxCf ~/.rbenv/lib-x64 ~/Downloads/readline-8.1.big_sur.bottle.tar.gz

4) ruby-build 定義ファイルを別名でコピー
この定義ファイルの名前が rbenv で指定する ruby のバージョン名になります。
ビルドに成功したらコピーした定義ファイルは消して構いません。

% cp $(brew --prefix ruby-build)/share/ruby-build/2.7.2 2.7.2-x64

5) ビルド
ちょっと長いけど、お間違えのないように。

% RUBY_CONFIGURE_OPTS=--with-readline-dir="$HOME/.rbenv/lib-x64/readline/8.1" arch -x86_64 rbenv install 2.7.2-x64

CocoaPods インストール

1) 環境変数 PATH に ~/.rbenv/shims を追加しておく

export PATH="$HOME/.rbenv/shims:$PATH"

2) ビルドされた ruby を確認

% rbenv versions
* system (set by /Users/hoshi/.rbenv/version)
  2.7.2-x64

3) 環境変数 RBENV_VERSION で 2.7.2-x64 を指定して ruby を実行

% RBENV_VERSION=2.7.2-x64 ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin20]

4) CocoaPods をインストール

% RBENV_VERSION=2.7.2-x64 gem install cocoapods

使い方

環境変数を毎回指定して pod コマンドを実行するのは面倒。

% RBENV_VERSION=2.7.2-x64 pod --version
% RBENV_VERSION=2.7.2-x64 pod init
% RBENV_VERSION=2.7.2-x64 pod install

とはいえ、rbenv global 2.7.2-x64 はしたくないので、.bashrc または .zshrc にエイリアスを登録。

alias pod='RBENV_VERSION=2.7.2-x64 pod'