導入・使い方

Windows・Mac両方のビルドと読み込みを自動確認するテンプレート

左のWindowsかMacから変更を送ると、中央のGitHub Actionsを通って、右でWindowsとMacの両方に緑のチェックが付く図

WindowsとMacの両方で動くSDKやライブラリ(Windowsの.dll、Macの.dylib)は、片方を直したら、もう片方でも動くか確かめる必要があります。ところが手元で確かめやすいのは、今使っているPCのOSだけです。

そこで、GitHubに変更を送るたびに、WindowsとMacの両方で組み立てと読み込みテストを自動で行う型を作りました。開発するPCはWindowsでもMacでもかまいません。両方のPCをそろえなくても確かめられます。

失敗したら、出てきた報告文をAIに渡して直させ、もう一度両OSで確かめる。この流れまで含めて紹介します。

テンプレートは公開リポジトリ SK-Forge/winmac-native-check にあります。

何をするテンプレートか

GitHubに変更を送る(push)と、次のことが自動で起きます。

  1. Windows(windows-latest)とMac(macos-latest、Apple Silicon)の両OSで、それぞれ自動で動く
  2. C言語の部品を組み立てる(Windowsは.dll、Macは.dylib)
  3. 組み立てた部品を実際に開いて、関数を呼んで答えを確かめる(用意したテストを実行する)

確かめるのは、組み立て・読み込み・自分で用意したテストまでです。アプリ全体が正しく動くことを保証するものではありません。

それでも「ビルドが通った」だけで終わらせず、読み込んで呼ぶところまで確かめるのがポイントです。Windowsだけ「関数が見つからない」となる原因の多くは、外から見せる指定(__declspec(dllexport))の付け忘れで、組み立てだけでは気づけません。

テストが0件のときは赤になります(ctest --no-tests=error)。何も確かめていないのに緑になるのを防ぐためです。

使い方は2通り

新しく作る

リポジトリ右上の Use this template を押すと、自分のリポジトリができます。src/を自分の部品に置き換えてpushします。

置き換えるときは、CMakeLists.txtのadd_library(... src/xxx.c)のファイル指定と、tests/load_test.cが呼ぶ関数名(winmac_addなど)も自分のものに変えます。

今あるSDKに足す

  1. .github/workflows/ci.ymlとscripts/failure_report.pyを自分のリポジトリへコピーする
  2. 自分のCMakeLists.txtに、共有ライブラリとadd_test(読み込みテスト)を足す。見本のCMakeLists.txtとtests/load_test.cを真似る
  3. 外へ見せる関数に、Windows用のWINMAC_API(src/winmac_demo.h)を付ける
  4. pushして、ActionsタブでWindowsとMacの両方が緑になるのを見る

このテンプレート専用のアプリは要りません。確認が動くのは自分のリポジトリのGitHub Actionsです。開発そのものや手元での確認に使う道具(コンパイラやエディタなど)は、これまでどおり別に用意します。

失敗したとき

失敗すると、失敗したOSのジョブのSummaryに「CI失敗の報告」が出ます。成功した方のOSには、何を確かめたかの成功の記録が残ります。

【CI失敗の報告】Windows(X64)の確認で落ちました。
落ちた手順: 読み込みテスト
ログの要点:
    CALL_FAIL: winmac_add(2,3) = -1(期待 5)
    1 - load_test (Failed)

お願い: 上のログを読んで原因を直してください。
Windows 側だけの問題かもしれないので、
もう片方のOSでも動く形で直してください。

これはわざと壊した実行で出た報告の抜粋です。流れは次のとおりです。

  1. 失敗した実行を開き、赤くなったOSのジョブのSummaryを見る
  2. 報告文をコピーして、CodexやClaude Codeに渡す
  3. 直させてpushする
  4. 両OSが緑になるまで繰り返す

報告文には、落ちたOS・落ちた手順・ログの要点が入っています。人がログを探して説明し直す手間が省けます。

CMake以外の場合

