Qt Qml コンパイラ
Qt Qml コンパイラモジュールには、Qt Quick コンパイラやqmllintといったQMLツール群に必要な共通機能が含まれています。また、これらのツールの組み込み分析機能を拡張するために使用できるQQmlSA フレームワークも提供しています。
モジュールの使用方法
QtモジュールのC++ APIを使用するには、モジュールライブラリに対して、直接または他の依存関係を通じてリンクを行う必要があります。CMakeやqmakeなど、いくつかのビルドツールでは、このための専用のサポートが用意されています。
CMake を使用したビルド
find_package() コマンドを使用して、Qt6 パッケージ内の必要なモジュールコンポーネントを特定します。
find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)詳細については、「CMake を使用したビルド」の概要を参照してください。
qmake を使用したビルド
qmake を使用してモジュールをビルドするように設定するには、プロジェクトの .pro ファイル内で、QT 変数の値としてモジュールを追加します:
QT += QmlCompilerQQmlSA フレームワークの使用
Qt Qml コンパイラモジュールは、QMLコードの静的解析ツールを提供するQQmlSA フレームワークを提供します。これらのツールは、構文の妥当性を確保し、QMLのアンチパターンについて警告するのに役立ちます。
QMLプログラムに静的解析を追加するには、プラグインを作成します。プラグインは、QMLコードの要素やプロパティに対して一連の解析パスを実行します。これらのパスは、PassManagerに登録できます。PassManagerはパスを保持しており、要素やその子要素を解析するために呼び出すことができます。 パスとは、要素やプロパティに対して評価される特定のルールや条件に対するチェックのことです。条件が満たされた場合、パスはコード内で特定された問題についてユーザーに警告し、場合によっては修正案を提案することもあります。要素やプロパティに対する解析は、一連のパスを順次実行することで行われるため、「パス」と呼ばれています。 各パスは、1つの特定の問題のみを特定する役割を担うべきです。一連のパスを組み合わせることで、より複雑な分析を実行でき、それらが一体となってプラグインを構成します。要素パスは、shouldRun() およびrun() という2つの主要なコンポーネントによって定義されます。分析を実行する際、パスマネージャはルート要素の子要素を走査する過程で遭遇するすべての要素に対して、そのパスを実行します。 各要素について、その要素でshouldRun() を評価した結果がtrue を返す場合、run() が実行されます。
プロパティに対するパスは、プロパティがバインドされたとき、読み取られたとき、書き込まれたときの3つの異なるイベントでトリガーされます。これらは、それぞれonBinding() 、onRead() 、onWrite() 関数をオーバーライドすることで実装できます。
コードが拡大するにつれて、要素やプロパティの数も増加します。これらすべてに対して静的解析パスを実行すると、計算コストが高くなる可能性があります。そのため、どの要素やプロパティを解析するかを決定する際には、きめ細かく検討することが重要です。要素に関しては、shouldRun() は、実際の計算を行うrun() を実行すべきかどうかを判断するための、計算コストの低いチェックとして設計されています。 プロパティについては、マネージャーへのパスの登録時に選択が行われます。registerPropertyPass() 関数は、引数としてmoduleName 、typeName 、propertyName という文字列を受け取ります。これらは、登録されたパスの影響を受けるプロパティのセットを絞り込むために使用されます。
例
「QML静的解析チュートリアル」では、QQmlSA フレームワークを使用してカスタムqmllintパスを作成する方法を解説しています。
リファレンス
- Qt Qml Compiler C++ Classes - QmlCompiler モジュールが提供する C++ API
- 静的解析機能を利用した QML ツール
ライセンス
Qt Qml 本コンパイラは、The Qt Company から商用ライセンスの下で提供されています。また、Qt GPL 例外 1.0 を付加したGNU General Public License バージョン 3の下でも利用可能です。詳細については、「Qt ライセンス」を参照してください。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.