フロントエンドエンジニア向け M1 MacBook の開発環境
普段使ってるアプリの対応状況 2020/12/03時点
ARM 対応済み
- iTerm 2
- Slack
- Alfred
ARM 未対応 Rosetta 2 で動作
- Discord
- Google 日本語入力
- VS Code
パッケージマネージャ
Homebrew は 2.6.0 で ARM 対応したみたいだけどリポジトリから配布されるバイナリのアーキテクチャが混在しててしばらく使いづらそう。
現状だとソースをダウンロードして手元でコンパイルする MacPorts がアーキテクチャの変更に強くてしばらくはこっちを使っていこうと考えています。
fish
シェルは fish を使ってる。
$ sudo port install fish
set PATH /opt/local/bin/ /opt/local/sbin $PATH
Node.js
Nodenv でバージョン管理をしている。
$ git clone git://github.com/nodenv/nodenv.git ~/.nodenv
set PATH /opt/local/bin/ /opt/local/sbin $HOME/.nodenv/bin $PATH
eval (nodenv init - | source)
15.3.0 は ARM でインストールできる。
$ nodenv install 15.3.0
12.x, 14.x もインストールしたいが ARM だとインストール時にエラーが出てしまったので、Rosetta 2 経由で Intel アーキテクチャで実行する。
ターミナル.app を右クリック > 情報を見る > Rosetta を使用して開く にチェックを入れてターミナルを起動する。
$ nodenv install 12.20.0
$ nodenv install 14.15.1
これで 15.3.0 を実行時は ARM アーキテクチャ、12.20.0, 14.15.1 を実行時は x86 アーキテクチャで実行される。
Docker
AppleSilicon 環境で仮想環境がまだ対応されておらず Docker が動作しない。
エンジニアが一番困るのがここだと思う。
現状どうしようもないので別の Intel マシンか、GCE などに環境を建てることになる。
GCE 上に環境構築
無難そうな Ubuntu 20 で GCE に VM インスタンスを作成。
https://docs.docker.com/engine/install/ubuntu/ ここの情報を参考に Docker 環境を構築。
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
指紋9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88の最後の8文字を検索して、指紋付きのキーがあることを確認します 。
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ sudo systemctl restart docker
# 1度ログアウトする
$ exit
docker run -p 8080:80 -d nginx
Mac 側の Docker 設定
$ sudo port install docker-compose
# GCE の IP アドレス
set -Ux DOCKER_HOST ssh://123.123.123.123
これで docker と docker-compose のコマンドが GCE に向くようになりました。
Mac のリバースプロキシ
例えば docker で Redis を使う場合、上記の DOCKER_HOST を変更することで操作できるようになったとしても 123.123.123.123:6379 に接続する必要があります。
このままだとアプリケーション内に localhost:6379 と記述されている箇所に変更が必要で不便なので、localhost:6379 を 123.123.123.123:6379 に TCP のリバースプロキシする設定をしていきます。
sudo port install nginx
nginx でリバースプロキシの設定をしていきます。
redis
と記述してる2箇所は名前なのでこの2つが紐付けられれば適当な名前で構いません。
stream {
upstream redis {
server 123.123.123.123:6379;
}
server {
listen 0.0.0.0:6379;
proxy_pass redis;
}
}
sudo nginx -s reload
これで localhost:6379 のアクセスした際に 123.123.123.123:6379 にリバースプロキシされるようになりました。
少し設定は面倒ですが、以上が別マシンに Docker を建てて開発する手順の紹介でした。
M1 Mac の Docker 対応状況
リリースはされていないが開発チーム内では Docker が動くようになった模様。
Docker が動作するようになってもアーキテクチャが ARM なのは変わらないので、x86 向けのビルドしか公開されてないコンテナイメージは動作しません。
メジャーどころなコンテナイメージはマルチステージビルドされてる印象なのでそれほど問題ないかもしれないですが不安が残ります。