メンテナーが語るQtのこれから―「Qt Contributors' Summit 2017」レポート

はじめに

2017年10月9日、10日にドイツのベルリンで開催された「Qt Contributors' Summit 2017」に参加してきました。⁠Qt Contributors' Summit」とは、Qtに貢献している人たちが、Qtをより良くするための議論をするためのイベントです。セッション方式で発表する形ではなく、Unconference形式で議論を進めていく形となっており、当日になって議題が決まることもあります。

今年はQtユーザ向けのイベントである「Qt World Summit」と同時開催となりました。イベントの詳細については公式ページを参照してください。

Contributors' Summit初日は「Qt World Summit」の準備を行っている最中のbcc Berlinにて、2日目は「Qt World Summit」の初日と重なりbcc Berlinでトレーニングを行っている関係で、近くにあるPark Innホテルで開催されました。⁠Qt World Summit」については後日、別記事で報告させていただこうと考えています。

会場となったPark Innホテル
会場となったPark Innホテル

Welcome Session

まずはWelcome Sessionとして、Qt Community ManagerであるTero Kojoからイベントの諸注意が行われました。その後、Qt ProjectのChief MaintainerであるLars KnollからQtの方向性についての説明がありました。

Lars Knoll氏によるWelcome Sessionの模様
Lars Knoll氏によるWelcome Sessionの模様

Qtはアプケーションではなくフレームワーク(C++のライブラリ)であるため、利用者にとってはそのAPIが非常に重要になります。そのため、一度書かれたコードは予想以上に利用され続けることがあること、コメントで説明を書いてくれる人は少ないことなどから、QtのコードをわかりやすくするためにもAPIに理解しやすい名前を付けようという話から始まりました。

パフォーマンスに関しても、全体的にパフォーマンスを確保できるように設計しつつも、そのためにわかりやすさを犠牲にしないこと。その他、基本的な利用法はできるだけシンプルになるように留意しつつも、特別なユースケースにも対応できるような設計にすること、などの方向性が示されました。これらの方向性は、Qtを使用していれば暗黙の了解として共有できるものだと思いますが、明示して説明することで、それぞれがより強く意識したのではないかと思います。

今後のリリースプランとしては、Qt 5の半年ごとのマイナーバージョンアップを継続して5.12まで続ける予定が示されました。ちょうどイベントに合わせて 5.9.2 がリリースされたばかりですが、11月に5.10をリリースし、2018年に5.11、5.12とリリースを行います。現時点では5.12がQt 5系の最終バージョンとなり、5.6、5.9に続くQt 5系最後のLTSバージョンとなることが予定されています。

昨年9月のQtConでは未定と言いつつ時期への言及もあったQt 6ですが、現時点ではリリース時期はとくに定めない形で行くそうです。これは現時点でQt 6の概要も決まっていないこと、ソース・バイナリコンパチビリティとメジャーバージョンアップによる刷新の兼ね合いや新しいAPIに関する調査など、時期を明確化する前に議論すべきことがあるためです。

Qt 6開発の現状
Qt 6開発の現状

今後のQtの焦点領域として、以下の項目が挙げられました。

  • C++11、14、17、20といったモダンC++ APIとの関係性
  • Qt Core
  • マウス、タッチ、ジェスチャーと複雑化した入力系イベント
  • VulkanやDirect3D 12、MetalといったOpenGL以外のグラフィックAPIへの対応
  • Qt Quick、Qt 3D、Qt 3D Studioの関係性
  • 長年の課題となっているデザイナーと連携する開発フロー
  • Cloudへの対応

これらのすべてがQt Contributors' Summitで話題になったわけではありませんが、その多くについてはセッションが開催されていました。

Welcome sessionも終わりに近づいて、他に議題にしたいことがあればスケジュールに追記して欲しいという話の中で、Larsからもう1つということで、Qt内のコードスタイルをどうするか、という問題提起がされました。コードスタイルを強制するかという問いかけに「No」⁠Yes, Please」と相反する答えが即座に返ってきて、軽く議論が始まります。このあたりが開発者の多い集まりらしい雰囲気でおもしろいところです。

とはいえ、残り時間もないということでWelcome sessionも終わり、参加者たちもQtCSの各セッションへと移っていきました。

Qt Core

QtCS2017 QtCore

Qt Coreモジュールはその名の通りQtのコアとなるモジュールです。そのため変更の影響が大きく、メジャーバージョンが同じ間は機能の追加が主な変更内容となることが多いです。今年はQt 6へ向けて、これまではさまざまなしがらみから手を加えにくかったところをもう一度見直す良い機会であったようです。

中でも大きな話題となったのが、C++標準ライブラリとの関係性です。20年以上の歴史を持つQtでは、C++標準ライブラリがない環境でも動作するように、文字列やコンテナなど独自の標準ライブラリ機能を作ってきました。

