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?

GitHub Actions 上で PlatformIO を素早くセットアップしてビルドチェックする

Last updated at Posted at 2025-12-23

きっかけ

個人開発にて、PlatformIO1 でマイコンボード NUCLEO-F303K8 のプログラムを開発していたとき・・・

「そういや PlatformIO は CLI で使えるな。てことは CI でビルドチェックができる」

「ユニットテストの仕組みもあったな。これも CI で常にチェックできるぞ」

CI 色々動いていると、なんかカッコイイし「コードに問題ありません (キリッ」ってドヤれる。いいぞ。

以上、きっかけでした。

・・・もうちょっとだけ真面目な話をすると、以前までは、組み込み開発は実機動作でテストするしか術を知らなかったわけです。そこに PlatformIO のユニットテスト機能を知って、CLI で制御できることも知って、さらに CI 構築にハマっていた当時の自分がありました。「これは Actions でやってみるしかない!」となって、この話につながります。

実は本件をやったのは数ヶ月昔のこと。アドベントカレンダーの季節を迎えたこともあって、年の瀬だしこの辺の記憶を記事に起こしておこうかな?なんて思い、本記事執筆に至りました。

公式ドキュメントに答えアリ

ご丁寧にサンプルワークフローが公式に。

name: PlatformIO CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - uses: actions/cache@v4
        with:
          path: |
            ~/.cache/pip
            ~/.platformio/.cache
          key: ${{ runner.os }}-pio
      - uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: Install PlatformIO Core
        run: pip install --upgrade platformio

      - name: Build PlatformIO Project
        run: pio run

PlatformIO の CLI pio (厳密には VSCode 拡張よりこっちが本体) を使えるようにして、pio run でビルドを実行、という具合のワークフローです。PlatformIO CLI は Python で書かれているので、先に Python のセットアップをしています。

そこに加えて、Python と PlatformIO のダウンロードキャッシュを保存・復元しています。ダウンロードの速度は不安定になりがちで、その上 PlatformIO パッケージはそこそこ容量があるので、ここをキャッシュすることで所用時間を短縮できます。

もうちょっと早くしてみる

先のワークフローでは、ダウンロード済みパッケージを unpack する工程が生じます。その工程もちょっぴり時間がかかります。そこで、unpack 済みファイルごとキャッシュしてしまうことで、unpack 工程までカットできます。

ホームディレクトリ上の .platformio/ に、ダウンロードキャッシュに加えて展開後のパッケージなども保存されます。これを丸々キャッシュしてしまえば OK。

      - uses: actions/cache@v4
        with:
          path: |
            ~/.cache/pip
-           ~/.platformio/.cache
+           ~/.platformio/
          key: ${{ runner.os }}-pio

ただし、展開済みパッケージを使い回していると、最新バージョンのチェック (取得) がされないままになってしまいます。バージョンも気を遣いたい場合は工夫が要ります。

実験

キャッシュ無し、ダウンロードキャッシュ保存、unpack ファイル保存の 3通り、それぞれの所要時間を調べてみます。

  • 計測対象は、キャッシュリストア、PlatformIO インストール、ビルドの所要時間
  • 5回 Re-run した平均値を結果とする
  • 初回の実行はキャッシュヒットしないためノーカウント
  • 行うタスクはビルド (ユニットテストではない)
    • ソースは int main()while(1)return 0; のみでほぼ空
    • 実質 NUCLEO-F303K8 の HAL ライブラリのビルドだけ
    • それ以外の設定などはデフォルト値のまま

ソース、および実験場所はこちら:

結果:

キャッシュ無し ダウンロードキャッシュ unpack キャッシュ
1 37 22 17
2 38 28 18
3 34 22 15
4 39 24 18
5 35 24 15
平均 36.6 24.0 16.6

ダウンロードキャッシュで 12秒、unpack キャッシュでさらに 8秒短縮、というような具合でした。

感想

2025年も終わろうとしているところで、今年やった PlatformIO + GitHub Actions についての知見を、無事年内に書き起こすことができました。

実のところ、例の個人開発をしていた時点では実験をしていなくて、実際どれくらい時間短縮になっているのかは知らないままでした。本記事きかっけで、具体的に数字で見ることができました。

  1. PlatformIO: VSCode で組み込み開発を色々可能にする超優秀な OSS

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?