ウィジェット・ツールキット

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ウィジェット・ツールキット (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に関してはデータバインディング機能のサポートが前提となる。

主要なウィジェット・ツールキット[編集]

低レベルなもの[編集]

オペレーティングシステムに組み込まれているもの[編集]

オペレーティングシステム上の分離した層として実装されているもの[編集]

  • X Window Systemは基本的な構成要素 (Xt) を含んでおり[1]Motifはそれを使っているが、GTKQtなど大部分のツールキットはこれを使わず、直接Xlibを使っている。
  • AmigaOSIntuitionは、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]

iOS[編集]

Windows[編集]

  • Microsoft Foundation Class (MFC) は、1990年代から存在するWindows専用の古いC++フレームワークである。MFCはWindows APIの薄いラッパーであり、独立したツールキットではない。
  • Windows Template Library (WTL) は、ATLの拡張であり、C++テンプレートに基づいたWindows APIのラッパーである。MFCよりも軽量なフレームワークを提供する。
  • Object Windows LibraryはMFCに相当するボーランドのライブラリ。これもWindows API (Win32 API) のラッパーであり、独立したツールキットではない。
  • Visual Component Library (VCL) はボーランドのC++BuilderDelphi製品に含まれているツールキット。これもWindows API (Win32 API) のラッパーであり、独立したツールキットではないが、MFCよりも高度な抽象化およびRAD環境を提供する。
  • Windows Forms (WinForms) は、.NET Frameworkにおけるマネージコード向けWindows APIのラッパーであり、GUI制御用のクラスライブラリからなる。設計はVCLに近く、Microsoft Visual Studioに統合されたRADをサポートする。Monoによる互換実装も存在する[8][注釈 1]。Windows限定で.NET Core 3.0以降にも移植された。
  • Windows Presentation Foundation (WPF) は、.NET Framework 3.0以降で利用可能なグラフィックスサブシステムである。Direct3Dによるハードウェアレンダリングアクセラレーションをサポートしている。WPFでのユーザーインターフェイスは、任意のCLR言語(例えばC#/VB.NET)やXMLベースのXAML言語を使って定義できる。WPF向けのGUIビルダーとしてMicrosoft Expression Blendがある。Windows限定で.NET Core 3.0以降にも移植された。
  • Windowsランタイム (WinRT) およびWindows UI Library (WinUI) は、Windows 8で実装されたModern UIアプリケーション開発・実行用のCOMベースフレームワークである。WPF同様にXAMLを利用したUI定義が可能となっている。

Android[編集]

  • レイアウトXML - 独自のXML形式を利用してレイアウトやカスタム部品を定義できる[9]
  • Jetpack Compose - Kotlinのみを使用してUIを宣言的に記述できるフレームワーク[10]。SwiftUIと類似のコンセプトを持つ。

UNIX と X Window System[編集]

クロスプラットフォーム[編集]

  • Flashベース
    • Adobe Flashを使って多くのウェブブラウザと一部の携帯電話で機能するウィジェットを作成できる。
    • Adobe Flexはウェブブラウザ用の高度なウィジェットを提供する。FlashのウィジェットはFlexで利用可能。
    • FlashとFlexのウィジェットはAdobe Integrated Runtime (AIR) を使ってウェブブラウザを用いずに利用可能となる予定である[いつ?]
    • Flashのフリーソフトウェアとしての再実装がGNU Gnashである。開発中であるが、こちらもFlashのウィジェットをウェブブラウザを使わずに利用可能。
  • XMLベース[注釈 2]
  • XAMLおよび.NETベース
  • Ajaxベース
  • Javaベース
  • C言語/C++ベースおよびマルチ言語ベース
    • CLX (Component Library for Cross-platform) は、ボーランドのDelphi、C++Builder、Kylixで使用されている。Qtをベースにしており、同社のVCLツールキットとよく似たインタフェースとなっている。
    • GTKは、オープンソース (LGPL) であり、主にX Window Systemで使われている。他のプラットフォーム上にも移植あるいはエミュレータが存在する。GNOMEおよびXfceデスクトップ環境で使われている。
    • Qtは、オープンソース (LGPL) であり、Unix/Linux (X Window System)、Windows、macOS、さらに組み込みシステムで使用可能である。また、商用バージョン (QPL) も存在する。KDEで使われている。
    • Tkは、Tcl上あるいは他のスクリプト言語Pythonなど)で使用するウィジェットセット。
    • wxWidgets(以前の名称はwxWindows)は、オープンソース(ゆるいLGPL)であり、C++、PythonPerlから使えるクロスプラットフォームなツールキットである。
    • FLTKは、オープンソース (LGPL) であり、小さくて高速なのが特徴。
    • FOX toolkit は、オープンソース (LGPL) であり、クロスプラットフォームである。
    • Agar移動した?
    • CEGUI
    • GLUI
    • Juce
    • Ultimate++
    • Visual Component Framework (VCF)
    • YAAF
    • NWSTK

カテゴリ分けされていないもの[編集]

脚注[編集]

注釈[編集]

  1. ^ Monoは.NETのクロスプラットフォームかつオープンソースの実装であり、Windows APIのないプラットフォームでも動く互換レイヤーすなわち共通言語基盤 (CLI) を一から実装している。これにより、.NET Framework 2.0の基本APIを提供するが、そのAPI実装は未だ[いつ?]不完全である。
  2. ^ QtやJavaFXなどでもレイアウト記述ファイルとしてXMLは広く使われている。

出典[編集]

  1. ^ D.A.ヤング 著、川手恭輔 訳 『X Toolkit プログラミング』株式会社トッパン、1990年7月30日、13頁。ISBN 4-8101-8502-8 
  2. ^ a b Cocoa (Touch) | Apple Documentation Archive
  3. ^ AppKit | Apple Developer Documentation
  4. ^ Developer - MacApp”. Apple. 2009年3月2日時点のオリジナルよりアーカイブ。2022年3月13日閲覧。
  5. ^ SwiftUIの概要 - Xcode - Apple Developer
  6. ^ UIKit | Apple Developer Documentation
  7. ^ UIKit - 日本語ドキュメント - Apple Developer
  8. ^ WinForms | Mono
  9. ^ レイアウト | Android デベロッパー | Android Developers
  10. ^ Jetpack Compose | Android Developers

外部リンク[編集]