見えてきたQt 6への展望 ―「QtCon 2016」参加レポート

はじめに

ドイツのベルリンで9/1~9/4の4日間にわたって開催された「QtCon 2016」に参加しました。

QtConは、マルチプラットフォームGUI開発フレームワーク「Qt」のカンファレンスです。前年度までは、Qtに貢献しQt Projectから招待された方々だけが出席できた「Qt Contributors' Summit」単独のカンファレンスでした。しかし本年度は、Qt、KDE(K Desktop Environment⁠⁠、FSFE(Free Software Foundation Europe⁠⁠、VLC(VideoLAN Client)の4つのオープンソースコミュニティのメンバが一堂に会したカンファレンスの中に「Qt Contributors' Summit」カンファレンスを含めた形式で開催され、有料ではありますが誰でも自由に参加することができました。そのため、Qtの知識を深めるだけでなく他分野に対しての知識を深め、かつ別コミュニティのユーザとの親交を深める場となり、大変活気溢れるイベントとなりました。

本カンファレンスの会場は、ベルリンの有名なテレビ塔の近くにある、去年のQt World Summitと同じBerlin Congress Centerという会議施設でした。

会場となったBerlin Congress Center
会場となったBerlin Congress Center

内容としては、初日にトレーニング、残り3日間はQtの最新情報や使用上のアドバイス等を聞けるセッションや、他のオープンソースのセッション、キーノートが設けられていました。

トレーニングデイ

QtのパートナーであるKDAB社主催で開催された9/1のトレーニングデイは、以下に挙げる全8コースから1つを事前に選択し受講することになります。

  • Introduction to Qt 3D – with Dr Sean Harmer
  • Basic and Modern CMake – with Andreas Hartmetz
  • Beyond code – Improved Quality through User Centric Development – with Björn Balazs
  • Debugging and Profiling Qt applications – with Milian Wolff
  • Introduction to QML – also known as Qt Quick – with Kevin Funk and Jesper Pedersen
  • What’s new in C++11/C++14 – with Thomas McGuire
  • Introduction to Modern OpenGL with Qt – with Giuseppe D’Angelo
  • Introduction to Testing Qt applications with Squish – with Florian Turck

私が参加した『Introduction to Qt 3D – with Dr Sean Harmer』コースは、KDAB UK社のManaging Director兼Qt 3D Maintainerであり、宇宙物理学のPh.D を所有するDr. Sean Harmer氏が講師を務めています。彼は1998年からQt C++の開発に携わり、セキュリティやインフラ、可視化や数値シミュレーションといったさまざまな分野で開発者として活躍されてきました。講義のタイトルにある『Qt 3D』とは、UIプログラミング言語QML(Qt Meta-Object Language)を使用したQt QuickアプリケーションやC++アプリケーションに対しての2D/3Dレンダリングをサポートした、リアルタイムシミュレーションエンジンです。こちらはQt 5.7から正式リリースされました。

Dr. Sean Harmerによる「Introduction to Qt 3D」コースのもよう
Dr. Sean Harmerによる「Introduction to Qt 3D」コースのもよう

