🎯 この記事の範囲
第 4 回 で、受入は落ちるテストだと書いた。落ちる場所は、全部が Linux ではありません。
実装の正本は Ubuntu 26.04 です。帳票の決定論テスト、SBPL 生成、モバイルの共有ロジックは Linux で閉じます。第 4 回 の Moq / フェイクが、実プリンタ無しでその赤を出せる理由です。閉じないもの(シミュレーター、WebView2、Windows フォント)だけ、同じ AI セッションから SSH で Mac と Windows 11 へ出して 回します。
リモート開発第 7 回 は、Windows / Mac / スマホから Ubuntu へ入る 話です。本記事は逆で、Ubuntu から Mac / Windows へ出る 話です。接続の作り方は第 7 回、置換の TDD をどのマシンで閉じるかが本記事です。
| 本記事 | 隣接 | |
|---|---|---|
| 本記事(第 5 回) | Linux を正本にする / 出先の役割分担 / 鍵は Linux に残す / アイコン・ビルド・キャプチャを AI に渡す / それでも実機ではない | 受入、切替 |
🐧 正本は Ubuntu、出先は不足分だけ
Linux ネイティブで足りる作業を、Windows に戻しません。開発環境第 4 回 の .NET / Docker が、帳票 CLI と共有テストの実行機です。
足りないのは OS の特権です。
| 閉じる場所 | 内容 |
|---|---|
| Ubuntu 26.04 | 共有ロジック、帳票の決定論テスト、Playwright Chromium、Linux からの WPF クロスビルド、SBPL 生成 |
| Windows 11(SSH 先) | WPF ネイティブ、WebView2、Windows の日本語フォント、インストール済み Chrome |
| Mac(SSH 先) | Xcode、iOS シミュレーターのビルドと起動、画面キャプチャ |
| 人 | 実 iPhone / Android、実紙、送り状契約、本番送信 |
Windows を残している理由は デュアルブート第 2 回 と同じです。e-Tax や周辺機器の退避先であると同時に、Linux では存在しない描画エンジンの実行機です。日常の実装を Windows に戻す理由にはしません。
共通の検証コマンドは、コンポーネントを足すだけにします。Linux では reporting と共有ロジック、Windows ではネイティブ WPF、Mac では iOS シミュレーター。失敗した工程で止める。TDD の Red は、出先でも同じ赤です。
🔑 鍵は Linux に残し、出先へコピーしない
出先はビルド機であって、秘密の保管場所ではありません。
- 開発用の Ed25519 は Ubuntu のユーザー領域だけに置く
- 公開鍵だけを Mac の Remote Login ユーザーと、Windows の SSH ユーザーへ登録する
- 秘密鍵をリポジトリ、計画フォルダー、Mac、Windows へ置かない
- 既存の個人鍵は使い回さない
Windows 側の落とし穴は、Remote SSH 第 7 回 の「WSL の鍵と Windows ネイティブの鍵は別物」と対になります。こちらは Microsoft Entra ID のアカウントでは Windows OpenSSH の公開鍵認証が使えないことです。日常ログインはそのままにし、SSH 専用の ローカル標準ユーザーを足します。管理者昇格は OpenSSH Server の導入だけに使い、普段のビルドユーザーは標準のままにします。
ファイアウォールは「SSH を世界に開ける」ではありません。Ubuntu 開発機からの TCP 22 だけを許可します。ネットワーク全体の種別を緩める必要はありません。
Mac は「システム設定 → 一般 → 共有 → リモートログイン」です。接続している間は電源に繋ぎ、確認前に Xcode を一律更新しません。既存の組み合わせを先に集め、不足だけ足します。
Tailscale はオフィス外から Ubuntu へ入る土台です。今回の Mac / Windows は同じ机上のビルド機なので、SSH 先を Tailscale 必須にはしません。経路が違うだけで、公開鍵認証・最小権限・鍵を出先に置かないは同じです。
🖥 出先で初めて落ちたテスト
Linux で 78 件緑でも、Windows の游ゴシックでは備考付き 12 明細が用紙を食む。MS PGothic 太字では「納品書」が 13mm に収まらない。これは 帳票第 8 回 に書いた差で、出先で回したから見つかった Red です。
WPF のクロスビルドが Linux で通ることと、WebView2 が Windows の UI スレッドで帳票を表示できることは別です。バックグラウンドの印刷エージェントから WebView2 を直接触ると落ちる。Dispatcher へ戻す修正は、Windows 上の実 WebView2 が無ければ書けません。
Mac では、既存 .NET for iOS が要求する Xcode と、入っている Xcode がずれることがあります。ホストの SDK を上書きせず、作業用コピーへ対応 SDK を置く。iPhone SE と Pro Max のシミュレーターで、スプラッシュが幅 80% 指定のまま左右欠ける。優先度を上げてから、ログイン入口までキャプチャする。これも Linux だけでは再現しません。
Android は Linux で ARM64 の Debug APK 生成までできます。エミュレーターの OS サービスが止まればインストールは失敗する。失敗を「Android 検証完了」にしない。
🎨 アイコンとキャプチャも、AI に出させる
旧デスクトップのメニュー画像は、文字入りの小さな PNG です。それを引き伸ばすと、透かしや商用素材が残ります。分類と配色だけを参照し、文字の無い SVG を描き直す作業も AI に出します。機能名はタイルのテキスト側です。アイコンへ文字を重ねません。
確認は Chromium で SVG を画像化して図柄と色を見るところまでです。ダークモードと実機のタップ領域は 第 6 回 の人の切替です。
キャプチャも同様です。
- iOS シミュレーターの起動画面とログイン入口(小型 / 大型)
- 修正前と修正後の幅比較
- Windows 生成 PDF の先頭ページ
- 業務アイコン SVG のプレビュー
AI がシミュレーターを起動し、画面を保存し、幅の割合を測ります。席を外す監視は Remote Control と組み合わせられます。ただしキャプチャの成功は、店舗オペレーションの成功ではありません。
⛔ 出先の緑を、切替にしない
品質ゲート は、出先のテストもマージ条件にできます。条件にできないのは、SSH が届かない副作用です。
| 出先で閉じてよい | まだ人 |
|---|---|
| WPF ネイティブビルド 0 エラー | ドライバーからの本番印刷 |
| WebView2 で許可した帳票だけ表示 | ミシン目・プリンター倍率 |
| Windows フォントでの用紙超過拒否 | 実紙の重ね合わせ |
| iOS シミュレーター起動とキャプチャ | 実 iPhone のカメラ検品 |
| APK の署名付き生成 | 実 Android の配布と操作 |
専用の作業コピーでビルドします。商品マスター作業中の本体リポジトリを上書きしません。署名情報や業務データの入った旧開発ディレクトリも上書きしません。SHA を照合したソースを出先へ渡し、秘密鍵は渡しません。
✅ 第 5 回まとめ
- 実装の正本は Ubuntu 26.04。Windows に日常実装を戻さない
- Linux で閉じない OS 特権(シミュレーター、WebView2、Windows フォント)だけ SSH で出す
- Remote 第 7 回 は Ubuntu へ入る話。本記事は Ubuntu から出る話
- 秘密鍵は Linux に残す。Windows SSH は Entra ID ではなくローカル標準ユーザー
- アイコン再作成・ビルド・キャプチャまで AI に出してよい
- 出先の緑はエンジンの受入。実機と実紙は次の回
次回「人が残る切替」では、シミュレーターの先の実機、PDF の先の実紙、並行稼働と切戻しを書きます。
📚 シリーズ記事
| 回 | タイトル | 主題 |
|---|---|---|
| 1 | レガシー置換とは | 旧実装を原典にし、先にテストへ落とす |
| 2 | 旧コードの読み方 | 地図が無い状態から四分類 |
| 3 | 寄せる境界・寄せない境界 | DTO、PDF と SBPL、店舗と別拠点 |
| 4 | 受入の機械化 | ユニットと Moq・フェイクで先に落とす |
| 5 | Linux から Mac / Windows へ出して TDD する(本記事) | SSH 先で閉じる不足分、キャプチャまで AI |
| 6 | 人が残る切替 | 実機・実紙・契約・並行稼働 |
| 7 | 再現装置としてのハーネス | 台帳・禁止・ゲート・停止条件 |
🔗 関連リソース
接続の作り方(向きが逆でも土台は同じ)
- Mac / Windows をリモートビルド機にする — 本記事の「出る方向」の接続手順。Windows OpenSSH Server・ローカル標準ユーザー・送信元限定の許可ルール
- Ubuntu リモート開発セットアップ — Tailscale + SSH + VS Code Remote。本記事は出る方向
- Ubuntu PC セットアップ — 作業 OS
- Ubuntu 開発環境セットアップ — Linux 上の .NET
- Windows 11 + Ubuntu デュアルブート — Windows を残す理由
- Claude Code リモートコントロール — 出先ジョブの監視
テストを赤で止める
- TDD 編
- 品質ゲート編
- クロスファミリー TDD ハーネス
- ActiveReports → Playwright + Scriban 移行 — Windows フォントで落ちた Red