M1 Mac(Apple Silicon)でHomebrewを使う

2020.12.10
2021.02.06
M1 Mac(Apple Silicon)でHomebrewを使う

2021/02/06 追記

2021/02/05にHomebrewの3.0がリリースされ、Apple Siliconに正式対応しました!

そのため、arm用・x86_64用で別々にHomebrewをインストールする必要がなくなりました。


3.0以前と以降でインストール方法が変わったため、別でインストール方法を記載します。





Apple SiliconのMac(MacBook Air)でHomebrewを入れてみます。


エンジニアにとってHomebrewの導入はMacを購入して(会社であれば貸し出されて)、
1番最初に導入する定番のパッケージマネージャー、だと思います。


しかし2020/12/10現在、Apple Silicon向け/Intel向けという理解をするところでApple Silicon搭載Macの場合導入のハードルがめっちゃ上がってます!!

→ ver3.0で改善されました!

前書き

2020/12/12 追記


現状HomebrewではApple Siliconに対応しているコマンドはApple Silicon対応版を、そうでないコマンドはIntel版を入れる、というのが少し複雑化しています。

Homebrew公式もRosettaを使ってIntel版を使う事を推奨している状況です。

→ ver3.0で改善されました!



そのため今の混沌とした状況の中はMacPortsを使うのも1つの選択肢です。

MacProtsはApple Silicon対応のパッケージはApple Silicon向けのものを、存在しないものはIntel版を入れる、という事をMacPortsが自動的にしてくれます。



この状況が落ち着くまではMacPortsを使い、おさまったらHomebrewを使う、というのも1つの手かなと思います。


Homebrew ver3.0で改善され、Homebrewでも同じようにApple Silicon版があればApple Silicon版、なければIntel版が入るようになりました。


Homebrewの方がMacPortsに比べインストール出来るパッケージ数が多く、私が利用しているパッケージでもMacPortsにないものもあったため、個人的にHomebrewの方がおすすめです。

Homebrewとは

macOSのパッケージマネージャー。

Nodeでいうところのnpm、Rubyのgemですね。



公式ページはこちら
macOS(またはLinux)用パッケージマネージャー — Homebrew


ビール漬けのりんごがいい味を出してます。笑

事前準備

Homebrewをインストールする上でXcodeのcommand line toolsが必要になります。


Xcodeを入れておかなくともHomebrewインストール中に入れられた記憶がありますが、
Xcodeを先に入れておかないと先に進まない事もあったため先にXcodeを入れます。

Xcodeを入れる

Mac App StoreからXcodeをインストールします
(Xcodeは容量がデカいのでインストールに時間がかかります)



インストール後Xcodeを開くと以下のようにライセンス契約についてのポップアップが表示されるので「Agree」をタップします



Apple Siliconの場合、Rosettaをインストールするか聞かれます

この時の注意点としては Enterキーを押さなければいけない! ということ。

Installクリック出来ませんww
ググっちゃったよ。そんなの分かるかい!w

Homebrew 3をインストールする

新たにインストール場合と、既に3以前が入っている場合で分けて記載します

新規でインストールする場合

手順は2つ、 インストールパスを通す の2つです。


Homebrewをインストール。

公式の記載通りに実行します

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



~/.zshrcにパスを通します。

別のシェルを使っている場合、それに合った設定ファイルに記載して下さい

~/.zshrc
export PATH="/opt/homebrew/bin:$PATH"



あとは以前と同じくbrew install <パッケージ名>でパッケージのインストールが出来ます

$ brew install peco

インストールしたパッケージがarm版かx86_64かの確認は記事の後半に記載をしています



既にHomebrewをインストールしている場合

brew upgradeをするだけでHomebrewのバージョンアップが出来ます

$ brew upgrade

brew -vでHomebrewのバージョンアップが出来たかを確認出来ます

$ brew -v
Homebrew 3.0.0
Homebrew/homebrew-core (git revision 4d916; last commit 2021-02-05)



注意点

v3をインストール後、パッケージインストール時にパスに関するエラーが起きる場合があります

$ brew install peco
Updating Homebrew...
・・・

Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Please create a new installation in /opt/homebrew using one of the
"Alternative Installs" from:
  https://docs.brew.sh/Installation
You can migrate your previously installed formula list with:
  brew bundle dump

Apple Silicon版に限られるかもしれませんが、

パスが/opt/homebrew/binより/usr/local/binより先に通っている必要があります

# パスを確認して、 /usr/local/bin より /opt/homebrew/bin が先に記載されている必要がある
$ echo $PATH
/opt/homebrew/bin:/usr/local/bin・・・

Homebrew 3以前をインストールする

Apple Silicon版とIntel版、どちらをインストールするかでやり方が変わります!
両方入れる事も可能で、現状Homebrewを使う場合は両方入れるのが良さそうです。


  1. ターミナルをRosetta 2を使わずインストール(Apple Silicon向け)
  2. ターミナルをRosetta 2を使って開いてインストール(Intel向け)



1はインストールするライブラリ・パッケージなどがApple Silicon向けのものをインストール出来て、2は従来のIntel版のものをインストールする、という事のよう。


そのため、2の方法はApple Siliconの旨味を捨てる事になります。



最初は「Rosetta 2は最初にアプリをApple Silicon向けに変換するから遅くなったりしないんじゃないの?」と思ってたのですが、 プラグイン、動的なコード、JavaScript などは都度変換になるんですね!!
なるほど、そりゃApple Silicon向けのものを使えるならその方が速そうだ。

