SPECIALIST

多様な専門性を持つNRIデジタル社員のコラム、インタビューやインサイトをご紹介します。

BACK

MacインスタンスでiOSアプリ開発のCI環境を構築する

はじめまして。NRIデジタルの石井佑磨です。

AWS re:Invent 2020」でEC2 Macインスタンスが発表されましたね!また、インフラストラクチャキーノートでは、Mac miniとNitroコントローラの組み合わせによって実現されたことが説明されました。これらは、みなさんも注目しているサービスではないでしょうか。

Macインスタンスのユースケース

Macインスタンスのユースケースとして、Xcodeを用いたiOSアプリの開発があります。Macインスタンスを用いたCI/CDを実装し、既存のCI/CD環境との比較を行いたいと思っているのですが、今回は第1弾として、CI環境の構築のみを行います!Macインスタンスでなにかやってみたいという方、iOS開発に使えないか検討している方に読んでいただけると幸いです!

※本記事では、セキュリティやCI環境構築時の細かい操作などについては、他のブログなどで紹介されているため、説明しません。また、今回はGitLabでソース管理しているという前提で、GitLab RunnerでCI構築を行います。そのため、AWSのサービスのみで構成されたアーキテクチャをつくるという記事ではないことをご認識お願いいたします。さらに、本記事において専有ホストを作成しますが、24時間は専有ホストをリリースできないので、24時間あたりの料金を見積りを行ってから作成してください。

作成するCI環境の概要

CI環境構築にあたり、MacインスタンスにGiLlab RunnerをインストールしてCI環境を構築します。
AWSのサービスはVPCなどのネットワーク周りとMacインスタンスしか使わないので、とても簡単な構成となります。
あと、事前準備としてGitLab、AppleIDのアカウント作成をしてください。GitLabはiOSアプリのソース管理に、Apple IDはXcode使用時に使います。
※使用した他のツール(別のツールでも構いません)

  • PC(windows)
  • Putty:ssh接続のため
  • VNC Viewer:vnc接続のため

Macインスタンス作成1)https://aws.amazon.com/jp/blogs/news/new-use-mac-instances-to-build-test-macos-ios-ipados-tvos-and-watchos-apps/

現在、Macインスタンスは数か所のリージョンでしか利用できず、また専有ホストでのみ利用可能であるため、今回はus-east-1で専有ホストを作成します。作成前にVPCなどは事前に用意しておいてください。

以下の設定で専有ホストを作成しました。ホストの復旧を有効化すると、ホストを作成できないので注意してください。

  • インスタンスファミリー:mac1
  • インスタンスタイプ:mac1.metal
  • アベイラビリティゾーン:us-east-1a
  • 数量:1

できたら、EC2ダッシュボードからMacインスタンス作成します。

  • AMI:macOS Catalina
  • インスタンスファミリー:mac1
  • インスタンスタイプ:mac1.metal
  • ネットワーク:事前に作成したVPC
  • サブネット:事前に作成したパブリックサブネット
  • ホスト:先ほど作成した専有ホスト
  • EBS:gp2 64GB

今回はXcodeをインストールして使うので、ESBはgp2を64GB割り当てていきます。サイズは適宜、調整してください。

Macインスタンスへの接続と設定

Macインスタンス作成後は、EC2作成時に発行された秘密鍵を用いてputty(SSH)で接続し、VNC接続設定を行います。設定が完了したら、VNCでログインできることを確認してください。ここではVNC設定の詳細は省略します。

Xcodeインストールとプロジェクト作成

VNC Viewerで接続後、作成したAppleIDでAppStoreにサインインをしてXcodeをダウンロードします。Xcodeのインストールが完了したら、Xcodeを起動し、プロジェクト作成からiOSアプリを作成します。iOSプロジェクトをGitLlabへpushしたいので、Xcodeのアカウント設定からGitLabアカウントを追加し、プロジェクトをpushします。

GitLab Runnerのインストール&CI設定2)https://docs.gitlab.com/runner/install/osx.html3)https://docs.gitlab.com/runner/register/

公式サイトを参考にGitLab RunnerをMacインスタンスにインストールします。
インストール後は、GitLab RunnerのジョブがMacインスタンスで実行されるようにするために、公式サイトを参考に登録します。

完了したら、iOSプロジェクトをビルドするための.gitlab-ci.ymlを作成し、GitLabのリポジトリにpushします。これで、GitLabにソースコードを変更してpushすると、Macインスタンスにソースコードが読み込まれてビルドされます。

CI動作確認

では、GitLabからCIの結果を確認しましょう。
GitLabにサインイン後、左のメニューから「CI/CD」→「PipeLine」を選択することでCIの結果を確認することができます。「BUILD SUCCEEDED」と表示されているのでアプリのビルドが成功しています。

まとめ4)https://aws.amazon.com/jp/ec2/dedicated-hosts/pricing/#host-configuration

MacインスタンスでのiOSアプリのビルド・CI環境構築ができました!
料金面を考えると、us-east1での専有ホストが$1.083/1hなので、24時間起動していると約3000円かかります。CIを実行する頻度によっても月額は変わると思いますが、毎日ビルドすると9万円かかる計算になります。はたして、iOSの既存のCI環境に比べて、それだけのコストに見合うメリットがあるのかというのを次回以降に考察していきたいと思います。

References   [ + ]

1. https://aws.amazon.com/jp/blogs/news/new-use-mac-instances-to-build-test-macos-ios-ipados-tvos-and-watchos-apps/
2. https://docs.gitlab.com/runner/install/osx.html
3. https://docs.gitlab.com/runner/register/
4. https://aws.amazon.com/jp/ec2/dedicated-hosts/pricing/#host-configuration