Windows 動作検証環境
UZU モバイルアプリを Windows 環境で動作検証するための共通 VM。Mac 開発機しか持っていないメンバーでも、Flutter アプリの Windows ビルド / 動作確認ができる。
インスタンス情報
| 項目 | 値 |
|---|---|
| GCP プロジェクト | uzu-lab |
| インスタンス名 | flutter-windows-dev |
| ゾーン | asia-northeast1-c |
| OS | Windows Server 2025 Datacenter |
| マシンタイプ | c3-standard-4 |
| GCP コンソール | VM 詳細ページ |
起動・接続
1. VM を起動
停止中は vCPU / メモリ課金なし。気軽に起動していい。
gcloud compute instances start flutter-windows-dev \
--zone=asia-northeast1-c --project=uzu-lab起動には 1〜2 分かかる。
2. 外部 IP を確認
外部 IP は ephemeral 割り当てのため、停止→起動のたびに変わる。起動後に以下で確認する。
gcloud compute instances describe flutter-windows-dev \
--zone=asia-northeast1-c --project=uzu-lab \
--format="value(networkInterfaces[0].accessConfigs[0].natIP)"表示された IP(例: 34.85.11.219)が RDP 接続先。
3. Mac から RDP 接続
- Windows App(旧 Microsoft Remote Desktop)を App Store からインストール
- アプリ起動 →
+→Add PC - 以下を入力:
| 項目 | 値 |
|---|---|
| PC name | 2. で取得した外部 IP |
| Username | chaya |
| Password | 0;PKIZ]^u/^,eX) |
- 保存してダブルクリックで接続
共通アカウント。個別ユーザー作成は不要。
4. PowerShell で Flutter アプリを起動
RDP で VM に入ったあと、以下の手順で動作確認を開始する。
スタートメニュー →
powershellを検索 → Windows PowerShell を起動(Win + X→Terminalでも可)モバイルアプリのディレクトリに移動 & 最新取得:
powershellcd C:\Users\chaya\works\app\dart\apps\mobile git pull依存関係を解決してアプリを起動:
powershelldart pub get flutter run -d windows
初回は Visual Studio の C++ ワークロードを使って Windows 版ビルドが走るため、数分かかる。起動すると Flutter アプリの Windows ウィンドウが立ち上がる。
プリインストール済みの開発環境
- Visual Studio Code
- Visual Studio 2022(
Desktop development with C++ワークロード + ATL コンポーネント。ATL が無いとatlstr.hを使うプラグインのビルドが失敗する) - Dart SDK / Flutter SDK(インストール箇所は
~/development/flutter、必要に応じてflutter upgradeを行って良い) - Git / GitHub CLI (
gh) - NuGet CLI
リポジトリは以下に clone 済み:
C:\Users\chaya\works\app自動シャットダウン
誰も RDP 接続していない状態が1時間続くと、自動的にシャットダウンされる(課金停止)。タイムゾーン非依存で、グローバルチームでも不公平なく動作。
| 項目 | 値 |
|---|---|
| 最低 uptime | 30分(起動直後は落ちない) |
| アイドル判定 | 1時間(アクティブ RDP セッションなし + 直近1時間に RDP ログオン/切断イベントなし) |
| チェック間隔 | 15分(シャットダウン発動は最大15分の遅延) |
手動で停止:
gcloud compute instances stop flutter-windows-dev \
--zone=asia-northeast1-c --project=uzu-lab長時間のビルド・検証をする場合
自動シャットダウンは「アクティブな RDP セッション」を見ているため、RDP を disconnect すると1時間後に VM ごと落ちる(= ビルドも中断)。長時間作業するときは:
- RDP 接続を維持したままにする、または
- 30分〜1時間以内に再接続してアイドルタイマーをリセットする
使う上での注意事項
共通アカウントである
- 個人の Google / GitHub ログインは残したまま放置しない
- API キーや秘密情報をファイルに置かない
- 終了時は uncommitted changes を push して残さない(次の人の作業と衝突するため)
GPU が無いため動画再生は検証できない
マシンタイプ c3-standard-4 は GPU を持たない。video_player_win(Windows は本家 video_player が非対応のため使用)が使う Media Foundation の DXGI ハードウェアデコード経路が常に失敗するため、ムービー演出は黒画面・無音になる。
クラッシュしないことは確認できるが、動画が正しく再生されるかはこの VM では判定できない。その確認には GPU 搭載の物理 Windows マシンが要る(PR #23216 のレビュー依頼欄に実例)。
Google Play Games on PC は起動できない
Android 版 UZU を Google Play Games on PC 上で動かす検証は、この VM ではできない。インストーラは通るが起動に失敗する。
Google Play Games on PC は Windows Hypervisor Platform(Hyper-V ベース)を要求する(PC 版 Google Play Games のインストールと設定「Windows Hypervisor Platform が無効になっている場合は、インストール時に有効にするようメッセージが表示されます」)。一方 Compute Engine のネストされた仮想化は L1 VM 上で Linux KVM しか通さない(Nested virtualization overview の Restrictions 節「The only hypervisor supported in an L1 VM is Linux KVM; Microsoft Hyper-V isn't supported.」)。VM の設定変更やマシンタイプ変更では解消しない。
Play Games on PC 固有の挙動(外部ブラウザ intent の扱い、Cuttlefish VM 上の Android としての振る舞い等)を確認するには物理 Windows マシンが必要。
トラブルシュート
RDP 接続がタイムアウトする
- VM が起動しているか確認(
gcloud compute instances list --project=uzu-lab) - 外部 IP が変わっていないか確認(上記
describeコマンドで再取得) - ファイアウォールルール
default-allow-rdpが有効か確認
自動シャットダウンが動かない / 動きすぎる
- 実行履歴: VM 内
C:\ops\Auto-Shutdown.log - タスクスケジューラ:
AutoShutdownIfIdle(SYSTEM 実行、15分おき) - 起動スクリプト本体: VM メタデータ
windows-startup-script-ps1に格納されている - 閾値変更: メタデータのスクリプト内
$IdleHours/$MinUptimeMinutesを編集 →gcloud compute instances add-metadata ...で再投入 → 次回起動時に反映
設定の詳細を見るコマンド:
gcloud compute instances describe flutter-windows-dev \
--zone=asia-northeast1-c --project=uzu-lab \
--format="value(metadata.items[windows-startup-script-ps1])"