🍣
Qt6 の CI をもっとシンプルに。Docker ベースの Qt6 CMake CI Action を公開しました
Qt6 を GitHub Actions 上でビルドしようとすると、思った以上に手間がかかります。
- Qt6 の依存関係が複雑
- バージョンごとに必要なセットアップが変わる
- CMake + Ninja の環境構築が安定しない
- ローカルと CI の環境差でビルドが再現しない
「Qt6 の CI をもっと簡単にしたい」
そんな思いから、Docker ベースの Qt6 CMake CI Action を作りました。
🔗 GitHub Marketplace
なぜ Docker ベースにしたのか
Qt6 の CI を安定させるうえで、最大の問題は 環境差 でした。
- runner の OS によって依存関係が違う
- Qt6 の挙動がバージョンごとに微妙に異なる
- aqtinstall の動作も OS で差が出る
これらを吸収しようとすると、Action 側の複雑さがどんどん増えていきます。
そこで発想を変えて、
「CI の実行環境を Docker で完全に固定する」
というアプローチに切り替えました。
結果として、
- どの runner(Ubuntu / Windows / macOS)でも
- 同じ Ubuntu ベースの Docker コンテナ内で Qt6 をビルド
- 依存関係の差異がゼロ
- 再現性が非常に高い
という、Qt6 CI に最適な環境が実現できました。
この Action が解決すること
この Action は、Qt6 のビルドに必要な作業をすべて自動化します。
- Qt6 のインストール(aqtinstall 使用)
- CMake + Ninja のセットアップ
- Ubuntu ベースの Docker コンテナ内でのビルド
- Windows / macOS runner でも Linux Qt6 をビルド可能
- Qt6 のバージョン差異を吸収
Qt のバージョンを指定するだけで Qt6 プロジェクトをビルドできるようになります。
Quick Start
最小構成の workflow はこれだけです。
- uses: acc-vcc/qt6-cmake-ci-action@v1
with:
qt-version: "6.6.1"
Qt6 core / GUI / QML はすべて自動でインストールされるため、
modules の指定は不要です。
実用的な workflow 例
name: Build Qt6 Project
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Qt6 and build
uses: acc-vcc/qt6-cmake-ci-action@v1
with:
qt-version: "6.6.1"
# modules: "qtimageformats qtshadertools" # Add-on が必要な場合のみ指定
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: build
path: build/
Inputs
| 名前 | 必須 | 説明 |
|---|---|---|
| qt-version | はい | インストールする Qt6 のバージョン(例: 6.6.1) |
| source-dir | いいえ | CMakeLists.txt のあるディレクトリ(省略時はリポジトリトップを指定) |
| modules | いいえ | Qt6 Add-on モジュール(必要な場合のみ指定) |
modules の扱いについて
Docker 版では Qt6 の基本モジュール(Core / GUI / QML / Widgets / Quick)は
すべて自動でインストールされます。
そのため、modules の指定は Qt6 Add-on モジュールを追加したい場合のみ必要です。
例:
modules: "qtimageformats qtshadertools"
不要であれば省略できます。
対応環境
- GitHub-hosted runners
- Ubuntu
- Windows
- macOS
- ただしビルドは Docker 内の Linux Qt6 で統一
- CMake / Ninja は Docker イメージにプリインストール済み
まとめ
- Qt6 の CI は複雑だが、この Action で大幅に簡略化できる
- どの runner でも Linux Qt6 をビルド可能
- Qt6 のバージョン指定だけでセットアップ完了
- Docker により再現性の高い CI を実現
Qt6 プロジェクトを GitHub Actions でビルドしている方は、ぜひ試してみてください。
おまけ:今後の展望
- Windows / macOS Qt6 のビルド対応
- GUI テスト(noVNC / Xvfb)との連携
- キャッシュ対応による高速化
- Qt Installer Framework の自動ビルド
Qt6 の CI をもっと便利にするため、今後も改善を続けていきます。
Qiita にも関連する記事があります:
Discussion