個人開発でiOSアプリをリリースするにはMacが必要だ。だからMacを買った。ただ、メインマシンはWindowsで、Macはほぼビルド専用機になっている。キーボードショートカットも違う、ファイル操作も違う、ターミナルコマンドは似ているようで微妙に違う。
それならWindowsのターミナルからSSHでMacに繋いで操作すればいい。MacのGUIにほぼ触れることなく、iOSアプリをビルドしてApp Storeに提出できる環境を作った。その方法を書いておく。
Step 1
Mac側でSSH接続を有効化する。
まずMac側でSSHの受け口を開く。GUIで設定するだけで完了する。
-
1
システム設定を開く
Apple メニュー → システム設定 → 一般 → 共有
-
2
リモートログインをONにする
「リモートログイン」のトグルをONにする。設定画面にSSH接続のコマンド例が表示される(ユーザー名とIPアドレスが確認できる)。
-
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 ipaやxcodebuildでコード署名がエラーになることがある。
原因はキーチェーンのロック状態だ。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公開鍵認証の方がセキュリティ上優れているため、常用するなら公開鍵認証への移行を検討したい。