M1チップの環境構築は罠が多いというのはよく知られているところかなと思いますが 今回環境構築をする際に乗り越えてきたもの(乗り越えられてないものも含む) を紹介できればと思います。

Docker環境

M1チップでのDocker環境に関してはこちらの記事 にて紹介しておりますが3月26日にリリースされたTech Preview版ではqemu ベースでの仮想環境からvirtualization.framework の仮想マシンに切り替えることができます。 またプレビュー7以降ではK8s環境やDNSエントリーが機能するようになったため、ほぼほぼIntel時代の機能がそのまま使えるようになりました。

まだ 基地の不具合としてこちらに上がっているものが使えないっていうのはありますが、 これを理由にM1チップを諦めてインテルにするという選択ももしかしたら改める余地があるかもしれないです。

ただMySQLに対するLaravelのマイグレーション処理が非常に遅い問題が残っていたりと、使い勝手が悪いところは残っているためストレスがある状況であることには変わりないかなと思います。

Vagrant環境

一部EC2環境の再現のため、ansibleとVagrantを用いたローカルでの仮想環境構築をしている箇所があるのですが、 現時点でVagrantが正常に動く環境は存在しないようなのでこの環境は全く動きません。

VirtualBox上でvagrant upを実行すると、下記のようなエラーが発生します。

1
2
3
4
5
6
7
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "8c5c309d-2608-432b-b085-ce86afb63d6f", "--type", "headless"]

Stderr: VBoxManage: error: The virtual machine 'ansible_default_1617082689469_73819' has terminated unexpectedly during startup with exit code 1 (0x1)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine

どうやらこちらを見る限りIntel版以外はサポートしていないようなので、直近は対応が難しそうです。もしこれで解決したなど情報があればいただけると嬉しいです。

Nodeの古いバージョンのインストール

nodenvを用い、Node15などをインストールすることはarm環境でも入れられるのですが、Node10などの古いバージョンに関してはそのままだと入れることができません。

この場合はターミナルをRosetta2で開き、その環境でnodenv installを実行することでインストールすることができます。

まずターミナルをファインダーで開き、Cmd-Dでターミナルを複製、名称を ターミナル-Intel 等Intel版であることがわかるような名称に変更します。

img

そのうえでCmd-Iで情報を開き、Rosettaを使用して開く にチェックを入れます。

img

チェックを入れたターミナルを開き、任意の箇所で nodenv install XXX を実行すると、対象のNodeバージョンがインストールされます。

img

まとめ

M1での環境構築にはまだまだ課題がありつつ、少しずつですが改善の傾向があるように思えます。 今後も人柱としてM1を使っていければと思います。