TL;DR: M1マシンは驚愕の速度! iOSのビルド(キャッシュ利用)では、Mac Prosと比較して、ビルド時間が**最大50%**短縮されました。
M1マシンを利用したCI/CD
2020年11月、AppleはM1 MacBookを発表し、その1年後にはM1 Pro/Maxチップを発表しました。それ以来、私たちは皆、狂ったように性能が向上したことを伝えている文章を読んだり、そのような話を耳にしました。Jameson Williamsさん(Redditのスタッフソフトウェアエンジニア)によるツイートをすでにお読みになった方もいるかもしれません。
そこで、M1マシンが高速であることはわかりましたが、**パイプラインを高速化するためにCI/CDでそれらを使用するべきでしょうか?**その疑問に答えるために、CodemagicでのiOSとmacOSのビルド向けに、M1 mini、Mac Pro、Mac miniを比較いたしました。本記事では、アップグレードの価値があるかどうかを判断するためにご必要な事実と数字をお伝えいたします。
本記事は、Nils Reichardtさんが執筆いたしました
比較の設定
では、この比較の設定について、次のような質問から考えてみましょう:
- ビルドに使用されたアプリは?
- プラットフォームは?
- リリースモード、デバッグモード、それともプロファイリングモード?
アプリ
Flutterアプリのビルドを比較するために、2つのアプリを使用しました:
Sharezoneは、30万人以上の登録ユーザーを持つ実際の製品アプリであるため、この比較ではSharezoneアプリに重点を置いています。これは、Firebase パッケージの多くや他のいくつかのパッケージのように、多くの依存関係を使用しています (Sharezoneはオープンソースです。すべての依存関係を こちら で見つけることができます)。そのため、非常に現実的なビルドタイムが表示されます。
プラットフォーム
私たちは以下に焦点を当てています:
- iOS
- macOS
- 各種テスト(ユニットテスト、ウィジェットテスト)
システム
テストにはCodemagicの仮想マシンを使用しており、CI/CDに利用できます。これらのマシンは以下のような構成になっています:
- Mac Mini: 2,3GHz Quad Core / 8 GB
- Mac Pro: 3.7GHz Quad Core / 32 GB
- M1 Mini: 3.2 Quad Core / 8 GB
Flutterの構成
使用したFlutterのバージョンは2.10.5です
より現実的な見解を得るために、すべてのビルドでFlutterのリリースモードを使用しました。
各テストには、flutter test
コマンドを使っただけです。
依存関係キャッシュ
キャッシュを使用しない場合と使用した場合を比較しました。キャッシュについては、以下のパスでキャッシュを行いました:
- Dartキャッシュ:
$FLUTTER_ROOT/.pub-cache
- CocoaPodsキャッシュ:
HOME/Library/Caches/CocoaPods
Codemagicのキャッシュの使い方については、依存関係キャッシュのドキュメントをご覧ください。
精度
すべてのビルドを3回実行し、平均値を算出しました。例えば、iOS Counterアプリの後半のビルド時間は、3回のビルドの平均時間です。
合計で、54回ビルドを実行しました。 また、このスプレッドシートには、すべての生データとビルドへのリンクが表示されているので、ご覧ください。
M1 MiniとMac ProとMac Miniの比較結果
いよいよ今回の記事の中心部分、つまり、結果についてです。CounterアプリとSharezoneアプリのビルド時間の差がいかに大きいか、おわかりいただけると思います。そのため、このような比較には実際のアプリを使うことが不可欠です。
ビルド時間はすべて秒単位で表示されます。
Counterアプリの結果
プラットフォーム | Mac mini | Mac Pro | M1 mini |
---|---|---|---|
iOS | 92 | 75 | 30 |
macOS | 89 | 51 | 25 |
Sharezoneアプリの結果
iOS
キャッシュ | Mac mini | Mac Pro | M1 mini |
---|---|---|---|
No | 967 | 658 | 395 |
Yes | 892 | 598 | 281 |
信じられないような結果が出ました! M1マシンは、Mac miniと比較してビルド時間を68%、Mac Proと比較して**53%**短縮しています(キャッシュを使用した場合)。
macOS
キャッシュ | Mac mini | Mac Pro | M1 mini |
---|---|---|---|
No | 479 | 466 | 433 |
Yes | 501 | 401 | 333 |
macOSでは、iOSビルドと比較して驚愕するほどの改善率ではありませんが、それでも、M1ビルド(キャッシュを利用した場合)はMac miniビルドより34%、Mac Proビルドより17%高速化しました。
ユニットテストとウィジェットテスト
Mac mini | Mac Pro | M1 mini |
---|---|---|
84 | 90 | 95 |
ユニットテストとウィジェットテストの観点からマシンを比較すると、それらの間にほとんど違いは見られません。
余談ですが、Sharezoneには238個のユニットテストとウィジェットテストがあります。
全体
まとめ
結果をまとめると、M1マシンはMac Proマシンと比較して50%近く高速になり、特に統合テストに関しては興味深い結果が出ています。CIパイプラインの遅さは周知の事実です。しかし、M1マシンは統合テストのビルド時間を短縮するだけでなく、App StoreやPlay Storeでアプリを公開する場合にも有効な手段です。
本記事は、Android、iOS、ウェブ、macOSに対応し、30万人以上の登録ユーザーを持つ共同学校プランナー、Sharezoneの共同創設者であるNils Reichardtさんが執筆いたしました。Nilsさんは2018年3月の最初のベータ版リリース以来Flutterに惚れ込んでいます。Twitter、GitHub、LinkedIn でNilsさんを見つけることができます。