この記事で分かること
- GitHub Actions の Windows ランナーを、毎回まっさらな「検証用の Windows」として使う方法
- 自作アプリを、お客様と同じ手順で「落とす・入れる・開く・閉じる・消す」まで自動で確かめるワークフロー
- 実際にやって分かった、できること・できないこと(Windows 11 ではない・SmartScreen は見えない など)
はじめに — 開発機では一度も踏めない道がある
私たちは FolderOS という Windows 向けのファイル管理アプリ(Tauri 2 + React + 同梱の Node)を作っています。
以前、10名の会社にインストーラーだけを渡したところ、まったく使われませんでした。言われたのは「何ができるのか分からなかった」。原因を追うと、鍵も設定も無い PC でだけ通る道で行き止まりになっていました。開発機には鍵も設定も揃っているので、その道は一度も踏まれていなかったのです。
それ以来「出す前に、まっさらな Windows で入れて開いて確かめる」を決まりにしました。ところが、これが意外と難しい。
- 開発機は Windows 11 Home なので、Windows Sandbox も Hyper-V も使えない
- 開発機にはインストール済みのアプリがあり、試すと上書きしてしまう
- 検証用の PC をもう1台用意して、毎回まっさらに戻すのは手間
そこで目を付けたのが、GitHub Actions の Windows ランナーです。実行のたびに新しい仮想マシンが用意され、終われば捨てられます。つまり「毎回まっさらな Windows」が、コードを1本書くだけで手に入ります。
やったこと — お客様と同じ手順を、毎回まっさらな Windows で
手動で起動するワークフロー(workflow_dispatch)を1本作り、次の順に確かめます。
- お客様と同じ URL から落とす(大きさ・SHA-256・署名の状態を記録)
- 無人でインストールする(NSIS の
/S)。ファイルとアンインストールの登録ができたか - 起動して窓が出るか。WebView2 と、同梱の Node の常駐プロセスが立ったか。デスクトップの写真を残す
- インストールされた物そのもので、裏側の処理を通す(一覧・検索・ごみ箱へ移して戻す・会社フォルダの外を断る、など10項目)
- × で閉じると、本体も常駐も終わるか
- アンインストールしても、お客様の書類が残っているか
骨組みはこれだけです。
on:
workflow_dispatch:
inputs:
version:
description: "試す版。空なら最新の公開版"
required: false
jobs:
clean-install:
runs-on: windows-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: お客様と同じ URL から落とす
shell: pwsh
run: |
Invoke-WebRequest -Uri "https://example.com/download/v$ver/App_${ver}_x64-setup.exe" -OutFile C:\work\setup.exe
$sig = Get-AuthenticodeSignature C:\work\setup.exe
"signature=$($sig.Status)" | Tee-Object -FilePath C:\work\install.txt -Append
- name: 無人でインストール
shell: pwsh
run: |
$p = Start-Process C:\work\setup.exe -ArgumentList '/S' -Wait -PassThru
if (-not (Test-Path "$env:LOCALAPPDATA\App\app.exe")) { throw "インストールされていない" }
- name: 起動して窓が出るか・× で閉じて終わるか
shell: pwsh
run: |
$p = Start-Process "$env:LOCALAPPDATA\App\app.exe" -PassThru
# MainWindowHandle が立つまで待つ → 写真を撮る → CloseMainWindow() で閉じる → 残ったプロセスが無いか
- name: アンインストールしても書類が残るか
if: always()
shell: pwsh
run: |
Start-Process "$env:LOCALAPPDATA\App\uninstall.exe" -ArgumentList '/S' -Wait
# アプリが消えたこと・会社フォルダの見本の書類がそのまま在ること
- uses: actions/upload-artifact@v4
if: always()
with:
name: clean-install
path: C:\work\*
retention-days: 3
ポイントは2つあります。
- 成功した記録も、失敗した記録も、ファイルに書いて持ち帰る(
install.txt・写真・録画)。落ちたときに「何が起きていたか」が残っていないと、推測で直すことになります - アンインストールの手順は
if: always()。途中で落ちても、最後の「書類が残るか」だけは必ず確かめます
結果 — 2分14秒で、ここまで分かった
実際の記録です(FolderOS 0.1.195 の公開版)。
download_sec=3 size_mb=43.1 signature=NotSigned
install_exit=0 install_sec=8 exe_exists=True
installed_files=241 installed_mb=148.8
launch_window=True alive=True webview2_procs=6 resident_cli_procs=1
close_exited=True resident_cli_left=0
uninstall_exit=0 app_removed=True company_docs_intact=True
裏側の10項目もすべて OK でした(Word・Excel の中身で探すと、索引ができてから約1.5秒で見つかる、など)。全体で 2分14秒。
いちばん効いたのは、1枚の写真だった
起動したときのデスクトップの写真を見て、初回の画面に「閉じる」ボタンが無いことに気づきました。
FolderOS は窓の枠を自前で描いていて、最小化・最大化・閉じるのボタンは、ふだんの画面の上の帯にあります。ところが、初めて開いたときの「会社フォルダを選ぶ」画面にはその帯が無く、閉じるには Alt+F4 かタスクバーしかありませんでした。開発機では2回目以降の画面しか見ないので、何か月も気づかなかったものです。
自動の検査(型検査・231件のテスト)は全部通っていました。見れば一瞬で分かるのに、テストでは気づけないものがあります。写真を1枚残すだけで、それが拾えました。
できなかったこと(ここが大事)
便利ですが、限界ははっきりあります。
| できなかったこと | 理由・代わりにしたこと |
|---|---|
| Windows 11 ではない | ランナーは Windows Server 2025。クライアントの Windows と完全に同じではない |
| SmartScreen の警告は見えない | 「Windows によって PC が保護されました」は、ふだんの Windows でダウンロードしたときに出るもの。ランナーでは再現しない。署名の有無は Get-AuthenticodeSignature で記録するだけ |
| 画面の中身を自動で操作できない | ふだん開発機では WebView2 の --remote-debugging-port で画面を操作して試験しているが、このランナーの WebView2 は、その引数を受け取らなかった。画面の中の試験は開発機側に任せ、ここは「入れて・開いて・裏側が動いて・閉じて・消せる」に絞った |
| 録画は MP4 だと壊れた | ffmpeg を途中で止めると、断片化 MP4 は 36 バイトしか残らなかった。MKV(Matroska)にしたら、途中で止めても再生できた |
| 公開済みの古い版には無い機能もある | 「最新の公開版」を試すので、まだ出していない機能の検査は飛ばす。常駐が「その命令を知らない」と返したら、落とさずに「この版には無い」と記録する |
つまり、これは本物のまっさらな PC での確認の代わりではありません。「入れる・開く・閉じる・消す」でつまずかないかを、人が見る前に毎回ふるい落とす手前の関門です。SmartScreen を含めた最後の確認は、人がふだんの Windows 11 で行います。
費用
private リポジトリでは、GitHub Actions の実行時間が課金されます。実行時間は1回ごとに分単位で切り上げられ、さらに Windows のランナーは Linux の2倍で数えられます。2分14秒の実行なら、3分に切り上げて2倍の6分ぶんです。私たちは手動で起動するだけにして、リリースのたびに自動では回していません(節目の版の前に1回回す)。
まとめ
- GitHub Actions の Windows ランナーは、実行のたびにまっさら。検証用の PC を用意しなくても、「お客様と同じ手順でインストールして開く」を毎回やり直せる
- 写真と記録を必ず持ち帰る。テストが全部通っていても、写真1枚で見つかるものがある
- できないことを知っておく。Windows 11 ではない・SmartScreen は見えない・画面の自動操作はできなかった。最後は人が見る
FolderOS について
この記事で確かめていた FolderOS は、会社の共有フォルダを、エクスプローラーと同じ手つきで見て・探せる Windows アプリです。Word・Excel の中身まで1秒かからずに探せ、AI に頼むときも会社フォルダの外は読みません。Microsoft Store から無料で入れられます。
AppTalentHub では、こうした「小さく作って、毎回確かめながら出す」アプリづくりを、中小企業や新規事業の現場で支援しています。ご相談は AppTalentHub のサイト からどうぞ。
(続き: Windowsアプリの署名、証明書は買わずに Microsoft Store(MSIX)にしました)


