この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "ウィジェット・ツールキット"
ウィジェット・ツールキット (widget toolkit) あるいは GUIツールキット とは、グラフィカルユーザインタフェース (GUI) を構成する部品の集合である。通常、ライブラリやアプリケーションフレームワークの形式で実装される。分野によって、ウィジェットはコントロールあるいはコンポーネントとも呼ばれる。GUIを利用したデスクトップアプリケーションやモバイルアプリケーションといった、アプリケーションソフトウェアの作成に用いられる。
個々の部品についてはウィジェット (GUI)を参照されたい。 高レベルなウィジェット・ツールキットは、GUIの生成と振る舞いを管理するAPIである。
概要
GUIは、ウィジェットの木構造として生成されることが多く、その一部がユーザーとのやり取りが可能となっていて(ボタン、チェックボックスなど)、他はウィジェットをグループ化するコンテナである(ウィンドウ、パネル
ウィジェットの木構造の中身やウィジェットの属性は、実行時に変更可能であるものが多い(例えば、木構造からウィジェットを追加・削除できる)。
ツールキットはボタンをクリックするなどのユーザーイベントを扱う。イベント検出後のアクションはツールキットが指定するものではなく、アプリケーションが指定する。例えば、ファイルダイアログ(英語版)からユーザーがファイルを選択したら、ファイルダイアログ・ウィジェット自身の反応とそのユーザーイベントの検出はウィジェット・ツールキットが扱うが、ファイルを選択したことに対応する具体的なアクション(そのファイルを読み込むなど)はアプリケーション自身が行う。
ウィジェット・ツールキットは、コンテナの中でのウィジェットの位置決めの手段を必ず持っている。最も簡単な方法は、画面上の絶対座標や上位ウィジェットからの相対座標をピクセル単位で指定する方法だが、ウィジェット同士の相対的な位置関係だけを指定して具体的な座標を指定しない方法もある(レイアウトマネージャ)。多くのツールキットは、統合開発環境と連携した視覚的なGUIデザイナーをサポートし、直感的なGUI部品の配置およびプレビューを使用したプロトタイピング (Rapid Application Development, RAD) も可能となっている。
GUI部品の配置や各種プロパティの設定は、ロジックを記述するためのプログラミング言語によって直接ソースファイルに記述する方法のほか、独自のリソーススクリプトやXMLなどの形式で、ロジックを記述するソースファイルとは別のファイルに分けて記述することのできる機能をサポートするツールキットもある。レイアウト定義を別ファイルに分離することで、直感的なプレビューやプロトタイピングを可能にするデザイン補助ツールを開発しやすくなるなどのメリットがあるが、複数のファイルにUIの記述が分散することで、逆に実装が複雑化してしまったりするデメリットもある。プログラマーが手作業で編集せずに、デザイン補助ツールを経由して操作することで自動生成されたレイアウト定義ファイルのコードは、バージョン管理ツールなどを用いて複数人でソースコードを共有して開発する際にコンフリクトの解消が難しくなることもある。
ウィジェットのルック・アンド・フィールはツールキット内でハードコードされる場合もあるが、ウィジェット・ツールキットによってはユーザーがルック・アンド・フィールを定義できるAPIを提供している。
GUIアプリケーションの開発効率やメンテナンス性を向上するために、Model-View-Controller (MVC) やModel-View-ViewModel (MVVM) といった設計パターンが使用されることもある。ツールキットが標準的にこれらの設計パターンをサポートしていることもある。MVVMに関してはデータバインディング機能のサポートが前提となる。
主要なウィジェット・ツールキット
低レベルなもの
オペレーティングシステムに組み込まれているもの
Classic Mac OSのツールボックス、あるいは従来はROMに組み込まれていたMacintoshのAPI。Mac OS Xでの改良版はCarbon。
Windowsで使われているWindows API。描画機能をつかさどるGraphics Device Interface (GDI) と呼ばれる下位レベルレイヤーの上に、ウィンドウシステムをつかさどる上位レベルレイヤーが構築されている。主にC言語形式関数群あるいはCOMコンポーネントの形で公開・提供される。
AndroidのActivity/View
オペレーティングシステム上の分離した層として実装されているもの
X Window Systemは基本的な構成要素 (Xt) を含んでおり[1]、Motifはそれを使っているが、GTKやQtなど大部分のツールキットはこれを使わず、直接Xlibを使っている。
AmigaOSのIntuitionは、AmigaのROMに含まれていて、やや高レベルなウィジェットを使いAmigaのGUIであるWorkbenchを呼び出している。Amiga OS 2.0のIntuitionからはディスク上のオブジェクト指向ライブラリとなった。同時にWorkbenchもIconもディスクベースとなっている。
高レベルなもの
macOS
Cocoa - macOSのアプリ開発で使用される(Aquaも参照されたい)。UIフレームワークとしてAppKitを含む[2][3]。
MacApp(英語版) - Macintosh (Mac OS XおよびMac OS 9) フレームワーク[4]。
MacZoop - Macintosh C++フレームワーク。
PowerPlant(英語版) - Macintoshフレームワーク。
SwiftUI - Swiftのみを使用してUIを宣言的に記述できるフレームワーク[5]。