M1 Macでの開発環境構築

作業ログの意味も込めて,M1 Mac での開発環境構築をメモしておきます.

いきなり余談ですが,Zenn がめちゃ流行ってますね.M1 系の記事がいい意味で溢れていました.個人開発に始まり買収先求むとチラッと見かけていましたが,先日クラスメソッドが買収.Qiita に並ぶ技術系サイトになりそうです.オシャレだし(重要).

Machine Spec

  • Mac mini (m1, 2020)
  • Memory: 16GB
  • Storage: 256GB
  • macOS Big Sur (Version 11.1)

Applications

まだ Apple M1 プロセッサに最適化されたアプリとそうでないものがあるらしいので,一つ一つ Universal or ARM 版があるか確かめながら入れていきます.

該当するバージョンがなければ Intel 版を Rosetta2 で動かすことになります.

※対応状況は 2021/02/22 時点.五十音順.

アプリバージョン対応導入方法
Chrome88.0.xUniversal公式サイトで選択可
iTerm23.4.4Universal公式サイト
Runcat8.9UniversalApp Store
Slack4.13.0Apple Silicon公式サイトで選択可
VS Code1.54.1Universal公式サイト

VS Code Insiders 版はなぜか Live Share できませんでした.そのうちベータ版から正式版になるはずなのでそれを待ちます. ワークスペースの問題でした.そして,ベータ版から正式版になりました!

Logicool Options も入れましたが,Intel 版のみ.マウスが認識できず,結局アンインストールしました.

Base

ソフトウェア以外は例によってコマンドで入れていきます.

インストールしたパッケージが使用するアーキテクチャは以下のコマンドで調べられます(command は置換).

terminal
$ lipo -archs $(which command)
arm64

また,ターミナルを動かしているアーキテクチャは以下のコマンドで確認できます.

terminal
$ uname -m
arm64
// if work on Rosetta2
x86_64

zsh

macOS Big Sur のターミナルも Catalina 同様 zsh です.以下の記事の感じで oh-my-zsh で使いやすくしておきます.

homebrew

パッケージ管理に用いる Homebrew は 2021/02/05 に公開されたバージョン 3.0.0 で Apple Silicon に対応しました.何らかの理由により Rosetta2 でパッケージをインストールするとインストール先のディレクトリが異なるので注意が必要です.

  • Apple M1 版パッケージ:/opt/homebrew 以下
  • Rosetta2 (Intel) 版パッケージ:/usr/local 以下

先に購入した方々を見てターミナル周りが面倒な感じになりそうだなぁと思っていましたが,一安心.

言語が対応していてもパッケージが対応してないと Rosetta2 での使用を余儀なくされますが….

Universal2 と Rosetta2 を使い分けるなら,以下の記事がとても良さそうです.シェルスクリプトの使用経験ないので技術が目から鱗.

参考:みんなの M1 Mac における Homebrew のベストプラクティスは間違っている | Zenn

ターミナルを M1 環境で起動して,下記の公式のインストールコマンドを利用すると /opt/homebrew/ 以下に色々作られます.インストールされるスクリプトや作成されるディレクトリはインストールする前に表示されるので,コマンドを実行して確認してください.

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

実行後,パスに追加するように求められるのでその通りに操作しました.

terminal
$ echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> ~/.zprofile

.zprofile は初見でしたが,ログインシェル起動時に .zshrc より前に読み込まれる設定ファイルのようです.

参考:zsh の設定ファイルの読み込み順序と使い方 Tips まとめ | Qiita

Git

パスワード認証は面倒なので SSH で認証できるように設定します.

また,Git 操作時のユーザ名とメールアドレスも設定します.メールアドレスは GitHub の設定によっては @users.noreply.github.com を使用する必要があります.

terminal
$ git config --global user.name "username"
$ git config --global user.email example@email.com

ssh-agent の利用も合わせて行います.

terminal
$ ssh-add -K /path/to/directory

参考:ssh-agent を利用して、安全に SSH 認証を行う | Zenn

make

make install しなければならない場合はそのパッケージが M1 非対応だと利用できません. Rosetta2 の出番となりそうです.

iTerm2 を Universal,デフォルトの Terminal を Rosetta2 とかにすれば簡単ではありますが,ベストプラクティスは何でしょうか….

Languages

各種言語での開発環境を整えます.記事が長くなりそうなのでサイト内リンク….

Go

Go 言語は 2021/02/16 にリリースしたバージョン 1.16 (beta) で M1 プロセッサに対応したようです.

Node.js

Node.js は大々的に公表していませんが,バージョン 15.3.x で M1 プロセッサに対応しているようです.

Python

Python はバージョン 3.9.1 で M1 プロセッサに対応しました.他言語に比べて早め?

Rust

Rust は rustup 1.49.0 で M1 プロセッサに対応しました.

ようやく環境構築が終わったのでブログ更新できました.

それにしてもダークモードの色使いが絶妙にダサくて気に入らない….