クラウド Mac 2026年4月20日 約16分 SSH API

2026 テスト API に繋がらない?
SSH ローカル転送と VNC の境界

レイヤ分け · 最小 ssh -L · ATS とキーチェーン · シナリオ表 · 5 ステップ検証

ネットワークと SSH ポート転送のイメージ

Windows を主力にクラウド Mac を借りる構成では、ビルドは通るのに Simulator から API だけがタイムアウト/TLS エラーというチケットが非常に多いです。原因の中心は localhost の帰属です。Simulator はリモート Mac 上で動くため、そこでの 127.0.0.1その Mac のループバックであり、開発用 PC 上の localhost:3000 とは別物です。本稿では現象のレイヤ分けOpenSSH のローカル転送(ssh -L)の最小例と安全上の注意ATS・自己署名・システムプロキシなど VNC がまだ必要な手順シナリオ別の判断表、チケットに貼れる5 ステップ検証をまとめます。企業・学内ネットワークと SSH トンネル(デスクトップに届くか)、Git と同期方式初回 30 分チェックリストとあわせて読むと、開通から連携まで一気通貫で整理できます。

01

レイヤ分け:まず「どのネットワークを見ているか」

問題を四層に分けると、無駄なコード変更を減らせます。A:リモート Mac 自体が外向き通信できない → 先にネットワーク記事へ。B:外向きは良いが、アプリが PC 上のループバックだけを指している → 転送か配置換えが必須。C:API が社内 RFC1918 上にある → まず VPN、必要なら踏み台経由でポートを寄せる。D:TLS/ATS/キーチェーン → 多くは対話ユーザの GUI で一度だけ通す必要があります。以下は現場で繰り返し見る誤認です。

  1. 01

    いきなり Swift を疑う:リモート Mac のターミナルで curl -v http://127.0.0.1:PORT/health を先に実行し、届かなければアプリ以前の問題です。

  2. 02

    Simulator を実機と同じとみなす:USB デバッグのような「PC 直結」はなく、スタックはクラウド Mac 上に閉じます。

  3. 03

    転送を有効にしたつもりでバインド違い:右辺の IP/ポート、IPv6、 listen アドレスを突き合わせないとトンネルは空振りします。

  4. 04

    ATS を丸ごと無効化:開発でもドメイン単位の例外に留め、本番ビルドに汚染しない運用を徹底します。

  5. 05

    SSH だけで完結と期待:クライアント証明書やシステムの「ローカルネットワーク」許可は、Xcode と同じログインセッションのデスクトップで処理するのが早いです。

要点:チケット件名に「どのマシンの localhost か」を書くと往復が減ります。

02

最小の ssh -L と運用上の境界

目的:Windows 上の API(例 127.0.0.1:3000)を、リモート Mac から 127.0.0.1:別ポート として見せる。Windows からクラウドへ SSH し、リモート側ループバックをローカルサービスに結びます。

bash
ssh -N -L 127.0.0.1:19000:127.0.0.1:3000 [email protected]

-N はシェルを開かず転送専用。リモート Mac 上の 19000 へ来た TCP は、SSH クライアント(Windows 側)を経由して 3000 に流れます。デバッグ用 baseURLhttp://127.0.0.1:19000 を指します。社内別ホスト向けには右辺を差し替え、PC がその IP にルーチングできること(VPN 等)が前提です。チームでは 19xxx を連携用に予約し、README に三元組を固定して衝突を避けます。

安全:不必要に 0.0.0.0 へ公開しない;セッション断で転送も消えるためスリープや Wi‑Fi ローミングをログと突合せ;プロバイダの AllowTcpForwarding 制約を確認;禁止環境ではリモート Mac 上の nginx スタブやゲートウェイに寄せる。

  • 引用指標 1:README に REMOTE_LOOPBACK:PORT → LOCAL_SERVICE を明記。
  • 引用指標 2:リモートで lsof -iTCP:19000 -sTCP:LISTEN を記録。
  • 引用指標 3:SSH 開始時刻をチケットに残し「昨夜まで動いた」との相関を取る。
03

ATS・証明書・VNC が必要になるグラフィカル手順

転送は TCP の到達性を保証しますが、App Transport Securityサーバ/クライアント証明書の信頼は別問題です。開発では NSExceptionDomains をドメイン単位で置き、ルート CA をログインキーチェーンへ入れる操作は システム設定/キーチェーンアクセス の UI が要ります。SSH テキストセッションだけでは、Xcode と同じユーザで「信頼」ボタンを押したこととログを一致させにくく、再現性が落ちます。Charles/Proxyman などの HTTPS プロキシも初回トラストがグラフィカルです。

運用上は SSH=転送と自動化、VNC=一度きりの許可と突合せ と役割分担すると、平均復旧時間が安定します。無人 CI 用のスクリプト路線とは切り離し、インタラクティブなデバッグはデスクトップで完結させるのが 2026 年の実務では主流です。

転送は届くか、ATS/キーチェーンは信じるか——後者は VNC 向き。

04

判断表:シナリオ → 転送/踏み台/VNC

シナリオ推奨まだ VNC
API が Windows のみssh -L でリモート環回へATS、信頼アンカー、プロキシ
社内セグメントPC で VPN → 転送、または二段クライアント証明書のインポート
ホストヘッダ/mTLSリモート nginx などで名前解決キーチェーン登録
ヘッドレス CI のみSSH スクリプト署名失敗時の Organizer など
共用ノードポート帯を人ごとに分離アカウントとプロビジョニングの分離

帯域と圧縮の話題は SSH トンネルとトラフィック を参照し、本稿はアプリ層と ATS にフォーカスします。

05

5 ステップ検証(チケットに貼れる)

  1. 01

    リモート環回プローブ:クラウド Mac で curl、HTTP/TLS エラーをそのまま貼る。

  2. 02

    baseURL 整合:Swift/Flutter/RN の各層でホストが分裂していないか確認。

  3. 03

    ATS スナップショット:Info.plist 例外ブロックを差分に添付。

  4. 04

    SSH 健全性:キープアライブ、スリープで切れていないか。切断・スリープ後の復帰も参照。

  5. 05

    VNC で一度:Safari/システム設定でプロキシと信頼をログと突合せてクローズ。

関連記事

あわせて読みたい

FAQ

よくある質問

リモート Mac のループバックです。PC 上のサービスへは転送か再配置が必要です。

TCP については多くの場合はい。証明書とプライバシーは VNC が無難です。

curl → baseURL → ATS → SSH 生存の順で潰します。

そちらはデスクトップ到達。本稿は Simulator 向け API 接続です。

まとめ

工数の多くは Swift の書き方より、どのマシンにループバックがあるか信頼チェーンを誰がグラフィカルに完了させたかに吸われます。SSH だけに寄せるとキーチェーンとログがすれ違い、VNC だけではポート規約が曖昧になります。両方を Runbook 化すると平均復旧が安定します。

自前ハードはスリープや更新、減価償却のコストがあります。低スペック PC では IDE とバックエンドとトンネルでメモリが足りません。クラウド Mac を定額で借り、SSH と VNC の両方を公式導線で使うと、オンライン率とベースイメージは事業者側に寄せつつ、API と証明書の責務はチームに残せます。

ハードを増やしたくないが、本稿の VNC 確認まで含めたい場合は VNCMac のクラウド Mac を検討してください。主ボタンは 購入・申込ページ、比較は トップ からどうぞ。