リモート接続 · 接続してビルド

クラウドMacに接続

VNCでmacOSのデスクトップを操作し、SSHでスクリプトやCIを実行できます。接続先は仮想マシンではなく、専有物理Macです。Xcodeのデバッグと自動ビルドには、それぞれ適した方法を選べます。

ホストを契約済みの場合は、ホストアドレス、SSHポート、ユーザー名、接続用認証情報を用意してください。以下では、SSHトンネル経由のVNC接続を推奨します。

画面操作
VNC画面共有
コマンド実行
SSH / runner
macOSのデスクトップ 接続後のイメージ
Xcodeプロジェクト Releaseビルドの確認

同じ物理ノード上のデスクトップとコマンドライン

BuildSettings.xcconfigRelease
CONFIGURATION = Release
SDKROOT = iphoneos
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
ENABLE_TESTABILITY = NO
アーカイブ署名書き出し
シミュレーターのプレビュー
画面を確認 レイアウト · 操作
VNC:デスクトップを表示・操作 SSH:ビルドコマンドを実行
ワークスペースのレイアウト例です。リアルタイムのデスクトップ画面や性能を示すものではありません。実際のシステム画面とツールのバージョンは、ホストの構成によって異なります。
用途に合わせて選ぶ

画面を見ますか?コマンドだけ実行しますか?

ツールチェーンを初めて設定するときは、画面共有でGUIの設定を確認できます。パイプラインが安定したら、runnerからコマンドラインで実行しましょう。どちらも同じホストに接続するため、GUI操作用に別のビルド環境を用意する必要はありません。

GUI

VNC画面共有

Xcodeの起動、シミュレーターの確認、Keychainの設定、マウス操作が必要な手順のトラブルシューティングに適しています。表示されるのはリモートホストの画面で、ビルドをローカルに移して実行するわけではありません。

  • まずはモニター1台、適度な解像度で接続し、文字表示、マウス、キーボード入力を確認します。
  • SSHトンネル経由の接続を推奨します。VNCポートをインターネットに直接公開しないでください。
  • ビューアを閉じてもホストは停止しません。長時間のタスクはCIまたは再接続可能なセッションで実行してください。
用途:GUIデバッグ、初期設定、対話型のトラブルシューティング
コマンドライン

SSHとself-hosted runner

依存関係のインストール、xcodebuildの実行、ログの整理、CI runnerの登録に適しています。SSHではデスクトップ画面を転送しないため、日常的なスクリプト実行中にVNCを接続しておく必要はありません。

  • 初回接続ではホストのフィンガープリントを確認してから、ホスト鍵を承認します。
  • 対話型の管理にはSSH公開鍵を、自動化には個別に失効できる認証情報を使用してください。
  • 継続的なビルドはrunnerサービスに任せ、ノートPCのターミナルを開きっぱなしにしないでください。
用途:ビルドの自動化、依存関係の管理、ログの診断

VNCデスクトップのパスワード、SSHログインパスワード、SSH秘密鍵のパスフレーズは、それぞれ別の認証情報です。接続に失敗したら、まず使用している認証情報がプロトコルに合っているか確認してから、クライアントの設定を変更してください。

macOSクライアント

Finderから接続し、画面共有でデスクトップを操作

まず下記の手順でSSHトンネルを作成し、ローカルの転送先アドレスに接続してください。VNC通信を暗号化でき、リモートデスクトップ用のポートを別途公開する必要もありません。

  1. 01

    ホスト情報を確認

    コントロールパネルにログインし、対象インスタンスの接続情報を確認します。ホストアドレス、SSHポート、ユーザー名を控え、VNC認証情報は別途確認してください。アドレスやポートが例と異なる場合は、インスタンスに表示されている値を使用します。

  2. 02

    トンネルを接続したままにする

    ローカルのターミナルで、このページのポート転送コマンドを実行します。コマンドに -N を指定した場合、成功しても対話型のコマンドプロンプトが表示されないのは正常です。ターミナルは開いたままにしてください。エラーが出たら、デスクトップ接続を試す前にエラーを解決します。

  3. 03

    VNCアドレスを入力

    Finderで「移動」→「サーバへ接続」を選ぶか、 ⌘ Kを押して、 vnc://127.0.0.1:15900を入力します。「画面共有」アプリが起動したら、画面の指示に従ってリモート側のVNC認証情報を入力してください。

  4. 04

    接続を確認して画質を調整

    Finderの操作、文字入力、Xcodeの起動ができることを確認します。操作する場合は、表示専用ではなく操作モードを選択してください。画面がローカルウィンドウからはみ出す場合は、まず縮小表示を有効にしてから、ネットワーク状況に応じて画質を調整します。

ループバックアドレスを利用できるのは、トンネルを実行しているコンピューター上だけです。別のコンピューターでビューアを使う場合は、そのコンピューターでも独立してトンネルを作成してください。別のコンピューターのローカル接続は引き継げません。

Windows / Linuxクライアント

ホストとポートを分けて入力し、画質は控えめな設定から

