🍏

【M1 Mac】platform: linux/amd64の指定をやめたらDockerのRailsが6倍速くなった

2023/03/11に公開

あるRailsプロジェクトの開発時、M1 MacのDockerでの動作が非常に遅かったのですが、linux/amd64アーキテクチャで動かすことをやめたところ、6倍も速くなりました🎉

環境

  • M1 Max MacBook Pro (Monterey 12.6)
  • Docker Desktop for Mac 4.15.0
  • docker-sync 1.0.5
  • Ruby3, Rails7

変更前の動作速度

Rails Console立ち上げ、テスト実行など、Railsコマンドを叩くたびに毎回30秒ほどかかっていました。

↓ コンテナ内でrails routes実行時の時間計測結果(3回測った平均が29.14秒)

$ time rails routes
# ...
real    0m30.520s
user    0m27.538s
sys     0m2.045s

変更点

docker-composeの platform: linux/amd64 の指定を外しました。

services:
  rails:
    build: .
    platform: linux/amd64 <= ここを削除
linux/amd64と指定していた理由

mini_racerというgemが原因で、M1 Macデフォルトのarm64だとbundle installができなかったため、amd64で動かしていました。
→ チームメンバーがmini_racerへの依存を断ち切ってくれたため、arm64で動かせるようになりました🙌

変更後の動作速度

↓ コンテナ内でrails routes実行時の時間計測結果(3回測った平均が4.43秒)

$ time rails routes
# ...
real    0m4.656s
user    0m3.378s
sys     0m1.265s

まとめ

平均29.14秒平均4.43秒6.58倍 も速くなりました🎉
リクエストの処理速度も目に見えて速くなっているので、本当にこの変更を可能にしてくれたチームメンバーに感謝です🙏

参考

https://zenn.dev/suzuki_hoge/books/2021-12-m1-docker-5ac3fe0b1c05de/viewer/2-arm

https://zenn.dev/chimerast/articles/efae877853e837

Discussion