概要
以前、PyInstallerで作ったexeがウイルス扱いされる件 について投稿したギアチョです。
あの後、「Inno Setupでインストーラー化すれば回避できる!」という結論には達したんですが、新たな悩みが生まれました。
「修正するたびに手動でビルドするの、面倒くさくない…?」
コード直す ➡ PyInstaller叩く ➡ Inno Setup叩く ➡ 配布用サーバーに置く…
この不毛な時間を消し去るために、GitHub Actions を導入して完全自動化してみました。
これが現代のDevOpsか…!と感動したので、備忘録として残します。
結論!GitHub Actions
GitHubにコードをPushするだけで、勝手にクラウド上でビルドが走って、完成品のexe(インストーラー)が生成されるようになりました。
まさに魔法。![]()
リポジトリはこちらです👇
https://github.com/skibidikids/Marge
背景:レガシー現場の憂鬱
RPA(WinActor)を補完するためにPythonで画像結合ツール(Marge PDF)を作ったんですが、現場への配布がとにかく大変。
- ウイルス対策ソフトの壁: そのままexeにするとApexOneに消される。
- 配布の手間: バグ修正のたびに自分のPCでビルド作業が発生。
1については、前回紹介した 「Inno Setup」 で解決済み。
今回は2の「手動ビルド」を 「CI/CD(継続的インテグレーション/デリバリー)」 で解決しちゃいます。
実装したフロー
やりたいことはこれです。
やったこと:YAMLファイルを書く
GitHubのリポジトリに .github/workflows/build.yml というファイルを追加するだけ。
中身はこんな感じです。
name: Build Marge Exe
on:
push:
branches: [ "main" ] # mainブランチが更新されたら動く
jobs:
build:
runs-on: windows-latest # Windows環境を借りる
steps:
# 1. コードを持ってくる
- uses: actions/checkout@v4
# 2. Python環境構築
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
# 3. ライブラリを入れる
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
if (Test-Path requirements.txt) { pip install -r requirements.txt }
# 4. Exe化する(ここがキモ!)
- name: Build with PyInstaller
run: pyinstaller Marge_PDF.py --onefile --noconsole --name "MargeTool"
# 5. 生成物をアップロードする
- name: Upload Exe
uses: actions/upload-artifact@v4
with:
name: MargeTool-exe
path: dist/*.exe
結果:勝手に出来上がってる!
コードをPushして、GitHubの「Actions」タブを見ると…
✅ Build Marge Exe
と緑色のチェックマークが!
そして詳細画面の「Artifacts」から、出来立てホヤホヤの .exe がダウンロードできました。
自分のPC環境を汚さずにビルドできるし、何より 「エンジニアっぽいことしてる!」 感がすごいです。
最後に:次はクラウドへ
これまでは「自分のPC」の中だけで完結していましたが、GitHub Actionsを使ったことで「クラウド上で動かす」ことの便利さを知ってしまいました。
次はAWS(Lambdaとか?)を使って、サーバーレスな自動化にも挑戦してみたいと思います。
「ここ、もっとこう書けるよ!」みたいなのがあれば、ぜひプルリクやコメントお待ちしてます!
リンク
- GitHubリポジトリ: skibidikids/Marge
- 前回の記事: PyInstallerで.exe化したファイルがウイルス検知される!?