TigerVNCなど、VNCプロトコルに対応したビューアを使用します。WindowsではOpenSSHクライアント、Linuxではターミナルのsshコマンドでトンネルを作成し、デスクトップビューアからローカルの転送ポートに接続します。

Windows:SSHを実行してからビューアを起動

PowerShellまたはWindows Terminalでトンネルコマンドを実行します。システムで sshが見つからないと表示された場合は、OpenSSHクライアント機能がインストールされているか確認してください。

VNCビューアのホスト欄に 127.0.0.1、ポート欄に 15900を入力します。一部のクライアントでは、単一のコロンに続く数字がディスプレイ番号として扱われます。アドレス欄が1つだけの場合は、そのクライアントの「ポートを明示する」形式で入力してください。

キーボードマッピング:Command、Option、よく使うショートカットキーを確認します。

Linux:トンネルと画面を分けてトラブルシューティング

SSHトンネルを1つのターミナルで実行したまま、グラフィカルなVNCビューアを起動します。トンネルが切れていると、ビューアはローカルポートに接続できません。リモートデスクトップのパスワードが間違っているわけではありません。

パッケージマネージャーでクライアントをインストールする場合は、リモート認証方式に対応したバージョンを選びます。「サポートされていないセキュリティタイプ」と表示されたら、まず互換性を確認してください。認証を無効にしたり、サーバー側のセキュリティ設定を下げたりしないでください。

ネットワークの確認:クライアントが実際に接続しているのはローカルの転送ポートか確認します。
以下はクライアント設定の初期値の目安です。画質やフレームレートを保証するものではありません。項目名はビューアのバージョンによって異なります。
設定項目 初期設定の目安 調整するタイミング
色深度 自動選択。通信帯域が限られる場合は16-bitを試す スクリーンショット、色、細かい文字を確認するときはフルカラーにします。色の確認を目的とする場合、色深度を下げないでください。
エンコードと圧縮 自動エンコードを維持し、適応型圧縮を使用 ウィンドウのドラッグが大きく遅れる場合は圧縮率を少し上げます。文字がぼやける場合は、非可逆圧縮を弱めてください。
デスクトップ解像度 まずは1440 × 900または1600 × 900 操作が安定してから解像度を上げます。最初から高解像度の画面を大量に転送しないようにしてください。
継続更新 適応型更新を使用し、不要な継続更新をオフにする 動きのある画面を確認するときだけ更新頻度を上げます。コード編集に動画のような画面更新は必要ありません。
クリップボード 必要に応じて有効にし、機密情報を扱うときは同期をオフにする 証明書のパスフレーズや認証情報をコピーする前に、ローカルとリモート間の同期方向を確認してください。
推奨接続方法

1本のSSHトンネルでVNCを転送

以下のアドレスはドキュメント用の例であり、そのままでは接続できません。 192.0.2.10、macuser 、ポートをコントロールパネルに表示されている実際の接続情報に置き換えてください。この例では、リモートVNCサービスがホスト自身の 5900 番ポートで待ち受けているものとします。

ローカルのビューア127.0.0.1:15900
SSH暗号化トンネルホストアドレスとSSHポート
リモートVNCサービス127.0.0.1:5900
ローカルコンピューターで実行
ssh -N -T -L 127.0.0.1:15900:127.0.0.1:5900 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -p 22 macuser@192.0.2.10

このコマンドの内容

-L はローカルのループバックアドレスだけで待ち受けます。最初のポートがローカルの接続先、最後のポートがリモートVNCサービスのポートです。-p はSSHのポートを指定します。VNCのポートではありません。-N -T はポート転送のみを行い、リモートの対話型ターミナルを開かない指定です。

接続の確認と終了

初回接続ではSSHフィンガープリントを確認します。接続できたらビューアからローカルポートに接続し、トンネルを終了するには Ctrl C を押します。ローカルポートが使用中の場合は、 15900 を未使用の別のポートに変更し、ビューアのアドレスも同じポートに変更してください。

エラーは原因ごとに対処

接続がタイムアウトする場合は、アドレス、SSHポート、接続元の制限を確認します。認証に失敗する場合は、ユーザー名と鍵を確認します。転送先への接続が拒否された場合は、リモートVNCサービスとポートを確認してください。あらゆる接続問題をパスワードの変更で解決しようとしないでください。

鍵認証を確認してからパスワード認証を無効化

ローカル用のEd25519鍵を作成し、秘密鍵のパスフレーズを設定します。リモートユーザーの ~/.ssh/authorized_keysには公開鍵の内容だけを追加してください。秘密鍵はローカルに保管し、ホスト、リポジトリ、チケットにはアップロードしないでください。

同じ名前の鍵がすでにある場合は上書きしないでください。別のファイル名を指定し、接続時に -i でその鍵を指定できます。公開鍵ファイルの末尾は .pub です。秘密鍵ファイルにはこの拡張子がありません。

接続専用の鍵を生成
ssh-keygen -t ed25519 -a 64 -f ~/.ssh/armrdp_ed25519

