1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

組込み開発でもCI導入!GitHub+AVHで体験するCortex-Mのビルド・テスト自動化

1
Last updated at Posted at 2025-11-20

1. はじめに

組込み開発でCIを導入したいと思っても、「設定が難しそう」「何から始めればいいの?」と感じる方は多いはず。実は、Armが提供するCIテンプレートプロジェクトを使えば、ほぼ設定なしでGitHub Actions+AVHによるビルド&テスト自動化を体験できます。

本記事では、Cortex-M向けのCIテンプレートをクローンして、GitHub Actionsで実際に動かす手順を紹介します。「組込み開発でもCIできる!」を最短ルートで試せる内容になっていますので、ぜひ触ってみてください。

ローカル環境でのビルド&デバッグについては、以下の記事を参照ください。

2. 今回の目標

本記事の目標は、CIが導入されたCortex-Mプロジェクトを使用し、ビルドとテストを自動実行することです。具体的には、以下のことができる状態を目指します。

  • GitHubにコードをPushすると、自動でビルドが実行される
  • Arm Virtual Hardware(AVH)上でテストが自動実行される
  • 実行結果をGitHub Actionsのログで確認できる

この仕組みにより、手動でビルドやテストを行う手間を削減し、コードの品質を継続的に担保できます。「組込み開発でもCIできる!」を実感できる構成を紹介します。

3. 前提条件

本記事では、以下の環境と準備を前提とします。

使用するソフトウェア

  • Visual Studio Code
  • Git

必要なアカウント

  • GitHubアカウント
    → 無料プランでOK。GitHub Actionsが利用可能です。

動作環境

  • OSは Windows / Linux / macOS いずれでもOK
    → 本記事の手順はOS依存しません(VSCodeとGitHub Actionsで完結)。

4. CI構成の概要

今回のCI構成は、GitHub ActionsとArm Virtual Hardware(AVH)を組み合わせて、Cortex-Mプロジェクトのビルドとテストを自動で実行する仕組みです。ここでは、全体像をイメージしやすいように構成要素と流れを整理します。

構成要素

  • GitHub Actions
    → GitHubが提供するCI/CDサービス。リポジトリにPushすると、定義したワークフロー(YAMLファイル)に従ってビルドやテストを実行します。
  • Arm Virtual Hardware(AVH)
    → Armが提供する仮想ハードウェア環境。実機を用意せずに、テストを自動で実行できます。
  • CIテンプレートプロジェクト
    → Arm公式のGitHubリポジトリ。ビルド&テストの設定があらかじめ組み込まれているため、ほぼ設定なしでCIを体験できます。

処理の流れ

  • コードをGitHubにPush
    → GitHub Actionsがトリガーされる。
  • ビルドジョブの実行
    → Cortex-Mプロジェクトをビルド。
  • テストジョブの実行
    → AVH上でテストを実行し、結果を取得。
  • 結果の確認
    → GitHub Actionsのログでビルド&テスト結果を確認。

全体イメージ(図解イメージ)

この構成により、「コードをPushするだけでビルドとテストが自動で実行される」というCIの基本を、組込み開発でも簡単に体験できます。

5. 手順

5.1 リポジトリの作成

本記事ではGitHubのテンプレートから新たなリポジトリを作成して使用します。以下のページを開き、画面右上にある「Use this template」から「Create a new repository」を選択して作成します。ここでは、以下の設定でリポジトリを作成します。

項目 設定
General: Repository name AVH_CI_Test
Configuration: Choose visibility Private

リポジトリが作成されると、初回のビルド&テストが実行されて「Run failed」のメールが早々に2通届きます。この件の修正は後ほど行います。

5.2 リポジトリのクローン

今回はVSCodeからリポジトリのクローンを行います。VSCode画面左側のサイドバーで「ソース管理」を表示し、「変更」右側の三点リーダ(…)から「クローン」を選択します。画面上部に出る「GitHubから複製」をクリックするとGitHubアカウントで保有しているリポジトリが表示されますので、先ほど作成した「AVH_CI_Test」を選択してください。複製先は「C:\GIT」などを適宜選択してください。

本節の作業ではVSCodeからGitHubへのログインが要求されます。表示に従ってログインを行ってください。

AVH_CI_TemplateのクローンをVSCodeから開くと、環境によっては画面下部の「⚙️avh」が赤表示になります。この場合は、vcpkg-configuration.jsonを以下のように修正すると問題が解消されます。

vcpkg-configuration.json
  "requires": {
-   "arm:tools/open-cmsis-pack/cmsis-toolbox": "2.4.0",
+   "arm:tools/open-cmsis-pack/cmsis-toolbox": "2.12.0",
    "arm:tools/kitware/cmake": "^3.31.5",
    "arm:tools/ninja-build/ninja": "1.12.0",
    "arm:compilers/arm/armclang": "6.22.0",
    "arm:compilers/arm/arm-none-eabi-gcc": "^13.2.1",
    "arm:models/arm/avh-fvp": "^11.22.39",
    "arm:debuggers/arm/armdbg": "6.1.2"
  }

5.3 basic.ymlの修正

