「Qt World Summit 2019」「Qt Contributors' Summit 2019」参加レポート

#002 Qtの今後を示す道しるべ ―「Qt Contributors' Summit 2019」レポート

この記事を読むのに必要な時間:およそ 7 分

はじめに

「Qt World Summit 2019 Berlin」⁠以下QtWS)から2週間後の2019年11月19日~21日,同じベルリンで「Qt Contributors' Summit 2019」⁠以下QtCS)が開催されました。

Qt Contributors' Summit 2019
URL:https://wiki.qt.io/Qt_Contributors_Summit_2019

QtCSはQtの開発者などのコントリビューターが集まり,今後のQt自体の開発の方向性などを議論する会議です。これまでは初夏に開催されることが多かったのですが,QtWSよりも後という珍しい時期の開催となりました。会場はThe Qt Company社のベルリンオフィスと,その隣にあるForum Adlashofでした。

初日はPlenary styleとしてForum Adlashofのみを使用して,多くの開発者達に影響がある内容を中心に,過去の議論を踏まえて決定された Qt 6 の方針などの認識の共有が主に行われました。2日目,3日目はThe Qt Company社の会議室も使用して,Unconference style で議論やワークショップが行われました。

メイン会場となったForum Adlershof

メイン会場となったForum Adlershof

このレポートではQtCSの様子と,そこで議題となった内容を報告します。互いに関係するセッションも多かったため,各セッションを個別に報告するのではなく Qtのモジュール別にまとめての報告とさせていただきます。

なお,今年のQtCSには110名が参加登録をし,そのうち約3分の1がメンテナと呼ばれる各モジュールやコンポーネントの管理者で,約3分の1が承認者と呼ばれるコードレビューに承認する権限を持つ人たち,残りがコントリビューター(貢献者)とスポンサー,他のプロジェクトのコントリビューター等であったそうです。

Qt Contributors' Summit 2019のオープニング

Qt Contributors' Summit 2019のオープニング

Qt 6に向けて

まずはQt全体についてです。こちらは最初に行われたQt Projectのチーフメンテナであり,The Qt Company社のCTOでもあるLars Knoll氏のキーノート「Towards Qt 6」の内容がメインになります。同じタイトルのキーノートがQtともなじみの深いOSSプロジェクトKDEの開発者会議AkademyやQt World Summitでも実施されています。残念ながらそれらには参加できなかったのですが,Qtの内部実装をQt 5とQt 6で比較しての説明などがあり,おそらくQtCS向けに若干アレンジされたより深い内容になっていたのではないかと思います。

興味のある方は,AkademyでのビデオとスライドQtWSでのビデオなどが公開されていますので確認してみてください。

Lars Knoll氏によるキーノート「Towards Qt 6」

Lars Knoll氏によるキーノート「Towards Qt 6」

今後のQtのロードマップですが,これまでの予定から大きな変化は無く,2019年末にQt 5.14,2020年初夏にQt 5系の最後のマイナーバージョンとなる5.15LTSをリリースし,今から約1年後の2020年末にQt 6をリリースする予定となっています。

Qt 6までに予定されているQt 5.14と5.15の位置付けについても説明がありました。⁠Qt 5.14 and Qt 5.15LTS pave the road towards Qt 6」ということで,Qt 6へ向けた整備を行うためのリリースとなります。レガシーなAPIに非推奨(deprecatd)とマークしQt 6に不要なAPIを明示すること,またQt 6に追加する新機能についてテクニカルプレビューとして先行リリースを行い,そのフィードバックを受けることが主な目的となります。

Qt 6の正式リリース時には非推奨なAPIはすべて削除されます。そのため,Qt 6でのソースコード互換性は主にQt 5.15 LTSの(非推奨ではない)APIに対して確保する予定となっています。Qt 6へ向けた変更は多数に渡って行われる予定であるため,現行のQt 5.12LTSや5.13に対しては十分な互換性が確保されない可能性に注意してください。

Qt 6ではいくつかQt 5.15LTSとのソースコードが非互換となる変更も導入される予定です。⁠Qt 6Changes / Migration」セッションではこれらのAPIに付いても議論されました。その中で従来はメジャーバージョン変更時に提供していたポーティング用補助ツールにQt 6ではClangベースのQt向け静的解析ツールであるClazyを活用する案も提案されました。C++部に限定はされますが,Clazyでソース非互換な変更に対応できれば,従来よりも正確かつ容易にメジャーバージョンアップ対応ができそうです。

Qt 6ではそのリリース形態に関しても変更が予定されています。Qt 5では各モジュールをEssentials,Add-onsに分類していましたが,それらのリリースは半年ごとにまとめて行っていました。しかし,Qtの機能・モジュールが増加するに従ってアーカイブ及びリリース作業の肥大化・複雑化を招いていました。たとえば,Qt 5.0.0のソースアーカイブはtar.xz形式で165MBほどですが,Qt 5.13.2では478MB,Qt 5.14.0では522MBと約3倍になっています。

Qt 6ではQt Core,GUI,Network,Widgets,QML,Quick+αの限られたモジュールをコアとして定義し,Essentialsモジュールのスリム化を図ります。Add-onsモジュールはサポート対象とサポート対象外に分割し,リリースをコアとは別に行うことでリリースの負荷を下げます。また,一部のモジュールはQt Marketplace経由でのリリースも考えているようです。

以下の方針もQt 6で行われる大きな変更点です。

  • CMakeの採用
  • C++17の採用

特にCMakeは,これまで長らく使用していたqmakeを置き換えるものとしてQt全体へ影響します。すでに多くのモジュールがCMakeでビルドできるようになってはいますが,まだまだ課題も残っているそうです。Qt用に作られたqmakeに比べるとプロジェクトファイルの記法などは複雑になりますが,Qt自体をクロスコンパイルするときの手順の簡素化などが期待できるのではないかと思います。CMakeに関しては3日目には丸一日を使用したWorkshopも開催されていました。

C++17も大きな影響を与えます。といってもQtのAPI自体への影響はそれほど大きくなく,主にはQtの内部実装の効率化に寄与する見込みです。標準C++ライブラリの機能の利用は慎重に行います。パフォーマンスなどの評価を行った上でメリットがある場合はQt内部から使用したり,Qtの実装のバックエンドとして用いる予定です。そのため,Qtのビルドには比較的新しいコンパイラが必要となる予定です。たとえばMicrosoft Visual C++(MSVC)は2019以降が必要となる予定です。

このように,Qt 6では今後の10年間の利用に耐えられるだけのアプリケーションフレームワークとなることを目標としています。全体的にはQt 6ではスリム化とパフォーマンス改善が主な方針となって開発が進められています。これまでのQtの開発では,モジュールやAPIの削除時には代替手段の提供もセットとなることが多かったため規模が拡大する一方でした。Qt 6は初めてそのスリム化を行うリリースとなりそうです。

著者プロフィール

朝木卓見(あさきたくみ)

1996年からQtを使い始める。

2006年,Qtの開発元であったTrollTech ASAにてQtのコンサルティングやサポートに従事。

2008年,TrollTech買収によりNokiaに移籍し,Qtの啓蒙活動なども行う。

現在は株式会社SRAでQtコンサルタントとして活動中。

Officially Certified Qt Specialist

バックナンバー

「Qt World Summit 2019」「Qt Contributors' Summit 2019」参加レポート