macOSとLinuxでは、リモートユーザーの ~/.ssh ディレクトリの権限は通常 700、authorized_keys の権限は 600に設定します。Windowsのローカル秘密鍵はファイルのアクセス権で読み取りを制限してください。Unixの権限コマンドをそのまま適用しないでください。

画面とネットワーク

画面の負荷を下げてから、接続先との距離を確認

コンパイルはリモートで実行されますが、デスクトップの応答性はローカルネットワーク、経路、解像度、画面の変化量にも左右されます。VNCでウィンドウを動かしたときの感触をホストのコンパイル性能と混同しないでください。また、地理的な距離だけで遅延を判断することもできません。

  1. 01

    まず画面の範囲を絞る

    モニターを1台にし、高解像度のデスクトップ、動く壁紙、複数ウィンドウのアニメーションを減らします。ローカルのビューアウィンドウを小さくするだけでなく、リモートデスクトップのサイズを調整すると、転送する画面データをより効果的に減らせます。

  2. 02

    一度に変更するのは1項目だけ

    解像度、色深度、圧縮を順に試します。同じプロジェクトを開く、同じウィンドウをドラッグするなど、同じ操作で比較してください。複数項目を同時に変更すると、どの設定が効果的だったか判断しにくくなります。

  3. 03

    次にネットワーク経路を確認

    ローカルでの大容量ファイル転送を一時停止し、安定した有線ネットワークを優先します。SSHの応答とVNC画面の更新を比較してください。SSHがスムーズでVNCだけ遅い場合は、すぐに機種を変更せず、まず画面設定を確認します。

5拠点の地理とタイムゾーンの参考情報です。各都市で遅延を実測した結果ではありません。利用可能な拠点はコントロールパネルの最新情報をご確認ください。
拠点 現地のタイムゾーン 選ぶ際のポイント
シンガポール UTC+8 チームの主な所在地が東南アジアなら、最初の接続テスト先として適しています。
日本(東京) UTC+9 チームの主な所在地が日本または東アジアなら、現地ネットワークからの実際の経路を比較してください。
韓国(ソウル) UTC+9 チームの主な所在地が韓国または北東アジアなら、通信事業者の経路も考慮して選択してください。
香港 UTC+8 チームの主な所在地が中国南部または東南アジアなら、操作感とリポジトリへの接続経路を確認してください。
米国西部 UTC−8 / UTC−7 チームの主な所在地が北米西海岸なら優先して検討してください。タイムゾーンは現地の夏時間に応じて変わります。

デスクトップをたまに設定するだけの場合は、コードリポジトリ、依存関係のキャッシュ、ビルド成果物のアップロード経路も考慮して拠点を選びましょう。継続的なビルドではツールチェーンとパイプラインの安定性を優先し、VNCを一晩中接続しておく必要はありません。

接続のセキュリティ

権限を変更するときは、必ず動作確認の手段を残す

リモートのセキュリティ設定は手順が重要です。新しい方法が使えることを確認してから、古い方法を無効にしてください。鍵、接続元アドレス、認証方式を同時に変更すると、問題の原因を特定しにくくなります。

パスワード認証を無効にする前に

現在のSSHセッションを開いたまま、別のターミナルから指定した秘密鍵で新たに接続し、必要な管理権限があることを確認します。接続に成功してからSSHのパスワード認証を変更してください。変更前に設定ファイルの構文を確認し、使用中のシステムのサービス管理方法に従って設定を反映します。

確認基準:新しいセッションで公開鍵認証によるログインができ、必要なコマンドを実行できます。

接続元IPを制限する前に

まずローカルのグローバルIPアドレスが固定か確認し、該当するネットワークまたはホストのアクセスルールでそのアドレスを許可します。自宅ネットワークの一時的なIPアドレスを固定アドレスとみなさないでください。また、対象を確認せずにファイアウォールコマンドを適用しないでください。

確認基準:許可したネットワークから接続でき、それ以外の接続元から対象ポートにアクセスできません。

認証情報を定期的に更新

メンバーごと、また自動化タスクごとに別々の鍵を使用します。メンバーの離脱、デバイスの紛失、鍵の漏えいが疑われる場合は、新しい公開鍵を登録して動作を確認してから古い鍵を削除します。CIに保存された認証情報と関連するアクセス記録も確認してください。

確認基準:古い鍵が失効し、現在のrunnerと管理用接続が引き続き使えます。

まだ接続できませんか?問題の発生箇所を特定しましょう

コントロールパネルからチケットを送信し、ホストID、クライアントのOSとバージョン、使用プロトコル、エラーの原文、発生日時とタイムゾーン、SSHトンネル経由かどうかを記載してください。スクリーンショットにパスワード、トークンなどの機密情報が写っている場合は、送信前に隠してください。秘密鍵や証明書一式は送らないでください。

接続を確認してから、ビルドをrunnerに任せる

まずは1日単位で利用できます。料金は1日$21.1から。SSHと画面共有の両方が使えることを確認したら、Xcodeと依存関係のバージョンを固定し、日々のビルドをローカルPCの常時接続に頼らず実行しましょう。