ウィジェットツールキットとは
ウィジェットツールキット(GUIツールキット)は、グラフィカルユーザーインターフェース(GUI)を構成する部品の集合です。これらは通常、
ライブラリやアプリケーションフレームワークの形で提供され、GUIを利用したデスクトップや
モバイルアプリケーション開発に用いられます。ウィジェットは、分野によってはコントロールや
コンポーネントとも呼ばれます。
概要
高レベルなウィジェットツールキットは、GUIの生成と動作を管理するAPIを提供します。GUIはしばしばウィジェットの木構造として表現され、ユーザーが操作できるボタンやチェックボックスなどの部品と、ウィンドウやパネルのようなコンテナで構成されます。これらのウィジェットの構造や属性は、実行時に動的に変更可能です。
ツールキットは、ユーザーの操作(例えばボタンのクリック)をイベントとして検出し、それに対するアクションを実行します。ただし、具体的なアクションの内容はツールキット自身ではなく、アプリケーションが定義します。例えば、ファイルダイアログでファイルが選択された場合、ダイアログの反応とイベント検出はツールキットが行いますが、ファイルの読み込みなどの処理はアプリケーション側で行います。
ウィジェットツールキットは、ウィジェットの配置を管理する機能も提供します。絶対座標や相対座標による単純な配置方法だけでなく、ウィジェット間の相対的な位置関係に基づいて配置を管理するレイアウトマネージャも利用可能です。また、多くのツールキットは、
統合開発環境(IDE)と連携したGUIデザイナーをサポートしており、直感的な部品配置とプレビューによるプロトタイピングを容易に実現できます。
GUI部品の配置やプロパティの設定は、プログラミング言語で直接記述する方法と、リソーススクリプトやXMLなどの形式で記述する方法があります。後者の場合、UI定義を別のファイルに分離することで、デザイン支援ツール開発が容易になるという利点がありますが、複数のファイルにUI定義が分散することで実装が複雑になる可能性もあります。また、デザインツールで自動生成されたレイアウト定義ファイルは、複数人で開発する際にコンフリクトを解消するのが難しい場合があります。
ウィジェットの外観はツールキットに固定されていることもありますが、ツールキットによってはユーザーが定義できるAPIを提供しているものもあります。さらに、GUIアプリケーションの開発効率やメンテナンス性を向上させるために、Model-View-Controller(MVC)やModel-View-ViewModel(MVVM)などの設計パターンが利用されることもあります。
主要なウィジェットツールキット
以下に主要なウィジェットツールキットをレベルとプラットフォーム別に分類して紹介します。
低レベルなツールキット
オペレーティングシステムに組み込まれているもの:
Classic Mac OSのツールボックス: MacintoshのAPI。後のmacOSではCarbonとして改良されました。
Windows API: GDIの上にウィンドウシステムが構築されています。C言語形式関数群やCOMコンポーネントとして提供。
AndroidのActivity/View: Androidアプリ開発の基本的なUI要素を提供。
オペレーティングシステム上の分離した層として実装されているもの:
X Window System: Xt
ライブラリを含みます。GTKや
Qtは直接Xlibを使用。
AmigaOSのIntuition: AmigaのGUIであるWorkbenchを呼び出します。
高レベルなツールキット
macOS:
Cocoa: macOSアプリ開発に使用されるAppKitを含むフレームワーク。
SwiftUI: SwiftのみでUIを宣言的に記述できるフレームワーク。
iOS:
Cocoa Touch: iOS/iPadOS/tvOS/watchOSアプリ開発に使用されるUIKitを含むフレームワーク。
SwiftUI
Windows:
Microsoft Foundation Class (MFC): 古いC++フレームワーク。Windows APIのラッパー。
Windows Template Library (WTL): ATLの拡張であり、
C++テンプレートに基づいたWindows APIのラッパー。
Object Windows Library: ボーランドのライブラリ。Windows APIのラッパー
Visual Component Library (VCL): ボーランドの
C++Builderと
Delphi製品に含まれるツールキット。高度な抽象化を提供。
Windows Forms (WinForms): .NET Framework向けのGUI制御用クラスライブラリ。RADをサポート。
Windows Presentation Foundation (WPF): .NET Framework 3.0以降で利用可能なグラフィックスサブシステム。Direct3Dによるハードウェアレンダリングアクセラレーションをサポート。
Windows ランタイム (WinRT) およびWindows UI Library (WinUI): Windows 8で実装されたModern UIアプリケーション開発用のフレームワーク。
Android:
レイアウトXML: 独自のXML形式でレイアウトやカスタム部品を定義。
Jetpack Compose: KotlinのみでUIを宣言的に記述。
UNIX と X Window System:
Xaw: Project Athenaで開発されたX Window System用のウィジェットセット。
Motif: Common Desktop Environmentで使用される。
LessTif: Motifのオープンソース版。
InterViews: C++で書かれたツールキット。
クロスプラットフォーム:
Flashベース:
Adobe Flash: ウェブブラウザや携帯電話で機能するウィジェット。
Adobe Flex: ウェブブラウザ用の高度なウィジェット。Flashウィジェットを利用可能。
XMLベース:
XUL
XAMLおよび.NETベース:
Silverlight/Moonlight
Xamarin.Forms
.NET Multi-platform App UI (.NET MAUI)
Ajaxベース:
Qooxdoo: ウェブ用のQt。
jQuery
Dojo Toolkit
Google Web Toolkit
Yahoo! UI Library
Ext JS
Javaベース:
Abstract Window Toolkit (AWT): プラットフォーム毎にウィジェットツールキットを切り替えて使用。
Swing: AWTを改良・拡張したもの。
Standard Widget Toolkit (SWT): 動作環境のウィジェットを使用。100% Pure
Javaではない。
JavaFX
C言語/C++ベースおよびマルチ言語ベース:
CLX (Component Library for Cross-platform): Qtをベースにしたツールキット。
GTK: オープンソース。GNOMEおよびXfce
デスクトップ環境で使用。
Qt: オープンソース。Unix/Linux、Windows、macOS、組み込みシステムで使用可能。
Tk: Tcl上や他の
スクリプト言語で使用。
wxWidgets: オープンソース。C++、Python、Perlから利用可能。
FLTK: オープンソース。小さくて高速。
FOX toolkit: オープンソース。クロスプラットフォーム。
CEGUI
GLUI
Juce
Ultimate++
Visual Component Framework (VCF)
YAAF
NWSTK
Pascalベース:
Lazarus: Free
PascalおよびObject
Pascal向けの
統合開発環境。ウィジェット・ツールキットを含む。
IP Pascal
fpGUI
カテゴリ分けされていないもの
GNUstep
MetaCard
まとめ
ウィジェットツールキットは、現代のアプリケーション開発において不可欠な存在です。多くの選択肢があるため、プロジェクトの要件や開発者のスキルに最適なツールキットを選ぶことが重要です。この記事を参考に、より良いGUIアプリケーションの開発に役立ててください。