Codemagicの仮想MacOSビルドマシンへのリモートアクセスの使い方

![remote-access-virtual-macos-build-machine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2028491/6e6af5b1-28d5-7a92-b950-b265b7acc382.png)
各セッション中に[Codemagic](https://codemagic.io/start/?utm_source=qiita&utm_medium=referral&utm_campaign=flutter_distribution&utm_content=japanese_lang)のビルドが実行される仮想MacOSビルドマシンへの一時的な **リモートアクセス/接続** が可能になりました。

まだCodemagicのユーザーでない場合は、こちらでサインアップできます：
[codemagic.io/signup](https://codemagic.io/signup/?utm_source=qiita&utm_medium=referral&utm_campaign=flutter_distribution&utm_content=japanese_lang)

リモートマシンへの接続には2つの方法があります：

－SSHアクセス
－VNC Viewer

仮想MacOSマシンへのリモートアクセスは、MacOSシステムにアクセスできない人々に全く新しい可能性をもたらします。


## 事前インストールされたソフトウェア

このリモートMacOSマシンには、複数のバージョンの**Xcode**や**iOSシミュレーター（複数）**など、Flutterプロジェクトのテストやデバッグに必要な重要なソフトウェアが事前に用意されています。

Macを持っていなくても、Flutterアプリを**iOSシミュレーター**で動作させてパフォーマンスをテストしたり、**Xcode**でFlutterプロジェクトの構成を変更したりできます。

> 事前インストールされたソフトウェアの全リストは[こちら](https://docs.codemagic.io/releases-and-versions/versions/#pre-installed-tools/?utm_source=qiita&utm_medium=referral&utm_campaign=flutter_distribution&utm_content=japanese_lang)からご覧いただけます。

## 仮想ビルドマシンへのアクセス

**SSH**か**VNC Viewer**を使用して仮想ビルドマシンにアクセスするには、以下の手順に従います。

> **注意：**仮想マシンへのSSHまたはVNC接続の確立は、**手動でトリガーされた**ビルドでのみ可能です。

1. プロジェクトをCodemagicで**開きます**。

   ![](https://blog.codemagic.io/uploads/2021/07/project.png 'Remote access virtual machine')

2. **新規ビルドを開始（Start new build）**をクリックします。
3. **ビルド構成を指定**ダイアログボックスで、正しい*ブランチ*と*ワークフロー*を選択し、再度**新規ビルドを開始**をクリックするとビルドプロセスが開始されます。

   ![](https://blog.codemagic.io/uploads/2021/07/build_screen.png 'Remote access virtual machine')

4. ビルドが始まると、「**SSHまたはVNCクライアントでビルドマシンを探索**」タブをを展開し、しばらく待つと、SSHまたはVNC接続を確立するための指示が表示されます。

   ![](https://blog.codemagic.io/uploads/2021/07/access_credentials.png 'Remote access virtual build machine')

## SSHによるアクセス

**SSH接続**では、**ターミナル**を介してのみビルドマシンにアクセスし、そこでコマンドを実行することができます。

> SSH接続を確立するためのスクリプトは、**Linux**と**MacOS**でネイティブに動作します。ですが、**Windows**で動作させたい場合は、追加のソフトウェアが必要になります。

SSH接続を確立するには、ターミナルから（LinuxとMacOSで）**curl**コマンドを実行するだけです。

ターミナルに**curl**コマンドをコピー＆ペーストします。**Enter**を押すと、**リモートMacOSシステム**に接続します。

![](https://blog.codemagic.io/uploads/2020/03/SSH_1.png 'Remote access virtual Mac build machine')

これでVMへのアクセスが可能になりました。

クローンされたプロジェクトは、パス `/Users/builder/clone` で利用できます。次のコマンドを実行するだけでパスにナビゲートします：

```bash
cd clone
```

![](https://blog.codemagic.io/uploads/2020/03/SSH_2.png 'Remote access virtual Mac build machine')

> **SSHセッション**は、ビルドステップがすべて完了してから最大20分間、またはビルド時間の最大制限に達するまでのいずれか早い方の時間の間アクティブになります。

SSHアクセスは、ビルドの**デバッグ**に最適なオプションです。CIジョブ中に実行されたプロセスを確認したり、ビルド中に実行されたコマンドをすべて再現したり、カスタムスクリプトをデバッグしたりできます。**sudo**アクセスでVMを完全に制御できます。

> **ヒント：** `codemagic.yaml` スクリプトのbashコマンドを、SSHアクセスでビルダーマシン上で直接再実行して、正しい出力が得られるかどうかを確認できます。
>
> すべての環境変数にアクセスできます。ビルダー上で `printenv` というコマンドを実行すると、それらを見れます。

## VNC Viewerによるアクセス

VNC Viewerでは、グラフィカルなインターフェイスを使ってリモートビルドマシンにアクセスできます。これにより、MacOSマシンを所有していなくても、Flutterアプリを**シミュレーター**上で実行し、そのパフォーマンスを理解することができます。

1. [VNC Viewer]をダウンロード(https://www.realvnc.com/en/connect/download/viewer/ 'Remote access virtual Mac build machine')します。

2. **VNC Viewer**をインストールして実行します。

3. ここで、**ホストID**と**ポート番号**をコピーして、次の形式で**_VNCサーバーアドレスフィールド**に貼り付けます：<ホストID>:<ポート番号>`（例: 192.159.66.83:16543`）。その後、 **Enter** を押します。

   ![](https://blog.codemagic.io/uploads/2020/03/VNC_20.png 'Remote access virtual Mac build machine')

4. 警告メッセージが表示されますが、単に**続行（Continue）**をクリックします。

   ![](https://blog.codemagic.io/uploads/2020/03/VNC_21.png 'Remote access virtual Mac build machine')

5. Codemagic UIで生成された**ユーザー名**と**パスワード**を入力して、**OK**をクリックします。

   ![](https://blog.codemagic.io/uploads/2020/03/VNC_22.png 'Use Codemagic for remote access to virtual Mac build machine')

これで**リモートMacOS**ビルドマシンに接続されました。接続が確立されると、システムのデスクトップが表示されます。

> VNCセッションは、ビルドステップがすべて完了してから最大20分間、またはビルド時間の最大制限に達するまでのいずれか早い方の時間の間アクティブになります。

### 異なるアプリケーションへのアクセス方法

**MacOS**の環境に慣れていない場合、リモートMac内のさまざまなアプリケーションにアクセスするのが難しいと感じるかもしれません。ご安心ください。**ターミナル**を使って様々なアプリケーションを起動できます。

**ドック**にあるターミナルのアイコンをクリックすると、ターミナルにアクセスできます。

![](https://blog.codemagic.io/uploads/2021/07/vnc_terminal.png)

**ターミナル**を使えば、**Safari**、**Xcode**、**Simulator**など、Macで様々なアプリケーションを簡単に起動できます。

### シミュレーターでの実行

MacOSをお使いでない方は、まず、Flutterアプリを**iOSシミュレーター**で実行することになるでしょう。では、シミュレーターでアプリを実行する方法をご紹介いたします。

まず、仮想MacOSシステム上でiOSシミュレーターを起動します。

ビルドマシンには、異なるバージョンのシミュレーターが搭載されています。そのため、最初に、ビルドする**対象のiOSバージョン**でアプリをテストする必要があります。

ビルドマシンにインストールされているシミュレーターのバージョンはすべて、以下のコマンドで確認できます：

```bash
xcrun simctl list
```

次のコマンドを使って、デフォルトのシミュレーターのバージョンを実行できます：

```bash
open -a Simulator
```

また、システム上に存在する任意のシミュレーターを起動するには、デバイスの**UDID**を指定して、次のコマンドを使用します：

```bash
open -a Simulator --args -CurrentDeviceUDID <device UDID>
```

![](https://blog.codemagic.io/uploads/2021/07/vnc_simulator.png)

シミュレーターでアプリを実行するには、クローンされたFlutterアプリのディレクトリに移動する必要があります。プロジェクトのクローンは、VM上のパス `/Users/builder/clone` で利用できるようになります。

それを次のコマンドを使って簡単にナビゲートできます：

```bash
cd clone
```

そして、次のコマンドを使ってアプリを実行します：

```bash
flutter run
```

![](https://blog.codemagic.io/uploads/2020/03/VNC_4.png 'Use Codemagic for remote connection to virtual Mac build machine')

**シミュレーター**でプロジェクトが読み込まれるのを待ちます。

![Line Coding app](https://blog.codemagic.io/uploads/2020/03/VNC_5.png)

### iOSの構成変更

FlutterプロジェクトのiOS部分の構成を変更するには、VM上で**Xcode**を使用する必要があります。

次のコマンドを使って、デフォルトバージョンのXcodeを起動できます：

```bash
xed -x
```

![](https://blog.codemagic.io/uploads/2021/07/xcode_launch.png)

現在選択されているXcodeのバージョンを確認するには、次のコマンドを使用します：

```bash
xcode-select -p
```

![](https://blog.codemagic.io/uploads/2021/07/xcode_commands.png)

Xcodeのバージョンを変更するには、以下を使用します：

```bash
sudo xcode-select -s /Applications/Xcode-<version>.app/Contents/Developer
```

> `<version>`は、システムで利用可能な任意のバージョンに置き換えてください。システムに存在するバージョンは、ビルドマシンのFinderから **アプリケーション**フォルダに移動して確認できます。
> 
> ![](https://blog.codemagic.io/uploads/2021/07/xcode_versions.png)

**Xcode**を開いた後、**別のプロジェクトを開く（Open another project）**をクリックします。

![](https://blog.codemagic.io/uploads/2020/03/VNC_7.png)

ここで、Flutterプロジェクトの**ios**フォルダに移動し、Xcode上でそれを開く必要があります。上部のドロップダウンから「**ビルダー**」を選択します。

![](https://blog.codemagic.io/uploads/2020/03/VNC_8.png)

次に、**クローン（clone）**→**ios**と進み、**開く**をクリックします。

![](https://blog.codemagic.io/uploads/2020/03/VNC_9.png)

プロジェクトが **Xcode** で開かれます。iOSアプリの**バージョン**や**バンドルID**を変更したい場合は、左サイドバーから**Runner**にアクセスします。

![](https://blog.codemagic.io/uploads/2020/03/VNC_10.png)

また、**Xcode**からプロジェクトの**プロビジョニングプロファイル**と**開発者署名証明書**を生成することもできます。

> コード署名ファイル（**プロビジョニングプロファイル**や**証明書**など）を生成するためのガイドは[こちら](https://ioscodesigning.io/creating-code-signing-files/)にあります。

また、このVM上で行った構成変更を保存するのも非常に簡単です。リポジトリは*GitHub**/**GitLab**/**Bitbucket**アカウントからクローンされているため、**git**を使って変更を直接_commit_して、アカウントに_push_できます。

デモ用に、**Xcode**内でiOSアプリの**バージョン**を更新したところです。

![](https://blog.codemagic.io/uploads/2020/03/VNC_11.png)

ここで、**ターミナル**を開き、プロジェクトディレクトリに移動します。

```bash
cd clone
```

次に、以下のコマンドを実行すると、変更されたファイルが表示されます：

```bash
git status
```

![](https://blog.codemagic.io/uploads/2020/03/VNC_12.png)

ファイルをGitにコミットする前に、以下の2つのコマンドを実行して、変更内容の正しい作成者を定義します：

```bash
git config --global user.name "<your_name>"
git config --global user.email "<your_email>"
```

> `<your_name>` をお名前に、`<your_email>` をメールアドレスに置き換えてください。

![](https://blog.codemagic.io/uploads/2020/03/VNC_15.png)

次のコマンドを使って、変更したファイルをコミットします：

```bash
git add .
git commit -m "Update ios version to 2.0.0"
```

> **ios**ディレクトリのみをコミットしたい場合は（`git add .`ではなく）、以下を実行します：
>
> ```bash
> git add ios
> ```

![](https://blog.codemagic.io/uploads/2020/03/VNC_19.png)

次のコマンドを実行して、正しい作成者で変更が行われているかどうかを確認できます：

```bash
git log
```

![](https://blog.codemagic.io/uploads/2020/03/VNC_30.png)

プロジェクトで使用可能なリモートがあるかどうかを確認します。

```bash
git remote
```

![](https://blog.codemagic.io/uploads/2020/03/VNC_31.png)

次のコマンドを使って変更内容をプッシュします：

```bash
git push origin master
```

![](https://blog.codemagic.io/uploads/2020/03/VNC_32.png)

GitHubアカウントでプロジェクトを検証し、変更が完了したかどうかを確認できます。

![](https://blog.codemagic.io/uploads/2021/07/VNC_33.png)

## 結論

**仮想MacOS**マシンへのリモートアクセスは、MacOSシステムにアクセスできない人々に全く新しい可能性をもたらします。さらに、シミュレーターでFlutterアプリを実行してテストしたり、**Xcode**（VMに事前インストールされている）を使ってプロジェクトの構成を変更したりもできます。また、VMに直接アクセスすることで、コード署名も非常に簡単になります。

**リモートアクセス**についての公式ドキュメントは[こちら](https://docs.codemagic.io/troubleshooting/accessing-builder-machine-via-ssh/?utm_source=qiita&utm_medium=referral&utm_campaign=flutter_distribution&utm_content=japanese_lang)にあります。

---

**Souvik Biswas**は、情熱的なモバイルアプリ開発者です（AndroidとFlutter）。彼はこれまでの歩みの中で、数多くのモバイルアプリを手がけてまいりました。[GitHub](https://github.com/sbis04)でのオープンソース貢献が大好きです。彼は現在、Indian Institute of Information Technology Kalyaniでコンピューターサイエンスとエンジニアリングの技術学士号の取得を目指しています。また、[Medium - Flutter Community](https://medium.com/@sbis1999)でFlutterの記事も執筆しております。