PyInstallerでビルドしたexeをInno Setupのインストーラーにして、AV誤検知を16/66から0/66まで落とした話は以前書きました。
→ PyInstallerで作ったexe、ウイルス扱いされる問題をInno Setupで解決した話
一旦は落ち着いたんですが、配布を続けるうちに気になってきたことがあります。「次のバージョンリリースで検知が復活したとき、次の手は何か」と「そもそもどんな選択肢があって、何がまだ解決されていないのか」が、調べてみるまでよくわからなかった。
2024〜2025年にかけてコード署名まわりの状況が変わっていたりもしたので、今時点での整理として書いておきます。実際に試したのはInno Setupまでで、それ以外は調べた話です。
今の配布方法
Pythonで作った設計データの比較ツールをGitHub Releasesに置いています。Inno Setupで作ったインストーラー版と、ZIP版の両方です。
インストーラー版は今のところVirusTotalで0/66を維持できています。ただ次のリリースでどうなるかは毎回わからない。この「毎回わからない」が地味に落ち着かない。
ZIP版はそのまま投げると誤検知が出るので、ダウンロードページに「ウイルスソフトを一時無効にするか、ファイルの信頼を手動で許可してください」と書いています。インストーラーに抵抗ある人がいるので両方残していますが、説明文が必要なのは理想的ではないとは思っています。
「次の手」として思い浮かんだもの
Inno Setupを試した後に候補として思い浮かんだのは、こんな感じでした。
コード署名(OV/EV証明書)、AVベンダーへの誤検知申請、bootloaderの自前ビルド、Nuitkaへの移行、Microsoft Storeへの申請——それぞれについて一通り調べてみました。
コード署名の状況(2024〜2026年版)
Windowsのコード署名にはOV(組織認証)とEV(拡張認証)があります。EV証明書を持っていると初回ダウンロードからSmartScreen警告が出なくなる、という情報が以前からありましたが、この動作は2024年に廃止されています。
Microsoftの公式ドキュメントを確認したところ、「Extended Validation (EV) certificates previously bypassed SmartScreen entirely on first download. That behavior was removed in 2024.」と書いてありました。今はEVとOVでSmartScreen挙動の差はほぼなくなっています。
無料でOSSアプリに署名できるSignPath(signpath.io)も調べました。個人開発者向けの無料プランがあります。ただ署名後に開発者名がパッケージに表示されないという仕様で、ユーザーから見て「誰が作ったか」がわからない形になる。信頼感という観点では微妙なところがあります。
有料のOV証明書(DigiCert、Sectorなど)は取得に年間数万円〜かかります。「個人ツールの配布コストとして見合うか」という問いに対して、今の自分にはまだNoかなと思っています。
bootloaderの自前ビルドとNuitkaへの移行は、前の記事でも触れましたが、試していません。VisualStudioの環境構築と毎リリースの管理コストを考えると、今は優先度を下げています。
AVベンダーへの申請
誤検知が出たベンダーのサポートページから申請する方法です。
各ベンダー(Microsoft Security Intelligence、Kaspersky、Bitdefender、ESET等)がそれぞれ申請フォームや報告窓口を持っています。調べてみると申請を自動化するツールやAPIは今のところ存在しません。英語・日本語両方で探しましたが、統合した自動申請パスは見当たらない。ベンダーごとにフォームの構成も違うので、全部手動で送ることになります。
英語圏の事例を読んでも、ベンダーによっては数日で対応するものもあれば、まったく返答がないまま誤検知フラグが残ることもあるようです。手動申請が続いているのは自分だけではなさそう。
66ベンダー全部に毎リリース手動申請するのは現実的ではないので、今は対応していません。誤検知が復活したときにいくつかの主要ベンダーに絞って試すかどうか、という感じです。
Microsoft Storeの状況が変わっていた
これは調べるまで知らなかったんですが、Microsoft Storeへの個人開発者登録が2025年に無料になっていました。以前は$19かかっていたのが、政府発行IDとセルフィーによる本人確認フローに変わって無料化されています。
SmartScreen問題の解決手段としては一番確実で、Microsoftがパッケージを再署名してくれるため警告がゼロになります。
ただ実際に自分のツールでやろうとすると詰まりそうな点がいくつかありました。
まずMSIXというパッケージ形式への変換が必要です。AppxManifest.xmlを書いて、Windows SDKのmakeappx.exeでパッケージ化する手順が発生します。GitHub Actionsで自動化している事例はあるようですが、整備のコストがそれなりにかかりそう。
バグ修正のたびに審査が入ります(数時間〜最大3営業日)。ホットフィックスを即日配布したい場面と噛み合わない。
CLIツールやコマンドライン系の小ツールはStoreのエコシステムと相性が悪く、ユーザーが探しにくい。今の自分はGitHub Releasesのダウンロード数でフィードバックを見ている運用なので、Storeに移るとその流れが変わります。プライバシーポリシーのURLも別途用意する必要があって、小さなツール向けには余分な準備が増えます。
「選択肢としてある」のはわかりましたが、今の運用スタイルには合わないと思いました。
統合ツールがないのを確認した
「PyInstallerでビルド→コード署名→インストーラー生成→AVベンダー申請」をまとめてやってくれるCLIがあれば、と思って探しました。
Briefcaseというツールが一番近くて、ビルド・署名・インストーラー生成まではカバーしています。ただBeeWare/Togaというフレームワーク向けに最適化されていて、PyInstallerで作ったCLIツールへの適用は設計意図が違う。
他にpup(Mu Editor向け)、winsign(Mozillaのコード署名専用ツール)なども見ましたが、どれかひとつで「AV誤検知まで含めて解決できる」というものはなかった。特に「AVベンダー申請」のステップだけ、どのツールでも手動のままになっています。
こういうツール、誰かが作っていそうなんですが、まだないんですね。需要はあると思うんですが。
調べてわかったこと、今のスタンス
| 手段 | 状態 | 今の判断 |
|---|---|---|
| Inno Setup インストーラー化 | 実施中(0/66維持) | 継続 |
| コード署名(有料OV) | 調べた・未実施 | 今は見送り |
| コード署名(SignPath無料) | 調べた・未実施 | 開発者名非表示が引っかかる |
| AVベンダー手動申請 | 調べた・未実施 | 誤検知復活時に検討 |
| bootloader自前ビルド | 調べた・未実施 | 環境コストで見送り |
| Nuitka移行 | 調べた・未実施 | ビルド管理コストで見送り |
| Microsoft Store | 調べた・未実施 | 運用スタイルと合わない |
| 統合CLIツール | 探した・不在を確認 | 代替なし |
今はInno Setupで凌いでいます。次のリリースで検知が戻ってきたときにどうするか、というのは引き続き悩み中です。
「完全に解決できる手段はない」「各手段に固有のトレードオフがある」というのが、調べてみてわかったことです。個人開発者がどこで折り合いをつけるかは、ツールの規模とユーザー数によって変わりそう。今の自分にはInno SetupとZIP両方置いておく形がまだ現実的かなと思っています。
参考
- EV証明書のSmartScreen変更: https://learn.microsoft.com/en-us/windows/apps/package-and-deploy/code-signing-options
- Microsoft Store 個人開発者向け新フロー: https://learn.microsoft.com/en-us/windows/apps/publish/whats-new-individual-developer
- SignPath(OSSコード署名): https://signpath.io
- Briefcase(BeeWare/Toga向けパッケージングツール): https://briefcase.readthedocs.io
- AVベンダー申請の実例(Code4Lib 2024): https://journal.code4lib.org/articles/18136