Wayland を使用したマルチ UI プロセス構成のデバイス開発

この記事は The Qt BlogCreating devices with multiple UI processes using Wayland を翻訳したものです。

執筆: Johan Helsing, 2017年1月23日

一昔前のユーザーインターフェースのあるデバイスでは、ユーザーインターフェースを実行するプロセスが1つだけあるような設計になっていました。これはユーザーインターフェースからデバイスをコントロールするためのロジックを分離したとても良い設計で、エンドユーザーの操作に対して即座に反応することができました。ハードウェアのコストが下がり性能が向上するにつれ、デバイスができることが増えてきました。ユーザーインターフェースは、非同期のイベントや様々なソースから発生する情報を表示するなど、以前より多くの役割を担う必要がでてきました。SMS のみに対応したシンプルな携帯電話が様々な機能を搭載したフィーチャーフォンに進化し、現在では10年前のパソコンよりも性能がよいスマートフォンがあたりまえになっています。スマートフォンのすべての UI をシングルプロセスで実行するなんて想像しただけで発狂しそうです。というわけで、複雑なデバイスのユーザーインターフェースの構築には同じような技術を導入してはいかがでしょうか?

デバイスのユーザーインターフェースをマルチプロセス化するメリット:

  • 安定性と堅牢性: アプリケーションを機能単位で複数に分割することにより、個々のアプリケーションの安定性を最大化でき、万が一あるアプリケーションがクラッシュしたとしても、他のアプリケーションには影響がありません。
  • 開発の効率化: アプリケーションごとに担当するチームを分割することができ、他のチームの影響によるリスクを低減させることができます。
  • セキュリティ: システムや他のプロセスに対する最低限の権限でアプリケーションを実行することができます。
  • サードパーティーのアプリケーション開発: サードパーティのアプリケーション開発にデバイスを開放するのが容易になります。様々な UI ツールキットで開発されたアプリケーションを共存させることも可能です。

なぜ Wayland なのか?

multi-screen-demoユーザーインターフェースのプロセスを分割する決定をする際の技術的な課題は、いかに複数プロセスの画面出力をディスプレイに持っていくかになります。これまでの歴史的なアプローチは X を利用して、独自のウィンドウマネージャーを作成することでした。

最近のアプローチは X のよりシンプルな代替である Wayland を使うことです。

  • 簡単に開発ができ、メンテナンスも楽
  • 最新のグラフィックハードウェアを念頭においたモダンなウィンドウマネージメントの設計
  • プロトコルの拡張が容易
  • Wayland はウィンドウマネージメントの新しい業界標準 - 誰でも利用でき、誰でも拡張可能な共通プロトコル

Wayland では「コンポジタ」が個々のクライアントのコンテンツをアレンジしてスクリーンに出力する役割を担います。

Qt の Wayland 対応

以前のバージョンの Qt では Qt Window System (QWS) と呼ばれる、Wayland の設計とよく似た機能を提供していました。しかし、QWS は Qt ベースのクライアントのみをサポートし、設計が OpenGL などのハードウェアには最適化されていませんでした。Qt 5 では Wayland の対応を行いました。Wayland クライアントとしての Qt アプリケーションは Qt 5.4 にて正式対応となりました。

Qt Wayland Compositor API

Qt 5.8 では Qt Wayland Compositor API が正式対応になりました。これにより、Qt の機能をもちいて独自の Wayland コンポジタを作成することができるようになりました。コンポジタを簡単に作成するために必要なすべてのツールも提供されます。強力かつシンプルな QML により、コンポジタの UI/UX を記載することが可能です。もちろん、C++ での作成にも対応しています。Qt Wayland Compositor API を採用するメリットは他にもあります。

  • マルチスクリーン対応のデバイスの開発が簡単にできます
  • 高度に抽象化された API を提供することで、コード量の削減やテスト、デバッグの工数の削減が可能
  • 独自の Wayland の拡張もサポート - クライアントとコンポジタの通信を自由にカスタマイズ可能
    例) クライアントにナイトモードへの移行を伝える拡張プロトコルを簡単に記載することができます
  • XDG shell、WL shell、IVI application などのシェルエクステンションがビルトインされており、様々なエクステンションを採用しているクライアントに対応することが可能です。

この記事によって Qt Wayland Compositor API を活用してマルチプロセス対応のデバイスを開発に興味がわく人が増えてくれれば幸いです。10分程度のチュートリアルの動画にて、どのくらい簡単にコンポジタが作れるかを実際にお見せしたいと思います。

[embed]https://www.youtube.com/watch?v=9vWMUTvFgdU[/embed]

Qt 5.8 をダウンロード して、今すぐ開発をはじめましょう!


Blog Topics:

Comments