Qt 6への移行:Felgoの学びと今が移行すべき時である理由

この記事は、Qtのオフィシャルテクノロジー&サービスパートナーであるFELGOによるゲストブログ記事です。

Felgoは、長年にわたりQtエコシステムに積極的に参加し、Qt開発者の日々の作業をサポートする専門的な製品を開発しています。これには、クロスプラットフォーム開発を簡素化する200以上のコンポーネントを持つFelgo SDKや、QML Hot ReloadやFelgo Cloud Buildsなどのツールがあります。Qt 4をベースにしたFelgoの最初のリリース以来、チームはQtの新しいバージョンに常に目を配り、最新の変更を取り入れ、Felgo製品とFelgoユーザーに新しい進歩をもたらしてきました。

Felgo-qt6

Felgoとその製品の性質上、チームは新しいQtリリースの評価と取り込みに精通しています。しかし、Qt 4からQt 5、そして今回のQt 6への移行のような大きなバージョンアップには、特別な注意を必要とする大きな変更がいつも伴います。さらに、Felgoは、自社製品だけでなく、Felgo SDKに依存してソフトウェアを構築している世界中の顧客にもスムーズに移行できるようにしなければなりません。

Qt 6 がリリースされるとすぐに、Felgo は移行の実現可能性と利点の評価を開始しました。チームは、パフォーマンスの向上、開発者の使用感、既存のコードベースとの互換性などの要素を考慮しました。この投稿では、製品に Qt 6 を使用し始めるための主なステップ、Felgo が移行中に直面したいくつかの課題、新しいテクノロジーを活用するメリットについてまとめています。

今が移行すべき時である理由

移行にはある程度の計画と開発工数が必要ですが、Qt 6 の利点は移行時の手間をはるかに凌駕しています。Qt 6 を取り入れた Felgo は、パフォーマンスの向上、開発ツールの強化、将来的なクロスプラットフォーム互換性など、多くの進歩を享受できるようになりました:

  • Qt 6 では様々な最適化と機能強化が行われ、アプリケーションの動作がより速く、より安定するようになりました。刷新されたレンダリングアーキテクチャと最適化により、アプリケーション全体のパフォーマンスが向上し、起動時間が短縮され、ユーザーとのインタラクションがスムーズになります。

  • 新しいデフォルトのビルドシステムであるCMakeは、高速でパワフルであり、あらゆるユースケースに対応する様々なコマンドや設定が用意されているため、高度なビルドシナリオを簡単に解決することができる。

  • Qt 6 のクロスプラットフォーム互換性により、Felgo のアプリケーションは、モバイル、デスクトップ、組み込み、WebAssembly といった、あらゆる最新のオペレーティングシステムやデバイス上でシームレスに動作します。

Qt 6 は正しい設計を選択し、パフォーマンス、安定性、アーキテクチャが改善され、これまで以上に強力になりました。Qt 6 に移行することで、開発者はテクノロジーの最前線に立つことができ、新たなチャンスをつかみ、ユーザーの進化するニーズに応える優れたアプリケーションを提供することができます。

Qt 6への移行を成功させるためのステップ

ソフトウェア製品を Qt 6 に移行する前に、最も重要なステップは、既存のコードベースと使用されている Qt コンポーネントやモジュールを綿密に評価することです。これにより、リファクタリングが必要な部分を特定し、移行のロードマップを作成することができます。

Qt 6 への移行は、既存のプロジェクトの整合性を保ちながらスムーズに移行するために、いくつかの変更を伴います。Qt 6 のフレームワークに合わせるために、以下のトピックに対応する必要があります:

プロジェクト構成、ツールチェーン、IDEサポート

CMakeはqmakeに比べて多くの利点があるため、現在では好ましいビルドシステムとなっています。CMake はプロジェクトのコンパイルを高速化し、QML モジュールとプロジェクトリソース(QRC)の管理を簡素化します。また、Qt Quick Compiler の最適化機能の向上などにより、Qt のアプリケーションパフォーマンスを大幅に向上させることができます。

CMake と Qt の CMake ヘルパーは、バージョンレスターゲットなど、同じプロジェクトのソースコードで Qt 5 と Qt 6 を並行してサポートすることも容易にします。

