前編の「mac m1 proで開発環境作り前の話」につづいて、今回はmac m1 proで環境作りの話をします。
mac m1 proの高い移動性を活かして、いろんなところでテレワークできるようにすることを目標に、開発環境を作ろうと思います。
できれば、x86のLinuxと同じ動きの開発環境を作って、2台目の開発機として使いたいと考えています。
万が一、今使っているLinuxのPCが壊れたりしても、すぐにmacを使って仕事再開できて、かつ外に出るときは、macを持ち出してテレワークできれば、仕事の効率もUPできるんじゃないかと思います。
しかし、macのm1はCPUのアーキテクチャーがarm64に変わることで、色々ライブラリやツールが使えなくなっています。
lima
(From: https://github.com/lima-vm/lima)
今開発・メンテをしているプロジェクトをdocker化して、dockerで走らせるほうが、Linuxと同じ動きなら楽にできると考えました。
最初はlimaを使ってx86環境でDocker環境を構築してみました。
limaの設定ファイルを一回できれば、x86のPCと同じ動きを期待できます。
設定
しかし、最初はどうも色々ビルドできない問題が出てきました。結局、limaの設定で、
arch: "x86_64"
を入れないと、デフォルトでaarch64のubuntu環境を作ってしまうということに気づきました。
更に、mysqlのdockerを作るとき、change userの権限がない問題に対しては、docker-compose.ymlに
user: 1000:1000
を追加して解決しました。
しかし、ubuntuではこれを追加すると、dockerが起動できなくなることがわかって、環境ごとに設定が異なることはやはり避けられません。
macの場合だけこの設定を追加するようにコメントを追加しましょう。(環境ごとにdocker fileを分ける方法もあります。)
何回もハマったあとに得た経験は、「dockerにハマったときは、dockerを再度buildしてみよう」。
一つ一つ解決して、ほぼ問題なくdockerで開発することができました。バンザイと思いきや…
問題 : 遅い
deployにubuntuは4分かかるのに、こちらは33分かかりました。8倍遅い!
SSHして別のマシン(例えば:テスト環境)からdeployを実行することでこの問題は回避できますが、
実機環境の確認が遅いのは我慢するしかないかもと思った時点で、mac m1での開発は一旦止めました。
これは致命傷です。
やはりlinuxのほうが快適だと思って、逃げました。
OrbStack
(From: https://orbstack.dev)
スピード問題は解決できそうという希望で、試してみました。
結論から言うと、LinuxのPCとほぼ同じスピードでdockerを実行できました。
しかし、dockerの設定ファイルをかなり修正しないといけません。
Use Rosetta to Run Intel code
という設定があって、チェックを外すと、修正しなくてもdockerを起動できます。
しかし、limaと同じスピード問題があります。
やはり快適な開発環境を作るには、チェックしてdockerのファイルをいじるしかありません。
場合によって、開発用にプロジェクトにライブラリを追加することも余儀なくされます(今回はruby on railsに新たにgemを入れました)。
(そういえば、limaを使うときのRosettaを使う方法があるかもしれませんが、興味のある方は調べて試してください。)
希望の光
設定ファイルを色々修正して、ようやく通常スピードでmac m1 pro1から開発ができるようになりました。
怖い話、これは1つ目のプロジェクトです。まだ他のプロジェクトが待っています。
しかし、希望の光は見えました。
また余裕があるとき、頑張ろう!
中国貴州省出身、京都オフィス勤務のエンジニア。前職は大手コンビニ運営部スーパーバイザー。超多趣味。