この講義では、(1)ソフトウェアアーキテクチャパターン ECS(Entity Component System⁠⁠、(2) オブジェクトの座標やマテリアル、光源の処理の描画方法、(3)Qt 3D QMLエレメントの1つであるNodeInstantiatorの特徴について、(4)Qt 3D SceneGraph、グラフィックスパイプラインの概要や、GLSLを利用したシェーダの概要と球などさまざまな図形、テクスチャの描画方法、(5)Qt 3Dの今後の展望、について述べていました。

このQt 3Dを利用して3D描画を行うアプリケーションを作成することは可能ですが、スケーラブルにデザイン可能で非常に柔軟性が高く、慣れていない人が一からコーディングするのは簡単とは言えません。このトレーニングはQt 3D Maintainerから直々に受けられる、Qt 3Dを理解するための貴重な機会となりました。この講義はスライドと事前に配布されたサンプルプログラムを使った形式で行われ、説明後や説明の合間で質問やサンプルプログラムの実演、コードレビュを実施し受講者の理解を深める工夫がされていました。20人以上の受講者が参加していたにもかかわらず、疑問や質問があれば一人ひとり即座にかつ丁寧に答えてくれました。

カンファレンス

9/2~9/4の3日間に本格的なカンファレンスが開催されました。Qt以外のセッションもあるためこの日から参加する人も多く、非常に多くの人が会場に集まりました。そして多くの人の視線を浴びながら、KDABグループCEOであるMatthias Kalle Dalheimer氏のウェルカムスピーチを皮切りに講演がスタートしました。

画像

カンファレンスの内容は大きくキーノート、セッション、ライトニングトークの3つに分類できます。キーノートとセッションは毎日(キーノートは1日1講演ずつ⁠⁠、ライトニングトークは9/2にのみ開かれました。

ここからは私が参加したキーノートとセッションについてご紹介します。なお、トレーニングデイ以外の講演時の動画がQtConのホームページで一部公開(紹介するものは全て閲覧可能)されています。下記リンク先でお好きなセッションのページを開くことによりご覧いただけます。その中には講義で使用したスライドやサンプルコードが置かれているものもあります。

QtCon Schedule index
URL:https://conf.qtcon.org/en/qtcon/public/schedule

Keynote 1 - How Social Activists are Using Open Data

9/2の最初のキーノートでは、ドイツのSOZIALHELDEN社からRaúl Krauthausen氏とHolger Dieterich氏が壇上に立ち、車椅子利用の方々をメインターゲットにしたこれまでの事業について講演しました。

画像

ドイツではペットボトルや瓶の料金にデポジット料金が上乗せされています。これらをスーパーマーケットに置かれた回収マシンに入れると受領証が発行され、レジに持っていくとデポジット料金が差し引かれる仕組みがあります。彼らは回収マシンの横に受領証の募金箱を置かせてもらい、その寄付金を地域の発展に貢献するシステムを作りました。また、地理情報データを誰でもフリーで作成・利用できることを目的としたプロジェクトOpen Street Mapを利用した、車椅子で行くことが可能なお店や交通機関の位置を確認できる地図アプリWheelmapがあります。こちらは日本でも利用することが可能で、日本語にも対応しています。その他、駅などのエレベータが稼働中かどうかを調べられるサービスBrokenLiftsについても述べていました。

Keynote 2 - Cultivating Empathy

Leslie Hawthorn氏は大学入学前の学生を率いてGoogle Code-inの開発を行ったことで知られており、現在はRed Hat Inc.でCent OSのエコシステム構築プロジェクトに携わっています。

キーノートでは、彼女がコミュニティリーダとしてこれまでに培った『Empathy』の重要性について講演していました。その中で、彼女は「たとえ優れた技術スキルを持つチームだとしても、エンドユーザが満足する高品質な製品を提供できるかはわかりません。そのため、ユーザが何を望んでいるかを、チーム内でしっかりと聞く耳を持って話し合う必要があります。また、この能力は生まれ持ったものではなく学習することや享受することができるスキルで、周囲の人々と相互作用し合うことでこれをレベルアップさせることが可能です。」と説明しており、個人的にもコミュニティ的にも聞く耳を持ちながら議論することが重要であることを述べていました。

画像

Keynote 3 - Software as a public service

最終日9/4に、欧州議会議員かつ緑の党/欧州自由同盟の副議長であるJulia Reda氏がEUにおけるFree/Libre or Open Source Software ⁠FLOSS)の影響について講演しました。彼女はOpenSSLのいわゆるheartbleedバグ問題に対して作られた実験的プロジェクト『ソフトウェアの統治と価値 - FOSSの監査』の主要メンバーで、このプロジェクトはフリーのオープンソースソフトウェアのセキュリティ強化を目指しています。

講演の中で、ソースの秘匿性を強めると自動車の排ガス問題のような問題が引き起こされ、公開性を強めると選挙データ改ざんなどの問題に直面する昨今の社会問題を取り上げて、政府として速やかにOSSのセキュリティ向上に対応しなければならないと警告しています。また、社会に対してもただサービスを容認するだけでなく、その責任を取る必要があると主張していました。この講演は質疑が多く議論が非常に盛り上がりました。

画像

セッション

4つのオープンソースコミュニティが一堂に会したため、セッション数は過去最高の174講演、ライトニングトークも合わせると全178もの講演が行われ、その中の約半分がQtに関するセッションでした。

ここでは参加したいくつかのQt セッションについて紹介したいと思います。

Qt project status

QtのChief MaintainerであるLars Knoll氏がQtの現状と今後を語るという、Qt World Summitなどでもおなじみのセッションです。

最初はここ最近のQtの状況の説明です。Qtのリリースや、Open Sourceに関する話題としてKDE Qt Foundation との合意の更新の話やQt 5.7 からのライセンス変更について説明がありました。今回のライセンス変更のタイミングでさまざまな商用モジュールにOpen Source ライセンスが追加され、⁠一部のモジュールはまだですが)OSS版と商用版の機能が同じになります。QtのエコシステムとしてはQt 5.6系が50万、Qt 5.7系が36万回ダウンロードされたこと、Qt Projectのアクティブなコントリビュータが250名ほどであることなどが述べられました。コードのコミットはThe Qt Company社、KDAB社、Intel社、Audiocodes社など活発な組織が限られており、より多くの組織に参加してもらうことが課題のひとつということでした。