Makefileなど、CMake以外で組み立てているSDKでも使えます。ci.ymlの「組み立て」「読み込みテスト」の2手順を、自分のコマンドに差し替えます。ただし次の4つを守らないと、失敗しても報告が空になります。

  1. ログをbuild.log(組み立て)とtest.log(テスト)に保存する(2>&1 | tee build.log)
  2. 手順にid: buildとid: testを残す。報告はこのidで、落ちた手順を判定する
  3. 失敗したら非ゼロで終了する。テストが0件のときも落とす
  4. 必要な道具(Pythonなど)の準備手順を足す

Makefile+pytestの場合の例です。Pythonの準備とpytestのインストールも含めています。

      - uses: actions/setup-python@v5
        with: { python-version: "3.12" }

      - name: テスト道具を入れる
        run: python -m pip install pytest

      - name: 組み立て
        id: build
        run: make all 2>&1 | tee build.log

      - name: 読み込みテスト
        id: test
        run: |
          python -m pytest -q 2>&1 | tee test.log

requirements.txtがあるなら、pip install pytestの代わりにpython -m pip install -r requirements.txtにします。pytestはテストが0件だと終了コード5で落ちるので、0件チェックはそのままで足ります。別のテスト道具なら、自分で足します。

Intel Macと料金

  • Intel Mac: 標準ではApple Siliconだけです。必要ならos:にmacos-15-intelを足します。ラベルは変わるので、GitHub公式の一覧で確かめてください
  • 公開リポジトリ: GitHub標準の実行環境なら無料です
  • 非公開リポジトリ: プランの無料枠と使った量しだいです。条件は変わることがあるので、GitHub公式の料金ページで確かめてください。頻繁にpushするなら、pull_requestとmainだけに絞ると使う量を抑えられます

できないこと

USB機器・カメラ・専用ドライバが要るテストは、GitHub標準の実行環境ではできません。自分の機器をつなげないためです。標準の環境で確かめるのは、機器なしで済む範囲(組み立て・読み込み・純粋な計算)までです。

機器を使うテストも自動にしたいなら、機器をつないだ自分のPCを実行先にする構成(セルフホストランナー)を別に用意します。

確かめたこと

作ったあと、次のことを確かめました。

  • Windows(手元)とMac(GitHubのmacOS環境)で、組み立て・読み込みテストとも通過
  • テストが0件のときに、緑ではなく赤になる
  • わざとコードを壊す → 失敗したOSのSummaryに報告文が出る → 直す → 両OSが緑になる
  • 成功したときも、Summaryに確かめた内容(組み立て・テスト件数)の記録が出る

手元のMacでは試していませんが、GitHubのmacOS環境で動くことは確認済みです。

こんな人に向く

  • WindowsでSDKやライブラリを作っていて、Macでも動くか確かめたい人
  • Macで開発していて、Windowsでも動くか確かめたい人
  • WindowsとMacの両方でAIに作業させていて、片方の直しがもう片方に響くのが不安な人

作るのに時間をかけたくないときは

詰まりどころを1つずつ潰していく時間は、どうしてもかかります。実際に作って動かしているものは、そのまま使える形に整えています。 新しく出したときと、記事にしていない小さな回避策は公式LINEで先に流しています。今あるものはAIクラフトに置いてあります。

よくある質問

WindowsでもMacでも使えますか?

使えます。どちらのPCで変更しても、GitHubに送れば両OSで同じ確認が自動で動きます。手元にもう片方のPCがなくても確かめられます。

料金はかかりますか?

公開リポジトリでGitHub標準の実行環境を使うなら無料です。非公開リポジトリは、プランの無料枠と使った量しだいです。最新の条件はGitHub公式の料金ページで確かめてください。

Intel Macの確認もできますか?

標準ではApple Silicon(M1以降)だけです。必要なら ci.yml の os に macos-15-intel を足します。

USB機器やカメラを使うテストもできますか?

GitHub標準の実行環境には、自分の機器はつなげません。機器を使うテストまで自動にするなら、機器をつないだ自分のPCを実行先にする構成(セルフホストランナー)が別に要ります。

SK Forgeのプロフィール画像
この記事を書いた人: SK Forge

AI開発にのめり込んでいる個人開発者です。ブログの全自動運営をはじめ、作業をAIに任せて時短する仕組みを作り、浮いた時間を副業に回しています。その開発記録や悪戦苦闘したところを、このブログとXでそのまま公開中。完成したツールやアプリは、AIツール専門のマーケット「AIクラフト」で販売しています。

関連記事