M1チップのMacBookにおけるHomebrewの私的ベストプラクティス

公開:2020/12/13
更新:2020/12/16
3 min読了の目安(約3200字TECH技術記事 4

はじめに

M1チップ搭載のMacBookを購入しました。
開発環境を構築するために、Homebrewをインストールする必要があり、その過程で色々と調べてわかったことがあったので、備忘の意味も込めて記事にしました。

この記事の内容

Homebrewをインストールするために、いくつかの記事を読んで調査を行いました。
その中で、M1チップ搭載のMacにHomebrewをインストールしていて、自分が実現したいことに近いことを行っていた、Qiitaの「Apple SiliconにおけるHomebrewのベストプラクティス」という記事(以降、参考記事と呼ぶ)を見つけました。

しかし、前述の記事通りに環境を構築し、Homebrewを利用してパッケージのインストールを行ったところ、参考記事とは異なる自分なりの結論(ベストプラクティス)を見つけたため、その内容を示します。

自分が実現したかったこと(ゴール)

まずは、自分がHomebrewをインストールするにあたって、実現したかったことを紹介にします。
それは、(せっかくの新しいMacなので)「きれいに」Homebrewを使える環境を構築したいということです。
「きれいに」とは具体的には、M1チップの利点を享受できることです。
つまり、すでにarm64アーキテクチャに対応しているパッケージは、arm64用のものを使えるようにします。

参考記事で紹介されている内容

対応方針

まずは、参考記事で紹介されている対応方針を紹介します。

  • arm64でビルドできるパッケージは、arm64版をインストールする
  • ディフォルトのシェルはarm64ビルドのものを利用する
  • ビルドに時間がかかって時間が惜しい場合やビルドできない場合は、x86_64のパッケージをインストールする

「自分が実現したかったこと(ゴール)」と完全に合致します。
ここで私は、とりあえずは参考記事に従って環境を構築することで、満足できると考えました。

環境構築方法(概要)

対応方針がわかったところで、実際に環境を構築していきます。
ここでは、参考記事で紹介されている環境構築方法の概要を記載します。
詳しい方法は、参考記事でご確認ください。

  1. x86_64アーキテクチャ用、arm64アーキテクチャ用のHomebrewをそれぞれインストール
    x86_64アーキテクチャ用パッケージをインストールするには、x86_64アーキテクチャ用のHomebrewが必要であるため。
    逆もまた然り。

  2. x86_64アーキテクチャ用、arm64アーキテクチャ用のアーキテクチャのzshをインストール
    本来、シェルのアーキテクチャは、Finderからターミナルの「情報を見る」メニューを開き、「Rosettaを使用して開く」オプションにチェックを付けたり、外したりして変更する必要がある。
    しかし、毎回この方法を行うのは面倒なので、コマンドでシェルの変更を行えるよう、それぞれのアーキテクチャのzshをインストールする。

  3. パスの設定
    arm64アーキテクチャ用のHomebrewは、/opt/homebrewにインストールすることが推奨されている。
    そこで、そのパスにインストールされたパッケージを実行できるように、パスの設定を行う。

Homebrewパッケージのインストール方法

ここでは、実際のHomebrewパッケージのインストール方法について記載します。
基本的な方針は、まずarm64アーキテクチャ用のパッケージを狙ってインストールをし、該当のパッケージがarm64に対応していないなどの問題があった場合に、x86_64アーキテクチャ用のパッケージをインストールするというものです。

  1. arm64アーキテクチャ用のパッケージをインストール

    1. シェルの切り替え
    2. /opt/homebrew以下のHomebrewを使って、パッケージのインストール
  2. x86_64アーキテクチャ用のパッケージをインストール

    1. シェルの切り替え
    2. /usr/local以下のHomebrewを使って、パッケージのインストール

試してみてわかったこと

ここまで参照記事で紹介されている環境構築方法とパッケージのインストール方法を試してみましたが、ここからは自分がそれらの方法を試してみて、見つかった不都合を紹介します。

  1. コマンドでシェルの切り替えをすることができなかった
    参照記事の通りに、それぞれのアーキテクチャのzshをインストールし、コマンドを実行してみましたが、シェルのアーキテクチャをコマンドで変更することができませんでした。
    私の場合は、ターミナルを開くときに、「Rosettaを使用して開く」オプションが有効になっているかどうかで、アーキテクチャが決まってしまいました。
    アーキテクチャを変更する方法は、オプションを変更して、ターミナルを再起動する方法しか確認できませんでした。(とても面倒ですが...)

  2. x86_64アーキテクチャ用のVS Codeでは、x86_64用のシェルしか実行できない(みたい)
    私は、主にVS Codeを利用して、普段の開発を行っています。
    そのため、コマンドの実行もVS Codeのターミナル上で行うことが多いです。
    VS Codeのターミナルを開いてみましたが、ターミナルのオプション(「Rosettaを使用して開く」)に関わらず、x86_64アーキテクチャのターミナルが開かれました。

    実は、arm64アーキテクチャに対応したVS Codeも既に公開されています。
    ここからダウンロードしたVS Codeでは、ターミナルを開くとarm64のシェルが開かれました。
    しかし、ターミナルにコマンドが入力できないという不具合がありました。
    arm64アーキテクチャ用のVS Codeを問題なく利用するには、もう少し時間が必要そうです。

結論

当面の間、x86_64アーキテクチャ用のパッケージをインストール・利用します!
理由は次の通りです。

  1. シェルの切り替えが面倒
  2. VS Codeでは、必ずx86_64アーキテクチャのシェルが開かれてしまう
  3. パッケージの管理が面倒

追記

Ressさんのコメントで、より良い方法を教えていただきました。
こちらの方法を使うと、当初やりたかったコマンドによるシェルの切り替えが可能になります。

また、本記事で

VS Codeでは、必ずx86_64アーキテクチャのシェルが開かれてしまう

と述べておりますが、arm64に対応したVS CodeのInsider Editionを利用すると、
デフォルトでarm64のシェルがデフォルトで開かれるようになります。
(こちらでもRessさんの記事の通りコマンドを打つことで、シェルの切り替えが可能です。)
本記事の主旨とはずれますが、arm64対応のVS Code、動作がめちゃめちゃ早くて、とてもオススメです!