Qt Projectの開発で用いられているCIシステムについても説明がありました。Qt 5.6から導入された新しいCIシステムであるCOINですが、今後の対応プラットフォームやプロダクトの増加に伴って今年の末頃にリニューアルが予定されているということでした。

また、現在開発中の機能として、New Feature System/New Configuration Systemが簡単に紹介されました。詳しい説明は「New configuration system in Qt 5.8」として別のセッションで行われましたが、このシステムでは Linux や OS X向けに使用されているconfigureスクリプトとWindowsで使用されているconfigure.exeを統合して、1つのシステムですべてのプラットフォームをサポートすることを目的としています。qmakeとJSONをベースにして構築するそうです。

さらに、主に組込み向けのQt Liteについても説明がありました。これまでのQt 5では各モジュール内の機能のカスタマイズが積極的にサポートされてきませんでしたが、組み込みのフットプリント削減の要求を受けて使用しない機能をコンパイル対象から除外して、ライブラリ等のサイズを小さくすることを目的としています。

その先のトピックとして、次のメジャーバージョンである「Qt 6」についても言及がありました。スライドで『What About Qt 6????』と映し出されると軽いどよめきが発生し、次のメジャーリリースを考えはじめるいい時間で、これは1つのアイデアに過ぎないとの前置きもありましたが、Qt 6へ向けてのロードマップ案などが説明されました。Qt 5系のリリースも5.9、5.10と続けていく予定ですが、5.11をQt 5系の最終リリースとして、Qt 6については早ければ2019年にでもリリースしたいということでした。もちろん、リリースの日程はずれ込む可能性もあります。

Qt 6の機能についても検討項目が示され、Qt Coreのような熟成したモジュールは機能の整理程度、Qt GUIはOpenGL以外のグラフィック系APIへの対応(DirectX 12、Vulkan等)などが主な項目になりそうです。大きく変化しそうなモジュールはQt QMLやQt Quickで、よりパフォーマンスや使い勝手を向上させるためにさまざまな変更が行われそうです。この他、Pythonバインディング(PySide)の公式サポート、WebAssemblyのサポートを通じたWebブラウザ上でのQtアプリの実行なども項目として挙げられ、まだまだこれからさまざまなことが決定していくところですが、Qt 6はメジャーバージョンアップにふさわしいリリースとなりそうな予感を感じさせました。

Qt 3D and Physics Based Rendering

9/2に行われたこのセッションでは、トレーニングと同じKDAB社のDr. Sean Harmer氏により、Qt 3Dにおける物理ベースレンダリング(Physics Based Rendering)について紹介されました。物理ベースレンダリングは、さまざまな材質に対する光学現象を考慮することで、より現実世界に近いグラフィックスを表示する技術として、近年注目を浴びています。

このセッションは他のセッションと大きく異なり、物理学的かつ数学的な話に大きく時間が割かれています。たとえば、光とは何かから始まり、エネルギ保存則や放射フラックス、入射した光がどの方向にどのような光として反射しやすいかを表す双方向反射率分布関数(Bidirectional Reflectance Distribution Function)について述べた後、陰影をつけるシェーディングに対してこの双方向反射率分布関数が必要であることを説明されています。

また、セッションの後半ではこの双方向反射率分布関数をQt 3Dに適用したアプリの実演を行っています。Qt 3Dを利用することで簡単に実装できることや、視点や光源の位置、材質により、反射光の色や陰影が滑らかに表示された映像を見ることができます。3DCGという題材だからか、この施設で最も大きい部屋で講演するほどとても人気がある講演で、質疑応答も講演後まで対応されているほど活発でした。

画像

Integrating OpenGL with Qt Quick 2 applications

