Rust向けGUIツールキット「KAS」の作者が、自身のブログでRust言語で使用できるGUI関連ライブラリの発展具合を振り返った。KASはApache License 2.0で公開しているオープンソース・ソフトウェアだが、少人数で開発しているためバージョンアップのペースは遅く、当初の目標としている機能をすべて実装できているわけではない。現時点での最新バージョンは0.12.0と、バージョン1にも到達していない。
今回のブログ投稿は、Rust向けのGUIツールキットやライブラリの開発が進んでいないのではないかと疑問を投げかける他者のブログ投稿に答えるものだ。ほかのWebサイトには、RustでGUIアプリケーションを作ることはできるが、その方法はElectronを入れてHTMLで記述するか、ラッパーを通してOSのAPIを操作するしかない。Rustの言語仕様をもってすれば、複雑なGUIも記述できるのに、RustだけでGUIを作成する方法がほとんどないと嘆く声が投稿されている。
KASの作者はまず、GUIを作成するために必要な要素として、「少なくとも1つのウィンドウを作成する能力」「GUIを描画する能力、GPUアクセラレーションも利用できればなおよし」「文字を描画し、長い文字列を複雑なレイアウトで配置する能力(組版能力)」「アクセシビリティと国際化」の4点を挙げた。
ウィンドウを作成する能力については、「winit」というRustで記述したライブラリがあるという。ウィンドウを作成し、キーボードやマウス、タッチスクリーンからの入力を受け付ける。Winitは一定の成功を収めていると言えるそうだ。しかしWinitには、十分な能力と時間があるメンテ名が不足しているという大きな問題があるそうだ。今回のブログでは、Rustを使う必要はないのではないかとも言っている。GTKやQtなど、特定のOSの機能を活用するツールキットを使えば良いのではないかと。
描画については低レベルと高レベルの2つに分けている。低レベルライブラリについては、CPUで描画する「softbuffer」やOpenGLに対応する「glutin」など、いくつかのライブラリの開発が続いているが、中でも多くの機能を提供しているのが「wgpu」だ。
wgpuは完全にRustで記述したクロスプラットフォームのライブラリで、Vulkan、Metal、Direct3D 12、Direct3D 11、OpenGLESといった低レベルAPIに対応しており、GPUレンダリングも可能になっている。Rustのほかのライブラリにもwgpuを利用しているものは多い。
高レベルの描画については、「WRY」「Piet」など9種類ほどのライブラリの開発が進んでいる。しかし、あるものは曲線や直線の描画を目的としており、あるものは二次元グラフィクスの描画を目的としており、あるものはWebViewを通してHTML/CSSで描画するなど、目的や機能がそれぞれバラバラだ。
文字を描画し、長い文字列を複雑なレイアウトで配置する能力(組版能力)については、Yevhenii Reizner氏に感謝しなければならないとしている。氏が開発した「ttf-parser」(TrueTypeフォントの解析器)、「fontdb」(インメモリのフォントデータベース)、「rustybuzz」(テキスト整形エンジン)は多くのソフトウェアが利用している。組版については、「Swash」がかなり高度な機能を提供しているという。
- 関連リンク
この記事は参考になりましたか?
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です