初回のビルド&テストでのエラーを解消するために、エラーの要因を確認します。届いた2通のメールのうち「Compile and Run」と書いてあるほうを開いて、画面中ほどにある「View workflow run」をクリックしてください。表示されたSummary画面のAnnotationsには以下の項目が3つほど並んでいると思います。

CI_test_run
repository 'https://github.com/ユーザ名/AVH_CI_Test/' not found

設定ファイルを確認すると、リポジトリを参照する権限が足りていないようです。以下のように行を追加します。

.github\workflows\basic.yml
  permissions: 
+   contents: read
    actions: read
    security-events: write

変更を保存したら、コミット&プッシュしてエラーが解消するか確認します。サイドバーの「ソース管理」を開き、basic.ymlの右側に出る「+」アイコンをクリックして変更をステージします。この状態で「コミット」をクリックするとコミットメッセージの入力ウィンドウが出るので、適宜入力してください。「#」で始まるコメント行は無視されます。

コミットを行うためには、Gitの「user.name」と「user.email」の設定が必要です。未設定の場合は以下のコマンドで設定してください。

git config --global user.name "ユーザ名"
git config --global user.email "メールアドレス"
.git\COMMIT_EDITMSG
  # Please enter the commit message for your changes. Lines starting
  # with '#' will be ignored, and an empty message aborts the commit.
  #
  # On branch main
  # Your branch is up to date with 'origin/main'.
  #
  # Changes to be committed:
  #   modified:   .github/workflows/basic.yml
  #
+ basic.yml"permissions:""contents: read"を追加

変更を保存したら、入力ウィンドウは閉じてください。続いて「変更の同期」をクリックすると、変更内容がGitHubにプッシュされます。

5.4 main.cの修正

前節でのプッシュ後は、再度「Run failed」のメールが2通届きます。「Compile and Run」と書いてあるほうからリンクを開いてください。リポジトリが見つからないエラーについては解消されていると思います。次は以下のエラーについて確認します。

Unity ► /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c ► test_my_sum_fail: Project.avh.xml#L0
Failed test found in: Project.avh.xml Error: Test failed in /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c at line 74: Expected 2 Was 0

この情報からでもコード修正はできますが、もう少し詳しく見ることにします。画面左側にあるJobsから「CI_test_run」をクリックしてください。表示された内容は、main.cの74行目、test_my_sum_fail関数内でテストがFailしたことを示しています。

  ---[ UNITY BEGIN ]---
  /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:87:test_my_sum_pos:PASS
  /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:88:test_my_sum_neg:PASS
- /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:74:test_my_sum_fail:FAIL: Expected 2 Was 0
  /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:90:test_my_sum_zero:PASS

  -----------------------
  4 Tests 1 Failures 0 Ignored 
  FAIL
  ---[ UNITY END ]---

こちらの関数は、あえてFailが発生するように仕込んであります。今回は以下のように修正してエラーを解消します。

Project\main.c
  /* Failing test with incorrect summation value */
  static void test_my_sum_fail(void) {
    const int sum = my_sum(1, -1);
-   TEST_ASSERT_EQUAL_INT(2, sum);
+   TEST_ASSERT_NOT_EQUAL(2, sum);
  }

変更を保存したら、再度コミット&プッシュしてください。

.git\COMMIT_EDITMSG
+ main.c"test_my_sum_fail"関数を修正

6. 動作確認

すべてのエラーが解消されている場合は、メールが送信されません。ここでは、GitHubのページからビルド&テストが正常終了したことを確認します。「AVH_CI_Test」リポジトリの「Actions」ページを開いてください。以下のような項目が2つ並んでいるのが確認できると思います。

main.cの"test_my_sum_fail"関数を修正
Compile and Run #3: Commit ハッシュ値 pushed by ユーザ名

2つ並んだ項目のうち、「Compile and Run」と書いてあるほうのタイトルをクリックしてください。画面左側にあるJobsから「CI_test_run」をクリックして表示された画面から「Excute」を展開すると、テストが正常に完了したことを確認することができます。

  ---[ UNITY BEGIN ]---
  /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:87:test_my_sum_pos:PASS
  /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:88:test_my_sum_neg:PASS
  /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:89:test_my_sum_fail:PASS
  /home/runner/work/AVH_CI_Test/AVH_CI_Test/Project/main.c:90:test_my_sum_zero:PASS

  -----------------------
  4 Tests 0 Failures 0 Ignored 
  OK
  ---[ UNITY END ]---

7. まとめ

CI(継続的インテグレーション)を導入することで、以下の効果が得られます。

  • 品質向上:コード変更の自動ビルド・テストにより、早期に不具合を検出できる
  • 開発効率の向上:手動ビルドやテストの負担が減ることで、開発作業に集中できる
  • チーム連携の強化:ビルド・テスト環境の統一により、メンバ間の環境差異を解消

次のステップとしては、以下の拡張が考えられます。

  • CD(継続的デリバリー/デプロイ)への発展
    ビルド後の成果物を自動配布・デプロイする仕組み追加、リリースサイクルを短縮
  • ハードウェア実機テストへの統合
    AVHシミュレーションに加え実機を用いたテストを自動化、より現実的な検証実施

8. 参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?