😎

M1 Pro + Lima + Dockerが速い (Rails/RSpec検証)

2021/11/30に公開

はじめに

普段はRailsを使用して開発をすることが多く、開発環境はMacBook Pro(Intel) + Docker for Macを使用しています。
ただ最近は以下のようなこともあり、今後のためにRails/RSpecの実行時間がどのようになるか検証しました。

  • MacBook Pro 2021 (M1 Pro)を購入
  • Docker for Macの有料化(個人的には対象外ですが)
  • Docker for Macの代替えとして、Lima + Dockerがよさそう
  • Lima + Dockerで、Docker for Mac ボリュームマウントの遅さから解放されるのでは?

環境

MacBook Pro 2021 (M1 Pro)

  • CPU: M1 Pro (10 core)
  • メモリ: 32GB

MacBook Pro 2018 (Intel)

  • CPU: Intel Core i5 2.3GHz クアッドコア
  • メモリ: 8GB

Lima + Docker

Lima

  • version 0.7.3
  • docker.yaml を使用
  • CPU: 4 core, メモリ: 2GBで設定

Docker for Mac

  • Version 4.2.0 (70708)
  • CPU: 4 core, メモリ: 2GBで設定

Railsアプリ

solidus

  • docker-composeを使った開発環境が構築できるので、こちらを使用させていただく
  • 各環境で動作/RSpecの実行対象を絞るために変更
    diff --git a/.dockerdev/Dockerfile b/.dockerdev/Dockerfile
    index 4d9b279e1..3690f2e0b 100644
    --- a/.dockerdev/Dockerfile
    +++ b/.dockerdev/Dockerfile
    @@ -32,7 +32,7 @@ RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get -yq dist-upgrad
       DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
         libpq-dev \
         postgresql-client-$PG_VERSION \
    -    mysql-client \
    +    default-mysql-client \
         nodejs \
       &&  rm -rf /var/lib/apt/lists/*
     
    diff --git a/bin/rspec b/bin/rspec
    index c122dbeb6..7515588d2 100755
    --- a/bin/rspec
    +++ b/bin/rspec
    @@ -3,11 +3,7 @@
     ROOT = File.expand_path('..', __dir__)
     
     LIBS = %w[
    -  api
    -  backend
       core
    -  frontend
    -  sample
     ]
     
     # Is it a spec file or an RSpec option?
    diff --git a/docker-compose.yml b/docker-compose.yml
    index 79affa9b4..df44d1837 100644
    --- a/docker-compose.yml
    +++ b/docker-compose.yml
    @@ -2,7 +2,7 @@ version: '3.7'
     
     services:
       mysql:
    -    image: mysql:8.0
    +    image: mysql/mysql-server:8.0
         command: --default-authentication-plugin=mysql_native_password
         environment:
           MYSQL_ROOT_PASSWORD: password
    
  • RSpecはdocker-compose exec app env DB=postgres bin/rspecで実行

検証結果

Docker for Mac Lima + Docker
MacBook Pro 2018 (Intel) 14 minutes 17 seconds 12 minutes 50 seconds
MacBook Pro 2021 (M1 Pro) 8 minutes 50 seconds 4 minutes 33.3 seconds

まとめ

MacBook Pro 2021 (M1 Pro) + Lima + Dockerが一番速いですね。
とくにMacBook Pro 2021 (M1 Pro) + Docker for Macの比較すると倍くらいの差になりました。

M1やM1 Max、他Railsアプリ等での検証はしていませんが、今後Apple Siliconを搭載したMacでDockerを使用した開発をする場合は、Limaを使用したほうが快適かもしれません。

Discussion