Qtの新しいブリッジ機能:過去を振り返って未来へ前進

 

Qt World Summit 2025 で、Qt Group は、Qt をさまざまなプログラミング言語と統合するために設計された新しいブリッジ機能を発表しました。この投稿では、これまで寄せられたいくつかの質問にもお答えしたいと思います。

ブリッジ機能が形を成し始めた経緯

未来を考える際、Qtをこの新しいブリッジ技術のアイデアへと導いた過去を振り返ることは重要です。

QtはC++エコシステムから生まれました。2010年に導入されたQMLとQt Quickは、現代的な宣言型言語を用いたUI開発に新たな可能性をもたらしました。しかし、Qt Quickアプリケーション内でQMLエンジン外部のアプリケーション固有のAPIやデータにアクセスするには、従来はC++を記述する必要がありました。2018年にPySideがQt 5の一部としてPySide2として統合され、その後Qt 6でPySide6として再リリースされました。現在、これはQt for Pythonの基盤を成しています。

Qt for Pythonを使用すると、C++ではなくPythonプログラミング言語でQtアプリケーションを開発でき、Shibokenジェネレーターを使用してC++ API用の新しいバインディングを作成できます。また、Qt for Pythonで書かれたQMLモジュールをimportすることも可能です。他のバインディング同様、PySideはバインド先のライブラリ(Qt)に対する十分な理解が必要です。

Qtブリッジの誕生

2023年末、当社はQtおよびQt QuickをC++とPythonコミュニティを超えて拡張する方法を模索し始めました。目標は、新規ユーザーが既存のコードベースと好みのプログラミング言語に集中し、Qtとの連携のためにリファクタリングに必要な労力を最小限に抑えることでした。

バックエンドとフロントエンドを分離するよく知られたソフトウェアアーキテクチャパターンにインスパイアされ、複数の内部ハッカソンプロトタイプから着想を得て、新しいブリッジング技術のコンセプトを開発しました。このアプローチでは、さまざまな言語で書かれたコードがバックエンドとして機能し、ビジネスロジックを実装します。フロントエンドは、QMLで書かれたUIコードであり、Qt Quick UIフレームワークを使用します。

2024年5月頃、約1年前、この方向性が具体的な成果につながる可能性があると結論付けました。選択されたハッカソンプロトタイプはこのコンセプトに完璧に適合し、迅速な開始を支援しました。2025年春までに、3~4回の反復を経て、異なるプログラミング言語とQt Quickを接続する5つのブリッジの動作するベースラインを確立しました。

このアプローチとブリッジ技術 を「Qt Bridges」と命名しました。Qtで「ブリッジ」という用語が初めて使用されたわけではありませんが、これは矛盾ではなく、Qtとそのツール全体で類似した取り組みを説明する用語の適切性を確認するものです。

初期提供プログラミング言語

新しいブリッジ技術により、Qtは5つの言語(C#、Kotlin/Java、Python、Rust、Swift)向けの初期統合セットを提供するだけでなく、将来的に追加の言語統合を構築できるように、いくつかのプライベートQML APIをオープン化し文書化することを目指しています。

一部の読者は次のように疑問に思うかもしれません:「Pythonが既にPySideを通じてQtへのバインディングを提供しているのに、なぜPythonが含まれているのか?」 その答えは、PySideはPythonからQt APIにアクセスするためのバインディングを提供しますが、開発者は依然としてさまざまなQt APIを使用して、PythonバックエンドをQt Quickフロントエンドに手動で接続する必要があります。新しいブリッジ技術はPySideを基盤として構築されており、Qt Quick UIとPythonバックエンドを統合する際に、さまざまなQt APIを記述したり理解したりする必要を排除する、より高レベルでシンプルなAPIを提供することを目指しています。

ブリッジを使用する際、開発者は両側の接続を気にせずに済む「接着層」を期待します。同様に、Qtブリッジは開発者が現在のコードに集中し、ブリッジを介して交換するデータを決定し、各言語で書かれたビジネスロジックとQt Quickで実装されたUIの間でクリーンなデータインターフェースを設計できるようにします。

他の読者は、QtブリッジにおけるRustの統合がCXX-Qtとどのように異なるのか疑問に思うかもしれません。実際、両者はほぼ別物です。CXX-QtはRustアプリケーションがQt C++コードを使用できるようにします。一方、QtブリッジはフロントエンドでのQMLとQt Quickの使用に焦点を当て、Rustを使用する際のブリッジコードの量と複雑さを簡素化・削減することを目的としています。

今後の予定

執筆時点では、実装の次期イテレーションおよび現在のQt 6ベースライン用の新しいリポジトリの開発を進めています。

今後のブログ記事で詳細を共有します。将来のQtブリッジ技術プレビューリリースには、Qtの他の部分と同様に独自のドキュメントが含まれる予定です。それまで、www.qt.io/qt-bridges更新情報を購読し、最も重要な言語を教えてください。

Qt と Qt Quick に初めて触れる方は、try.qt.io を参照してください。


Blog Topics:

Comments