RareJob Tech Blog

レアジョブのエンジニア・デザイナーによる技術ブログです

Amazon EC2 Mac Instances が来た!

aws.amazon.com

来ましたね。フォートナイトのチャプター2シーズン5も来たので本当はこの話を6万字書きたいんですが、Amazon EC2 Mac Instance も同じくらい見逃せないのでアプリエンジニア観点で何がこれで解決されるか・難しいかを書いてみようと思います。

難しいと思う点

iPhone/Macアプリ開発においてはMacOSが必須になるため BitriseCircleCI のようなSaasを利用したり、自前でMacPro/Miniなどを用意して Jenkins + xcodebuild コマンドを使ったり Xcode Server でビルドします。

今回出た Amazon EC2 Mac Instance がこれを代替できるかという期待が一つあると思いますが、乗り越えるべきハードルがいくつかあるのではないかと考えています。

Xcodeのバージョン依存

iPhone/Macアプリ開発の課題の一つに「Xcodeのバージョン依存」という課題があります。 Xcodeは毎年アップデートがあり、かつアプリの開発はXcodeへのバージョン依存が強いので、「AのアプリはXcodeのバージョン11.4じゃないと動かない」といったケースが多々あります。XcodeはNodeモジュールのように軽量とは言い難く(17GBとかある)、そのため今回どうプロビジョニングされるかが気になるところです。

Amazon EC2 Mac Instance でこれが解決されているような記述は今の所見られないため、自身でEC2を立ち上げて、最初はリモートデスクトップで入り手動でセットアップが必要に思います。

only pay for actual usage with AWS’s pay-as-you-go pricing

とあるのでそれで実用時は適宜立ち上げるというのもいいと思います。

証明書・プロビジョニングまだまだ面倒問題

fastlaneの登場で、この辺りはAppleIDさえあればアプリ開発に関するセットアップや証明書管理などがCLIからかなり楽に管理できますが、まだまだ詰まり所や理解しにくい設定の多い部分です。この辺りの設定やAppleIDとの結合度の高いCI/CDシステムを自身でメンテしていくのは結構体力を使います。

結局CI/CD便利すぎる問題

Bitrise も Circle CI もできることの割に安いんですよね・・・なので手間を使って乗り換えるかが微妙なところです。Bitrise も Circle CI も必要があればsshもできるし、リモートデスクトップはできないですがCI/CDにおいては必要ないので、十分です。また上記の「Xcodeバージョン問題」も新旧バージョン指定可能になっており解決できます。WordFlowやIntergrationも充実してて自分でやることはリポジトリと接続したり証明書などを設定する程度です。

たとえばセキュリティ都合などでどうしてもこれが導入できないケースやネットワーク上これが難しいようなケースでない限りはこれらを導入することで多くの問題は解決します。

*追記、Bitriseもリモートデスクトップできるようです!

期待したい点

CI/CD以外の用途や、限定的な状況ではこれまでできなかったことができるようになる期待があります。

リモートデスクトップとしての用途

情シス観点で考えると、開発者全員がMacを持たないといけない状況はセキュリティや費用面、セットアップの手間からできれば避けたいところです。もちろん開発的なリターンはありつつも ないに越したことはない・・・

例えば Chromebook + Amazon EC2 Mac Instance + AWS Remote Desktop Gateway で端末や負荷を気にすることなくiOS/MacOSの開発環境が実現できるかもしれません。

aws.amazon.com

また1つiOSアプリの開発可能なインスタンスを用意しておけば、iPhone/iPadのシミュレーターが利用できるので、全員の環境に準備しなくても共有して検証ができます。

利用可能なMac miniのプロセッサは第8世代のCore i7プロセッサ(物理6コア/論理12コア)、3.2GHz(ターボブースト時4.6GHz)32GBメモリとなっており高スペックですし、2021年にはM1チップ搭載の端末も利用可能になるとのことでとても楽しみです。

ネットワーク要件が厳しいUIテストの実施

たとえば「UIテストを実際のAPIを叩きながら実行したい」「APIは本番でなく社内やIPの制限された検証環境のものを使いたい」みたいなケースであれば Amazon EC2 Mac Instance で解決できるかもしれません。あまり多くはないと思いますが、リクエスト元IPや証明書などの制限のあるリクエストをUIテスト中に実施したいケースは解決できそうです。

AWSのネットワーク上でMacOSが動く」のメリットの一つだと思います。

まとめ

今回のリリースで「さぁ!CI/CD入れるぞ!」とまではならないですが、プロビジョニングや連携の改善が今後出てくると乗り換える未来は遠くないように思います。フォートナイトのチャプター3が出ることにはそんな未来になっているかもしれないですね。 緩く触りながら用途を探っていこうと思います。