さらに、必要なビルドツール、IDE、ビルド自動化システムは、ターゲットプラットフォーム用の Qt 6 と CMake プロジェクトのビルドをサポートするために、最新の要件に合わせて更新する必要があります。これらの課題に早い段階で取り組むことが最善です。そうすれば、CI/CD システムを信頼して、しっかりとした開発プロセスを確保し、品質保証の手段を取り入れ、移行中に迅速なデプロイサイクルの恩恵を受けることができます。

C++およびQML APIの変更

さまざまな Qt コンポーネントの API が変更されました。そのため、Qt 6 でプロジェクトをビルドし、正常に実行するためには、これらの変更を取り入れる必要があります。ほとんどの場合、必要な変更を適用するのは簡単です。詳しくは Qt 6 の Qt モジュールの変更点を参照してください。いくつかの例があります:

  • Qt Network からベアラ管理が削除され、QNetworkConfiguration と QNetworkConfigurationManager クラスが存在しなくなりました。

  • QRegExp 型の名前が QRegularExpression に変更されました。

  • Qt MultimediaはQML Audioタイプを削除します。代わりにMediaPlayerとAudioOutputでオーディオファイルを再生できるようになりました。

  • QtGraphicalEffects モジュールは Qt 6 には含まれていません。いくつかのエフェクトは Qt5Compat.GraphicalEffects モジュールで利用できます。もし Qt 5 と Qt 6 をコードでサポートする必要がある場合、import ステートメントの変更はさらに複雑なものになります。これを回避するには、CMakeのconfigure_file関数を使うか、Qtファイルセレクタを使ってQtのバージョンごとに異なるQMLファイルを取り込むことができます。

  • Qt Quick Controls 1 モジュールはもう利用できませんので、代わりに Qt Quick Controls 2 または Felgo SDK などの代替 UI ライブラリを使用する必要があります。

機能的な違いへの対応

Qt 6 の基本的なアーキテクチャが変更されたため、様々な機能が異なる動作をするようになり、プロジェクトのソースコードを変更する必要があります。以下にいくつかの例を示します:


  • Qt 6 では、新しいレンダリング ハードウェア アブストラクション レイヤーが導入され、ネイティブ レンダリングに依存する機能に影響を与えます。Felgo の場合、一部の機能では OpenGL を使用する必要がありますが、Qt が使用するグラフィックス API を、つまりQQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL) を設定することで解決できます。

  • 密度に依存しないユーザーインターフェイスをレンダリングするための High-dpi モードがデフォルトで有効になりました。Qt::AA_EnableHighDpiScaling 設定は必要なくなりましたが、テスト目的以外では無効にしないことを推奨します。

  • Qt Quick アプリケーションのウィンドウメニューバーは、カスタムレンダリングメニューになりました。これは、メニュー・スタイルがプラットフォーム間で一貫しており、各プラットフォームのネイティブ・メニュー・ソリューションに自動的に適応しないことを意味します。C++ウィジェットを使用する場合、変更はなく、プラットフォームネイティブのメニューが使用されます。

Qt QuickとQMLの構文の変更

Qt Quick コードでは、モジュールのインポートに特定のバージョンを必要としなくなりました。また、パラメータが定義されていないシグナルハンドラは非推奨であり、置き換える必要があります。この例ではバージョンレスのインポートを使用し、MouseArea::clickedシグナルのマウスイベントオブジェクトにアクセスする方法を示します:

import QtQuick


MouseArea {

  acceptedButtons: Qt.LeftButton | Qt.RightButton

  onClicked: (mouse) => {

               if (mouse.button === Qt.LeftButton) {

                 console.log("left clicked");
               }

               else {

                 console.log("right clicked");

             }

      }

}

 


Qt 5とQt 6を並行してサポートする必要がある場合は、"2.x "インポートバージョンをコードに残すことができます。

Qt 6移行へのFelgoのアプローチ

Felgo SDKは、さまざまなQtモジュールや機能を活用しています。6.0がリリースされたときに、すぐにQt 6を主要なターゲットバージョンとすることは現実的ではありませんでした。