9/3に開かれたこのセッションでは、Qt Quick 2とは何か、Qt Quick 2がOpenGLを使用してどのようにレンダリングしているのかを説明していました。講師のGiuseppe D'Angelo氏はQtプロジェクトのMaintainerかつソフトウェアエンジニア兼トレーナで、C++やQML、さらにはOpenGL関連の分野で多くの功績を残しています。

Qt Quick 2モジュールとはQMLを使用した2D UIのフレームワークで、C++に拡張したアプリケーションを作成することや、QMLではJavaScriptを用いて記述することも可能です。これを利用する場合はOpenGL ES 2.0かOpenGL 2.0環境を必須としており、アニメーションを動かすことやさまざまなエフェクトを自由自在に描画することができます。Qt Quick 2では、グラフィックスで用いられる座標や要素といったオブジェクトをノードとして扱い、それらの関係をツリー状のデータ構造、つまりシーングラフを構築して描画管理しています。

セッション前半では、そのシーングラフの説明と、OpenGLが描画時にGUIスレッドとレンダスレッドの2つのスレッド間でどのように同期処理が行われているかについて説明されました。セッションの後半では、Qt Quickで手動的にレンダリングをコントロールするためのQQuickRenderControlクラスについて、オブジェクトの作成や、QQuickRenderControlシグナルへの接続方法、初期化についてなどどのように実装するのか、実際に作成したコードを交えて説明していました。その他、Qtに用意されているScene Graph APIについても、クラスの親子関係を示しながら紹介していました。なお、このセッションで用いられたサンプルコードは、QtCon同セッションのページから取得することができます。

画像

Multithreading with Qt

最終日に開催されたこのセッションでは、⁠Integrating OpenGL with Qt Quick 2 applications」と同じ講師の方がQtにおけるスレッドの取り扱いについて紹介されました。QThreadはプラットフォーム非依存のスレッド管理を行えるクラスで、セッションの前半ではこのクラスが所有するシグナルやスロット関数、オーバーライド関数について、複数スレッドのコードの書き方について、スレッドの優先度について説明していました。

また、スレッドの同期に関しては、QMutexやQSemaphore、QReadWriteLock等のクラスの機能や使用方法について実際のコードを示しながらの説明や、またそれらがスレッドセーフかどうか、再入可能かどうかについて解説していました。そして、セッションの最後ではQtと標準ライブラリを比較することにより、Qtと標準ライブラリのthreadクラスを完全に組み合わせることが可能であること、標準ライブラリよりもQtは処理速度で落ちてしまうこと、APIが正しく使用されているかチェックする機能がQtにはないことなどについて述べ、その結果についてもマトリックスで分かりやすく示してくれました。なお、このセッションで用いられたスライドは、QtCon同セッションのページから取得することができます。

画像

セッションまとめ

セッション全体を振り返ると難易度が高い内容が多かった印象です。しかしながら、その分内容も深くとてもタメになると思いますので、ここで紹介しきれなかった他のセッションの動画もぜひ見てください。

デモブース

会場にはKDAB社や多くのQtConスポンサ・サポータの出展ブースが設けられていました。KDAB社のブースでは、Qt Automotive Suiteを使用した自動車HMI(Human Machine Interface)のデモ画面が展示されていました。その他にも、Qt専用の自動テストツールSquishを提供しているfroglogic社、世界的な自動車メーカであるBMWグループ、オープンソースのLinuxディストリビューション開発プロジェクトであるOpenSUSEなど、自社製品やソリューションの紹介や展示、技術デモが行われていました。

Qt Automotive Suiteのデモ
Qt Automotive Suiteのデモ

どの展示ブースも非常に盛況で、休憩時間中は絶えず展示を見ている人たちがいる状況でした。ブースがあるエリアにはお菓子やドリンクが用意されており、コミュニティを問わずいろいろな方々との交流が生まれている場所ともなりました。また、QtCon 2日目にはこのエリアでパーティも行われて大変に盛り上がりました。

画像

最後に

今回のイベントは、トレーニングデイとカンファレンスを合わせて4日間、そして全178セッションもある長期間かつ大変内容の濃いイベントとなりました。特にキーノートでは、Qt、KDE、FSFE、VLCといった団体とは直接関与しない分野の方々が講演し、私が普段触れることない話題であったことから、非常に興味深い内容でした。この素晴らしいカンファレンスに参加できて大変光栄です。

おすすめ記事

記事・ニュース一覧