🐈

M1 Mac上で環境構築しなおした時に学んだことのメモ

2022/02/28に公開

M1Mac上での環境構築

今業務でIntel Macを用いているのですが、少しずつ業務で使用するMacがM1に移行し始めています。
ローカルでの開発環境をM1上で構築しようとすると、いくつか引っ掛かるところがあり学んだこともあったのでそのメモ。(移行自体は作業途中なのですが)

Dockerのplatformを指定する

https://qiita.com/toyoyuto618/items/f225e1b2ab22ca5adf33
docker-compose.ymlで、イメージファイルのplatformを明示的に指定する
M1Macのプラットフォームはarm64だが、amdにしか対応していないイメージを使用したい場合に使用するようだ

    platform: linux/amd64

nodeがM1上で動かない

https://qiita.com/beijaflor/items/e63f0d7eb25eb4ae12aa
nodeのバージョンによってはarm上で動かない

x86_64 アーキテクチャバージョンの node を rosseta2 経由でインストールする(上記記事にある通り)
MacにはRosetta2というソフトウェアがあって、amd上で動くバイナリファイルをarm上で動かせるようになる。(異なるCPUアーキテクチャ間の互換性を保つ)
archコマンドでアーキテクチャを切り替えることで、amd用のバイナリにビルドして、それをRosetta2を通して動かすようにする。
上記のDockerのplatformをamdに指定するというのも、同様にエミュレータを通してarm上でamd用のファイルを動かしているのだろう

上記二つとも、とりあえずえいやでエミュレータ上で動かそうという対応のはずで、正規の対応としてはエミュレータを通さずにarm上で動くように、動かなくなる条件を特定して対応すべきのはず(動かなくなる原因のライブラリは何か、バージョンを上げたらいけるか、など)

M1 MacのDocker上でGoogle Chromeが動かない

https://blog.savanna.io/entry/2021/12/06/182102
chromiumを代わりに使う

まとめ

CPUが変わるとDocker関連とかの諸々の問題で色々動かなくなることがあるので、原因を特定して、対象のライブラリを外したりバージョンをアップしたり、代替案を検討したりしてみよう
あるいは、色々用意されているエミュレータを使用してみよう
個人的には、Rosetta2というのがあるのを知れたというだけで勉強になった

Discussion