そこでFelgoは、まずFelgo SDKの最小限の機能セットを含むベースバージョンを作成し、段階的な移行アプローチを取ることにしました。新しいQtがリリースされるたびに、FelgoはSDKがすべてのコア機能とモジュールをサポートするまでバージョンを更新し、2021年末にはQt 6.2リリースですべてのコア機能とモジュールをサポートできるようになりました。

Felgo-qtversions

残りのすべてのFelgo機能を追加するために、チームはFelgo 4リリースの仕上げとなるQt 6.4.1リリースまでこのプロセスを繰り返しました。 

さらに、Felgo QML Hot Reload や Felgo Cloud Builds などのツールが移行プロセスで役立つことも明らかでした。そのため、チームはまずこれらのツールを Qt 6 用に準備することに集中しました。この決定により、Felgo SDK コンポーネントに関する今後の作業やチーム内のコラボレーションがより容易になり、迅速に進めることができました。

felgo-overview

Felgoのツールとコア機能が完全に移行された直後から、Felgoは社内と一部顧客に対して、ソリューションの隅々まで入念なテストを開始しました。

Felgoツールの活用: QML Hot Reload

Felgo SDK とツールは Qt Quick に強くフォーカスしており、QML Hot Reload は Qt 6 への移行中、Felgo にとって非常に貴重な存在であることが証明されました。この機能により、開発者は QML コードにリアルタイムで変更を加えることができ、現在の状態を失うことなく、更新が実行中のアプリケーションに即座に反映されます。これにより、時間のかかる再コンパイルや再起動が不要になりました。



生産性が向上したことで、FelgoはQML APIを迅速に開発し、さまざまなデザインを試すことができるようになりました。これにより、Felgo SDKのコントロールやUIコンポーネントのリファクタリングや移行がより簡単になりました。

また、Qt 6 の機能を利用することで、継続的な改善と微調整が容易になりました。QML Hot Reload for Qt 6 の最新バージョンでは、エラー画面や、変更やエラーをロールバックしてシームレスなリロードを行う機能などの新機能も追加されました。

Felgo Cloud Builds CI/CDによる開発の効率化

QML Hot Reload に加えて、Felgo は Qt 6 アプリケーションのビルドとデプロイのための便利で効率的なソリューションとして、Cloud Builds の力を活用しました。

 

クラウドビルドにより、Felgo の開発者は拡張性のあるクラウドインフラを活用して Qt プロジェクトをコンパイルすることができます。これにより、移行プロセスが加速され、多くの異なる顧客プロジェクトに Qt 6 を統合することが可能になりました。

Felgo-cloudbuilds2

複数のプラットフォームを同時に構築できる Felgo Cloud Builds のおかげで、迅速な開発サイクルを確保し、効率的に納品とテストを行うことができました。

Felgo: Qt 6 マイグレーションパートナー

300x150_felgo logo

これまで述べてきたように、Qt 6は品質と使いやすさにおいて大きく前進しており、多くのプロジェクトは以前のQtバージョンから移行することで恩恵を受けるでしょう。Felgoは、ツールとQtのエキスパートを組み合わせて、Qt 6の利点をいち早く享受するための理想的な支援を行っています。

QML Hot Reload や Cloud Builds といった Felgo の強力なツールは、開発を効率化し、Qt 6 の採用を加速しました。また、この移行は将来のプロジェクトの基礎となり、高品質なアプリケーションと Qt 6 の機能の効率的な利用を可能にします。

Felgoは、トレーニング、コンサルティング、ツール、エキスパートを提供し、Qt 6への移行をお手伝いします。マイグレーションに関する知識をお探しの方も、開発時間を確保するためにマイグレーションをお任せになりたい方も、Felgo は Qt 6 への移行をお手伝いします!

ベルリンで開催されるQt World Summit 2023に参加される方は、ぜひFelgoのブースにお立ち寄りください。独自の製品や効果的な開発についてもご紹介しています。

------

Felgoについて

Felgoは2014年からQtテクノロジーパートナーとして、Qt開発者の生産性向上を支援しています。

FelgoQtのサービスパートナーとして 開発サービスQtトレーニングワークショップなどを提供しています。 Fergoについてより詳しい情報はウェブサイトもしくは2023年11月28日-29日にベルリンで開催されるQt World Summit 2023のブースでご確認ください。

 


Blog Topics:

Comments