CTS-KB
モダナイゼーション📚 シリーズ 5/7

Linux から Mac / Windows へ出して TDD する — アイコン・ビルド・キャプチャまで AI に渡す

⏱ 約 7 分で読めます
#レガシー置換#モダナイゼーション#Ubuntu#SSH#TDD#Windows#macOS#.NET MAUI#アイコン

🎯 この記事の範囲

第 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 に戻す理由にはしません。

🐧 正本は Ubuntu、出先は不足分だけ

SSH 公開鍵

SSH 公開鍵

Ubuntu 26.04実装の正本・AI セッション

Linux で閉じるテスト

Windows 11WPF / WebView2 / フォント

MaciOS シミュレーター / キャプチャ

実紙・実ドライバー

実 iPhone / Android

共通の検証コマンドは、コンポーネントを足すだけにします。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・フェイクで先に落とす
5Linux から Mac / Windows へ出して TDD する(本記事)SSH 先で閉じる不足分、キャプチャまで AI
6人が残る切替実機・実紙・契約・並行稼働
7再現装置としてのハーネス台帳・禁止・ゲート・停止条件

🔗 関連リソース

接続の作り方(向きが逆でも土台は同じ)

テストを赤で止める