最近はC++標準ライブラリも成熟してきたため、Qtでも活用をはじめています。C++自体もC++11、C++14に続いてC++17、C++20で機能が追加されることが予定されているため、便利な機能についてはQtに取り込んでいくことも検討されています。しかし、C++標準ライブラリとQtとではAPIの命名規則が異なることなどから(ex. std: container.empty() vs Qt: container.isEmpty()⁠⁠、その対応方法について話題となりました。

Qtの利用者全員が関係するモジュールということもあって注目度も高く、議論が長引いたため、元々予定されていたコンテナ関連の議論などは別のセッションへ持ち越しとなるほどの盛り上がりでした。

3D

QtCS2017 3D

このセッションではQtの3D関連の機能についての現状と予定の説明が主となりました。

今年の初めにNVIDIA社からNVIDIA DRIVE Design StudioがQt Projectに寄贈されました。これをQtベースにしたQt 3D Studioの開発がThe Qt Company社内で行われていましたが、このQt Contributors' Summitのタイミングでそのソースコードが公開となりました。

Qt 3D Studioは、これまでのQtで弱かったGUIで3D UIを作成するためのツールとして大きく期待されています。

簡単なQt 3D Studioのデモの後に、現在の開発状況などが説明されました。

現在のQt 3D Studioは、NVIDIA社の実装をベースとしているため独自の3Dエンジンで動作しています。今はこれをQt 3Dモジュールベースに変更する作業が進められていること、その際にQt 3Dモジュールのパフォーマンスに問題があることが判明したために、その改善作業も行っていることなどが説明されました。

Qt 3D Studioのワークフロー
Qt 3D Studioのワークフロー

Qt 3Dのパフォーマンス改善はQt 5.9系をターゲットとして行われており、10月の初めにリリースされたQt 5.9.2ではQt 5.9.0に比べてメモリ・実行速度共に大きく改善されたということです。これらの改善結果を踏まえて、来年にQt 3D StudioのエンジンをQt 3Dベースにする予定で開発を進めているということでした。

2D系はQt Quick Designer、3D系はQt 3D Studioとツールが2つ存在する形となりますが、それらの統合については長期的な問題として考えており、まだまだ未定ということでした。現状ではQt QuickからQt 3D Studio、Qt 3D StudioからQt Quickを利用するための最小限の枠組みが用意されています。

Textures in Qt Quick 2

QtCS2017 Textures in QQ2

Qt Quickでは画像を扱う際に、pngなどの画像形式で読み込んで描画するのが一般的です。しかし、特に組み込み系の分野などでパフォーマンスを追求するために、圧縮テクスチャやテクスチャアトラスなどを活用したいという要望が上がることも少なくありません。それらの対応方法についての議論が行われました。

Qtがクロスプラットフォームであること、OpenGL ES 2.0がまだ一般的であることなどから、共通して使用できる圧縮テクスチャ形式はありません。そのため、圧縮テクスチャを作成するツールも含めて対応状況の調査が必要であること、調査をデータベースとしてまとめる必要があることがまず話題となりました。

テクスチャアトラスについても、現状でもQt Quickの内部で暗黙的に生成・使用していますが、実行時に動的に構築するのではなく、事前に構築する方法について議論されました。テクスチャアトラスではテクスチャデータ以外にもその中の各画像のジオメトリなどのメタデータも必要になりますが、そのための一般的なファイル形式が無いこともあり、その対応方法なども議題となりました。

圧縮テクスチャについてはQt Quick用プラグインのサンプルがQtのexamplesにすでに存在しており、ユーザ側の工夫で利用自体はできる状態でしたが、Qtが標準で対応するとその効果は大きいものとなると思われます。テクスチャアトラスについても事前に生成することで、最適化による効率化が期待できます。どちらも今後が楽しみな機能となりそうです。

Qt Quick Scene Graph

QtCS2017 QQSG

Qt Quick Scene GraphはQt Quickのレンダリングエンジンです。Qt 5ではOpenGLを前提とすることでコンパクトで効率的なエンジンを構築し、そのパフォーマンスに大きく寄与しました。

OpenGLベースで考えた際にはQt Quick Scene Graph自体はかなり成熟してきました。しかし、OpenGLが普及してきたとはいえ3D機能やGPUのないローエンドのチップで利用したいという要求が根強いこと、Vulkanに代表される新しいグラフィックAPIへの対応が要望されていることなどから、Qt 6に向けてその構造の見直しが検討されています。

Qt 5でも5.8でDirect3D 12対応を行いましたが、バックエンドごとにシェーダを記述する必要性があったり、作業量も多く元々の設計でOpenGLと密接に関係している場所(マテリアルなど)への対応が困難など課題も判明してきました。

今後の対応としては、すでに存在しているQQuickRenderControlクラスの拡張か、新しくQQuickSceneクラスの導入などの提案、シェーダーの共通言語の導入検討などの項目があげられました。

Summing up framework changes: The road towards Qt 6

「Qt Contributors' Summit」の最後はまとめとなるセッションです。これまでの各セッションでどんな話題があったかを確認して、イベントのまとめとしました。

「Qt Contributors' Summit」はここで終わりましたが、多くの参加者は翌日からの「Qt World Summit」にも参加していました。

まとめ

Qtの機能実装的なセッションを主に紹介しましたが、それだけではなくQt Project の Code of Conduct(行動規範)やサンプルの作成のガイドラインなどQt に関する幅広いことが議論されました。

「Qt World Summit」と同時開催と言うことで2日目は KDAB の有力な貢献者達がトレーニングの講師をしていたために参加できていなかったり、部屋の関係で同時に開催されるセッションが多くても3つまでという制限はありましたが、ほとんどのセッションで時間オーバーするほどの白熱した議論が繰り広げられていました。

また、話題もここ数年は追加機能に関するものが多かったのに比較するとQt Coreなどの基礎的なモジュールに関する議論も多く、Qtの今後が楽しみなイベントとなりました。

議論についてはこの場で終わりではなく、Qt ProjectのDevelopmentメーリングリストやbugreports.qt.ioなどでも継続して行われます。興味のある方はぜひチェックしてみてください。

おすすめ記事

記事・ニュース一覧