こんにちは。
ビズリーチ インキュベーションカンパニーで新規事業のエンジニアをしている藤村です。
幾つかのメディアに取り上げて頂きましたが、現在開発マシンとして全エンジニア、デザイナーの希望者に、iMac Pro と標準スペックの MacBook Pro を支給しています。
※ ノート派の方は高スペックの MacBook Pro を選択できます。
一方で、iMac Pro って普通のサーバーサイド、Web 開発程度で効果あるの? と疑問を持つ方もいるかもしれません。
実際に私達も計測する前はそうでした。
結論からいうと、クリーンビルドで 2.13 倍〜 6.67 倍、インクリメンタルビルドで 1.33 倍〜 7.00 倍という効果がありました。
今回は、ビルド速度と金の弾丸の相関に興味がある方々に向けて、導入背景の小話と、iMac Pro 導入後のリアルなベンチマーク結果を共有したいと思います。
CPU が仕事している間、エンジニアがアイドリングしている現実
今社内では、既存事業のグロースに加え、更なる事業の柱を作るべく、いくつかの新規事業のチームが立ち上がっています。
既存事業は成長に合わせてコードベースが大きくなっていき、新規事業は少人数でマルチスタックに作業をすることが多いという状況があります。そして、技術スタック的には、最近ではサーバーサイドは Scala/Kotlin
、Web フロントは TypeScript/Angular/Flow/Vue
、アプリは Swift/Kotlin
、React Native
の採用が多く、これらは比較的ビルドに時間がかかります。
そうすると、現場では以下の様な状況が発生していました。
- ビルドを待っていたらつい集中力が途切れて何してるか忘れた🤔
- クリーンビルドしたら休憩☕️
- IntelliJ や AppCode のインデクシングで数分待たされる🤷♂️
- アプリやプロセスを沢山起動しながら並行開発すると非常にラギー😑
- UI 確認の度に 5 秒、長いと 10 秒弱はかかることもある😇
いわゆるビルド時間にツイッター見てしまい何しようとしていたかを忘れる現象だったり、並行して作業したいけどもラグがあるためストレスがたまる…など、そんなことが発生していました。
CPU が仕事している間、逆にエンジニアがアイドリングしていた訳です。
そんな時やってきた 1 台の iMac Pro
時を同じくして、その様な状況を目にしていたのか弊社取締役 CTO/CPO の竹内が、満面の笑みで何やら重そうなものを抱えてやってきました。
それが最初の iMac Pro です。
現場から提案した訳でもないのですが、聞くと自腹で Apple Store 表参道からお持ち帰りしてきた様です。
エンジニアだけでなく、おそらく今後を想像した経理の方も含めて、オフィスがザワつきました。
実際開発していた Scala/Kotlin/Angular/Vue プロジェクトでの検証
そこで、この 1 台の iMac Pro を使って、現状の技術スタックでどれ位速くなるのか検証してみようとなりました。 以下が、その時に計測した結果の一部です。
※ 比較検討として、MacBook Pro 15 インチや、iMac 5K を先行して使っていた為、その結果も含めてみました。
標準機比で Scala/Kotlin は約 1.4 〜 2.7 倍、Web は 2.4 〜 9.3 倍というレンジ
Scala が圧倒的に遅く、効果がでそうというイメージがありましたが、意外にも効果が顕著だったのは Web でした。
まだまだ最適化が進められていない webpack ビルドであったり、yarn clean
/ install
によって IO されるファイル数が多い為、アンチウィルスソフトの挙動により顕著に出てしまっている疑惑はありますが、それも含めても実際数値や体感としても大きな差がありました。
単純ビルド時間だけでなく、コンテキストスイッチの時間やラグによるストレス等も含めると、エンジニアが集中できる環境づくりという観点で、予想以上に効果はありそうという話になりました。
2 週間で決まった全社導入
結果を見ると分かりますが、コストパフォーマンスでいうと圧倒的に iMac 5K が優れてはいます。
そして、今であれば 2018 年モデルの MacBook Pro はそこそこのパフォーマンスを叩き出すとも思います。
とはいえ、パフォーマンスが 1.x でも変わること、それを年タームで考えた時に、インクリメンタルビルドや、UI 確認は数百回、下手したら数千回行うことになります。 上記の iMac 5K と iMac Pro の値段の差は 30 万しかなく、それで最高の環境が選択できるなら、iMac Pro にしようという判断だと思っています。
そして、ベンチマーク結果や試算を経営陣に共有後、だいたい 1 〜 2 週間後くらいには経営会議での承認が下り、全社導入が決まっていました。はやい。
各プロダクトでのリアルベンチマーク結果
さて、実際に導入された結果、各プロダクトでどの程度効果があったのかです。
一部の事業部に協力を仰ぎ、実際に従来の MacBook Pro と iMac Pro のクリーンビルド、インクリメンタルビルドの時間を計測してもらいました。
クリーンビルド
2.13 倍〜 6.67 倍という結果です。
Scala, Kotlin, Swift などはだいたい 2.x から 3.x に落ち着き、webpack で複数サイトなどの複雑なビルドをしている様な環境だと、より大きな効果が出ている様です。
インクリメンタルビルド
1.33 倍〜 7.00 倍という結果です。
1.x 倍というと効果が薄い様に思えますが、UI の更新などでは何度も試行するため、5 秒程度短くなるだけでも、年間で考えると大きな効果があります。
こちらも webpack のプロジェクトで 7 倍と最も改善効果が大きいですが、ビルドの分割化などの最適化をするともう少し効果は限定的にはなると思います。
iMac Pro 利用者の声
ベンチマーク結果以外にも、導入当時に聞いた社員の声を一部を紹介します。
社内で 1,2 を争う大きな Scala プロダクトなので 1/3 は大きいですね。
サーバー起動しつつ、アプリのビルドはどうしても遅いんですよね。
IDE やプロセスを並行で起動しても重くならないのは個人的にも非常に助かってます。
Docker Build はネットワーク処理も多いですが、その他の部分でも速くなるんですね。
webpack ビルドがまま時間かかりますし、
UI 確認の試行回数が多いので、実はフロントエンジニアが一番恩恵を受けている気がします。
すごく改善された感が伝わってきました。
ビルドだけでなく、起動やジョブなど色々なことが速くなるのいいですよね。
ちょっと何の為にしているか分からないですが、速くなった様です。
※ 補足: セキュリティ室の方です
最後に
ベンチマーク結果や、社員の声を紹介させて頂きました。
感覚的にはビルド時間そのものの短縮ももちろんですが、複数プロセス、複数アプリを起動していても余裕で作業ができ、集中が途切れにくい体験の変化が大きいと感じます。
最初に言っていた様な課題に対しては、以下の様な変化がありました。
- ビルドを待つのは待つが集中力が途切れるほどじゃない👨💻
- クリーンビルドしても地味に速く終わるので休憩いけない☕️
- IntelliJ や AppCode のインデクシングが走っていても余裕でコードが書ける💪🏻
- アプリやプロセスを沢山起動しながら並行開発してもラグは殆どない🚅
- UI 確認の度のビルドも数秒で終わるのであまり気にならない📱
もちろん絶対的に待ち時間はあるのですが、なんとなくボトルネックがマシンからまた人間側に移った感覚です。
今回はたまたま iMac Pro という投資手段でしたが、目指しているのはエンジニアが集中できる最高の環境づくりです。
AMD Threadripper 2 なども出ましたし、まだまだマシン性能は伸びるでしょう。
数年後はまたより良い環境が生まれるかとは思いますが、その時はまたその時なりの最高な環境を追い求められる様な、新しい事業の創出と、それを支えるエンジニア組織を作っていければと思います。