このプロジェクトについて

DruidはLinebenderによって開発された実験的なRustネイティブUIツールキットであり、洗練されたデスクトップアプリケーションを構築するためのデータファーストなアプローチで設計されていました。このプロジェクトは、パフォーマンス、リッチなインタラクション、ネイティブプラットフォームとの統合を重視し、すべての一般的なプラットフォームでスムーズなユーザー体験を提供することを目指していました。 現在、このツールキットは公式に開発が終了しており、メンテナンスも行われていません。新しい開発の取り組みはXilemへと移行しました。XilemはDruidから多くの要素を引き継いでいますが、パフォーマンスの向上とより広範なアプリケーションサポートのために根本的な変更が導入されています。Druidは一部のアプリケーションでは依然として使用可能であり、重要なテストの歴史もありますが、新機能の追加やバグ修正は予定されていません。 主なアーキテクチャコンポーネントは以下の通りです。 - druid-shell: ネイティブプラットフォームのランループの開始、イベントのリスニング、およびそれらをプラットフォーム非依存の表現に変換する役割を担う、プラットフォーム抽象化アプリケーションシェル。 - Piet: 描画およびテキストレイアウトに使用される2Dグラフィックス抽象化ライブラリ。複数のバックエンド(Windows用のDirect2D、macOS用のCoreGraphics、Linux用のCairo、Webターゲット用のWeb)を備えています。 - ウィジェットシステム: ウィジェットはデータ型でパラメータ化されたWidgetトレイトを実装し、イベント処理、ライフサイクル管理、更新、レイアウト、描画のためのメソッドを持ちます。各メソッドは、対応するコンテキストオブジェクトとテーマパラメータを含む環境を受け取ります。 - レイアウト: Flutterのボックスレイアウトモデルに触発されており、ウィジェットは最小サイズと最大サイズを提供するBoxConstraintsを受け取ります。 - Dataトレイト: 比較やクローンが容易な値型を表し、通常はアプリケーションの状態構造体に対して導出されます。 - Lens: より大きなデータ構造の一部へのアクセスを提供し、ウィジェットがアプリケーション状態の特定のフィールドを操作できるようにします。 Druidはcrates.ioで公開されており、macOS、Linux(GTK+3が必要)、Windows、OpenBSDをサポートしていました。このプロジェクトは基本的なユーティリティおよびレイアウトウィジェットを提供し、カスタムウィジェットを構成する機能もありました。ツールキットは、容易な構築とパッケージング、プラットフォームの慣習の尊重、信頼性の高いディスプレイのスケーリング、国際化サポート、アクセシビリティ、小さく高速なバイナリ、および小さな依存関係ツリーを目指していました。 プラットフォームネイティブウィジェットの使用、カスタムレンダリングパイプラインへの埋め込み、Elmのような特定のアーキテクチャスタイルへの準拠、Webターゲット向けのHTMLレンダリングのサポートなどは非目標とされていました。これらのユースケースに対する代替案としては、Relm、Slint、Conrod、Iced、Moxieなどが挙げられます。