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)と、次のことが自動で起きます。
- Windows(
windows-latest)とMac(macos-latest、Apple Silicon)の両OSで、それぞれ自動で動く - C言語の部品を組み立てる(Windowsは
.dll、Macは.dylib) - 組み立てた部品を実際に開いて、関数を呼んで答えを確かめる(用意したテストを実行する)
確かめるのは、組み立て・読み込み・自分で用意したテストまでです。アプリ全体が正しく動くことを保証するものではありません。
それでも「ビルドが通った」だけで終わらせず、読み込んで呼ぶところまで確かめるのがポイントです。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に足す
.github/workflows/ci.ymlとscripts/failure_report.pyを自分のリポジトリへコピーする- 自分の
CMakeLists.txtに、共有ライブラリとadd_test(読み込みテスト)を足す。見本のCMakeLists.txtとtests/load_test.cを真似る - 外へ見せる関数に、Windows用の
WINMAC_API(src/winmac_demo.h)を付ける - 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でも動く形で直してください。
これはわざと壊した実行で出た報告の抜粋です。流れは次のとおりです。
- 失敗した実行を開き、赤くなったOSのジョブのSummaryを見る
- 報告文をコピーして、CodexやClaude Codeに渡す
- 直させてpushする
- 両OSが緑になるまで繰り返す
報告文には、落ちたOS・落ちた手順・ログの要点が入っています。人がログを探して説明し直す手間が省けます。
CMake以外の場合
Makefileなど、CMake以外で組み立てているSDKでも使えます。ci.ymlの「組み立て」「読み込みテスト」の2手順を、自分のコマンドに差し替えます。ただし次の4つを守らないと、失敗しても報告が空になります。
- ログを
build.log(組み立て)とtest.log(テスト)に保存する(2>&1 | tee build.log) - 手順に
id: buildとid: testを残す。報告はこのidで、落ちた手順を判定する - 失敗したら非ゼロで終了する。テストが0件のときも落とす
- 必要な道具(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を実行先にする構成(セルフホストランナー)が別に要ります。
関連記事
PCとiPhoneで画像・ファイルを共有する方法
PCとiPhoneのどちらからも画像・ファイル・メモを共有できる自作ツールを紹介。画像をAIの作業へ渡し、ブログの素材、画像加工、エラー画面の確認に使う流れをまとめます。
Claude Codeのカスタムコマンドの作り方
Claude Codeで繰り返す操作を、短いコマンドで呼び出すための作り方を紹介。登録と実行の流れを説明し、依頼一覧と設計書を表示する自作コマンドを例に使い方をまとめます。
iPhoneから自宅PCのターミナルを使う方法
TermiusとTailscaleを使い、iPhoneから自宅PCのターミナルへ接続する構成を紹介。外出先でClaude Code・Codexを使い、作業を続ける方法と、接続時の注意点をまとめます。