🍣

Qt6 の CI をもっとシンプルに。Docker ベースの Qt6 CMake CI Action を公開しました

に公開

Qt6 を GitHub Actions 上でビルドしようとすると、思った以上に手間がかかります。

  • Qt6 の依存関係が複雑
  • バージョンごとに必要なセットアップが変わる
  • CMake + Ninja の環境構築が安定しない
  • ローカルと CI の環境差でビルドが再現しない

「Qt6 の CI をもっと簡単にしたい」
そんな思いから、Docker ベースの Qt6 CMake CI Action を作りました。

🔗 GitHub Marketplace
https://github.com/marketplace/actions/qt6-cmake-ci-action


なぜ 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 にも関連する記事があります:
https://qiita.com/acc-vcc/items/60ea2467ca4754218fc3

Discussion