LoginSignup
3
0

More than 1 year has passed since last update.

M1チップのMacでRubyをインストールしてみた

Posted at

問題点

MacにはRubyが標準でインストールされているのですが、最新バージョンをインストールしたい…。
そこでパッケージマネージャのHomebrewをインストールして、さらにrbenvをインストールしてからRubyを入れようとしたらエラーが出てしまいました。
どうやら原因はM1チップにあるようなので解決方法を書いていきます。

前提

1. 「M1チップのMac」と「IntelチップのMac」は環境が違う

筆者は従来、Intelチップが搭載されたMacを使用していました。しかし、少し前に高性能のM1チップが内蔵されたMacが新しく発売されたので買い替えて使用してきました。
今回、以前と同じような手順で言語をインストールしようとしたらエラーが出てしまい、以下のことがわかりました。

  • 「M1チップのMac」では、rbenvでruby 3.2.2がインストールできない。(2023年4月8日時点)
  • 「IntelチップのMac」では上記をインストールできる。

これらは、プログラムを動かす環境の違いによって生じるものです。

2.環境がRosseta上なのか、ARMアーキテクチャ上なのかを把握する

アップルシリコンは、ARMアーキテクチャと呼ばれる命令セットを持つチップのことを指します。ソフトウェアによっては、ARMアーキテクチャ上では動かないものが存在します。今回のRubyの最新バージョンがそれに該当しました。それを解決するために、Rossetaと呼ばれる、アーキテクチャを変換する技術が用意されています。このRosettaを使用することでARMアーキテクチャ上では動かないソフトウェアを動かすことができます。
M1チップのMacで最新バージョンのRubyをインストールするためにはRosetta上でインストールを行う必要があるので、今現在どの環境にいるのかを確認しておきます。確認するコマンドは後述します。

解決方法

1.現在どちらの環境でプログラムを動かそうとしているのかを確認する

ターミナルを開いて今現在Rosseta上にいるのか、それともARMアーキテクチャ上にいるのかをコマンドを叩いて確認しましょう。
使用するコマンドは以下のとおりです。

% uname -m
  • arm64と出力されればARMアーキテクチャ上
  • x86_64と出力されればRosseta上

の環境にいるということになります。筆者の場合はarm64と出力されたのでARMアーキテクチャ上にいたということになります。そのため、最新バージョンのRubyをインストールすることができませんでした。
それでは、これを解決するために環境をRosseta上に移していきましょう。

2.コマンドで簡単にRosseta⇔ARMアーキテクチャを切り替えられるようにする

今後簡単に切り替えられるようにするために、.zshrcファイルを編集してコマンド操作できるようにしておきます。.zshrcファイルは、ターミナルを開くときに最初に読み込まれるファイルです。ホームディレクトリで以下のコマンドを叩いて.zshrcファイルを開きましょう。

% open ~/.zshrc

標準ではテキストエディタで開かれると思います。実際に編集していきましょう。筆者は書き方がわからなかったので、_lambda314さんという方の以下の記事を参考にさせていただきました。
https://zenn.dev/_lambda314/articles/63b851221a7016

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

function runs_on_ARM64() { [[ `uname -m` = "arm64" ]]; }
function runs_on_X86_64() { [[ `uname -m` = "x86_64" ]]; }

BREW_PATH_OPT="/opt/homebrew/bin"
BREW_PATH_LOCAL="/usr/local/bin"
function brew_exists_at_opt() { [[ -d ${BREW_PATH_OPT} ]]; }
function brew_exists_at_local() { [[ -d ${BREW_PATH_LOCAL} ]]; }

setopt no_global_rcs
typeset -U path PATH
path=($path /usr/sbin /sbin)

if runs_on_ARM64; then
  path=($BREW_PATH_OPT(N-/) $BREW_PATH_LOCAL(N-/) $path)
else
  path=($BREW_PATH_LOCAL(N-/) $path)
fi

上記のコードをファイルに追加すると、Homebrewをアーキテクチャ毎に切り替えて使用できるようになるみたいです。切り替えは、x64のコマンドでRosseta上、a64のコマンドでARMアーキテクチャ上に環境変更できます。

実際に自分もターミナルでx64のコマンドを叩いてから、

% uname -m

で確認すると、無事x86_64と出力されてRosseta上に移ることができました。

3.Rosseta上で最新バージョンののRubyをインストールする

Rosseta上に移れたところで、実際にRubyをインストールしていきましょう。
以下のコマンドで現時点(2023年4月8日)で最新のruby 3.2.2をインストールします。

% rbenv install 3.2.2

インストールが終わったら、次に以下のコマンドでインストールされたRubyのバージョンを確認します。

% rbenv versions

次に、以下のコマンドで3.2.2に切り替えます。

% rbenv global 3.2.2

最後に、以下のコマンドで現在のRubyが3.2.2であるかを確認しましょう。

% ruby -v

無事に確認できたら最新バージョンのRubyのインストール完了です。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0