Rosetta 2はIntel CPU用のネイティブバイナリをM1用に変換する機能。アプリのインストール時、アプリの初回起動時に自動的に実行される。また、アプリにプラグイン、動的なコード、JavaScriptなどが含まれる場合には、その都度変換が実行される。

【Hothotレビュー】Apple M1版MacBook Proを検証。Core i9を上回る性能でバッテリ駆動時間も驚異的 ~互換機能のRosetta 2でも十分な速さで動作 - PC Watchより引用



そのため問題なく動くパッケージは1.のApple Silicon版を使い、インストール出来ないものうまく動作しないものは2.のIntel版を使う、というのが良さそうです。

1. Apple Silicon向けをインストール

ターミナルを開きます。

注意点として**「Rosettaを使用して開く」にチェックを入れずに立ち上げます**。


アプリケーション > ユーティリティ > ターミナル

右クリック > 情報を見る



Homebrewをインストールします。

Apple Silicon版の場合/opt/homebrewフォルダにDLする事が公式で推奨されています。

$ cd /opt
$ sudo mkdir homebrew
$ sudo chown $(whoami):admin homebrew
$ curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew



ここまで行うとbrewのコマンドが/opt/homebrew/binの中にインストール出来ます。



あとはPATHを通したいので ~/.zshrc に追記

~/.zshrc
export PATH="/opt/homebrew/bin:$PATH"

これでターミナルを再起動してみると

$ brew -v
Homebrew >=2.5.0 (shallow or no git repository)
Homebrew/homebrew-core N/A

エラーメッセージが出てますがbrewコマンドが使えるようになってます!



brew installが出来る事の確認

Apple Siliconに対応しているコマンドはHomebrew公式のGitHubのissueに上がってます。

macOS 11 Big Sur compatibility on Apple Silicon · Issue #7857 · Homebrew/brew



2020/12/10現在wgetはApple Siliconに対応しているのでインストールしてみます。


$ brew install wget
・・・
🍺  /opt/homebrew/Cellar/wget/1.20.3_2: 49 files, 4.0MB, built in 1 minute 10 seconds

wgetが使えるか確認してみます

# インストール先の確認(/opt/homebrew配下にDLされている)
which wget
/opt/homebrew/bin/wget

# wgetを使う
$ wget https://tech-broccoli.life
--2020-12-10 17:19:43--  https://tech-broccoli.life/
tech-broccoli.life (tech-broccoli.life) をDNSに問いあわせています... 134.209.106.40, 178.128.17.49
tech-broccoli.life (tech-broccoli.life)|134.209.106.40|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
`index.html' に保存中

index.html                                  [     <=>                                                                       ] 340.53K   320KB/s 時間 1.1s     

2020-12-10 17:19:45 (320 KB/s) - `index.html' へ保存終了 [348701]

使えるようになりました!

2. Intel向けをインストール

今度はターミナルを開く際に**「Rosettaを使用して開く」にチェックを入れて開きます**。


Rosettaを使用する場合は今までのMacと変わりません。



公式に書かれているコマンドを実行。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
・・・
==> Installation successful!

Intel版の場合、/usr/local/bin の中にbrewコマンドがDLされるので、

$ /usr/local/bin/brew -v
Homebrew 2.6.1
Homebrew/homebrew-core (git revision cde328; last commit 2020-12-10)

インストールして使えるようになりました!




Intel版でインストールするパッケージは/usr/local/binの中に入るのでPATHを通します

~/.zshrc
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"



brew installが出来る事の確認

今度はIntel版のパッケージをDLしてみます。

先程のHomebrew公式issueを見ると、私が良くお世話になっているfzfはまだApple Siliconに対応していない模様。


こちらをインストールしてみます。

# Apple Siliconの方を優先するようにPATHを通しているのでbrewコマンドはApple Silicon版が優先される
which brew
/opt/homebrew/bin/brew

# そのため明示的にIntel版のbrewコマンドを利用してパッケージをインストールする
/usr/local/bin/brew install fzf
・・・
==> Summary
🍺  /usr/local/Cellar/fzf/0.24.4: 17 files, 3.7MB

Documents/に適当にファイルを作って実行してみると

# インストール先の確認Intel向けフォルダにある
$ which fzf
/usr/local/bin/fzf

# fzf実行
$ fzf
> hoge.txt
  fuga.txt
  index.html
  3/3

使えるようになりました!

使い分け / 確認の仕方

Apple Silicon版とIntel版のbrewの使い分け方

ターミナルをRosettaを使用せずに開いた状態でも以下のコマンドでIntel版として実行出来ます。

$ arch -x86_64 /usr/local/bin/brew



そのため、~/.zshrc に以下のようにaliasを使ってibrewを実行する事でIntel版を使う、
という方法が紹介されています。便利!

Homebrew on Apple Silicon — Hi, I’m Sam

~/.zshrc
alias ibrew='arch -x86_64 /usr/local/bin/brew'

インストールしたパッケージの確認

Apple Silicon向けのものがある場合、Apple Silicon対応のパッケージをインストールする。
とした場合、当然ながらIntel向けと共存する事になります。


今使っているコマンドはどっちを使っているんだろう?というのを調べる場合lipoというコマンドで調べる事ができます。

# Apple Silicon版の場合
$ lipo -archs $(which wget)
arm64

# Intel版の場合
$ lipo -archs $(which fzf)
x86_64



詳しくはこちらを参照下さい

おすすめ