個人開発でiOSアプリをリリースするにはMacが必要だ。だからMacを買った。ただ、メインマシンはWindowsで、Macはほぼビルド専用機になっている。キーボードショートカットも違う、ファイル操作も違う、ターミナルコマンドは似ているようで微妙に違う。

それならWindowsのターミナルからSSHでMacに繋いで操作すればいい。MacのGUIにほぼ触れることなく、iOSアプリをビルドしてApp Storeに提出できる環境を作った。その方法を書いておく。

Step 1

Mac側でSSH接続を有効化する。

まずMac側でSSHの受け口を開く。GUIで設定するだけで完了する。

  1. 1

    システム設定を開く

    Apple メニュー → システム設定 → 一般 → 共有

  2. 2

    リモートログインをONにする

    「リモートログイン」のトグルをONにする。設定画面にSSH接続のコマンド例が表示される(ユーザー名とIPアドレスが確認できる)。

  3. 3

    MacのIPアドレスを確認する

    ターミナルで以下を実行してローカルIPを確認する。または システム設定 → Wi-Fi → 接続中のネットワーク → IPアドレス から確認できる。

// Mac上で実行 — ローカルIPを確認

ifconfig | grep "inet " | grep -v 127.0.0.1

Step 2

WindowsのターミナルからSSHで繋ぐ。

Windows側はPowerShellかWindows Terminalを開いてそのまま接続できる。OpenSSHはWindows 10以降に標準で入っているため、追加インストール不要だ。

// Windows側のPowerShell / Windows Terminalで実行

ssh ユーザー名@Macのローカルアドレス

// 接続後の表示例

Last login: Wed May 20 17:18:33 2026
ユーザー名@MacBook-Air ~ %

これでMacのターミナル環境がWindowsのウィンドウ内に展開される。あとは通常のMacターミナル操作と同じだ。flutter build ipaも、git pushも、そのまま実行できる。

省力化

.ssh/config で毎回のIP入力を省く。

毎回IPアドレスを打つのは面倒だ。Windows側の~/.ssh/configファイルに接続先の情報を書いておくと、短いエイリアスで繋げるようになる。

// C:\Users\ユーザー名\.ssh\config に追記

Host mymac
  HostName 192.168.x.x
  User ユーザー名

// 設定後はこれだけで接続できる

ssh mymac

落とし穴

コード署名でエラーになる問題。

SSH接続でMacを操作していると、flutter build ipaxcodebuildでコード署名がエラーになることがある。

原因はキーチェーンのロック状態だ。GUIでログインしていないSSHセッションでは、macOSのキーチェーン(署名証明書が保存されている場所)がロックされたままになる。Xcodeがコード署名をしようとしても証明書にアクセスできず、エラーになる。

// ビルド前にキーチェーンをアンロックする

security unlock-keychain ~/Library/Keychains/login.keychain-db

実行するとパスワードを求められるので、Macのログインパスワードを入力する。一度アンロックすればそのSSHセッション中は有効だ。セッションを開き直したら再度実行する必要がある。

ビルドスクリプトに組み込む場合は以下の形式でパスワードをインライン指定できるが、スクリプトファイルへのアクセス権限管理に注意すること。

// スクリプト組み込み用(パスワード管理に注意)

security unlock-keychain -p "パスワード" ~/Library/Keychains/login.keychain-db

接続が切れても大丈夫にする

tmuxでセッションを維持する。

SSHはネットワークが途切れると接続が切れる。接続が切れると実行中のプロセスも終了する。iOSビルドは数分かかることもあるため、途中で切れると最初からやり直しになる。

tmuxを使えばSSH切断後もセッションが生きた状態で残り、再接続後に途中から作業を再開できる。

// tmuxの基本操作

# 新しいセッションを作成して入る
tmux new -s work

# セッションをデタッチ(接続を切っても作業は継続)
# Ctrl+B を押してから D

# 再接続後にセッションに復帰
tmux attach -t work

# 実行中のセッション一覧を確認
tmux ls

長いビルドを走らせたらデタッチして別の作業をする、というフローが自然にできる。

Claude Code over SSH

低スペックMacでも重くならない理由。

個人開発用に高性能なMacを買う必要はない。ビルドさえ通れば十分という考えでMac Airを選んだが、Claude Codeを使う上でも低スペックで問題なかった。

// Tips

Claude CodeはMacのスペックを消費しない

Claude CodeをSSH先のMacで実行すると、コードの解析・生成・提案はすべてAnthropicのサーバー側で行われる。MacはSSHセッションを維持してテキストを送受信するだけで、CPUやメモリへの負荷はほぼゼロだ。

ローカルLLMを動かす場合とは正反対の構造で、クラウド側で処理されるからこそ低スペックでも動く。Mac Airで試してみたが、ビルドとAI操作を同時に行っていても重さは感じなかった。

また、SSHで直接Mac上のファイルを操作できるため、「WindowsでログをコピーしてClaude Codeに貼り付け、回答をMacに戻す」という二度手間が不要になる。プロジェクトのコードを直接Claude Codeに渡せるのは大きなメリットだ。

注意点

今回の方法はローカルネットワーク内(自宅Wi-Fiなど)でのSSH接続を前提にしている。外出先からMacに接続したい場合は別途VPNや外部公開の設定が必要になる。また、パスワード認証よりSSH公開鍵認証の方がセキュリティ上優れているため、常用するなら公開鍵認証への移行を検討したい。