コンテンツにスキップ

GTK (ツールキット)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
GTK
GTKバージョン4 (tk4-widget-factory)
作者 スペンサー・キンボール英語版ピーター・マティス英語版
開発元 GNOMEプロジェクトeXperimental Computing Facility英語版
初版 1998年4月14日 (26年前) (1998-04-14)
最新版 4.16.12[1] ウィキデータを編集 - 2025年1月3日 (41日前) [±]
リポジトリ ウィキデータを編集
プログラミング
言語
C言語, CSS[2]
対応OS クロスプラットフォーム
種別 ウィジェット・ツールキット
ライセンス LGPLv2
公式サイト gtk.org ウィキデータを編集
テンプレートを表示

GTK (以前は GTK+[3]、またはGIMP Toolkit[4]) は、グラフィカルユーザインタフェース (GUI) を作るためのクロスプラットフォームウィジェット・ツールキットである[5]WaylandおよびX Window System向けの最も人気のあるツールキットの1つである[6]

オープンソース自由ソフトウェアであり、GNU LGPLでライセンスされているため、自由ソフトウェアとプロプライエタリソフトウェアの両方で使用できる。

GTKチームは定期的に新しいバージョンをリリースしている[7]。GTK 4とGTK 3はメンテナンスされているが、GTK 2はサポートが終了している[8]。GTK 1はCinePaintプロジェクトによって独立してメンテナンスされている[9]

ソフトウェアアーキテクチャ

[編集]
GTKツールキット
GTK の簡略化されたソフトウェアアーキテクチャ。PangoGDK英語版ATK英語版GIO英語版CairoGLib
GDKにはX11Wayland、Broadway(HTTP)、QuartzGDIのバックエンドが含まれており、レンダリングにはCairoを使用している。新しいSceneGraphは現在開発中である。

GTKライブラリには、グラフィカルコントロール要素(ウィジェット)のセットが含まれている。バージョン3.22.16には、186個のアクティブなウィジェットと36個の非推奨のウィジェットが含まれている[10]。GTKは、C言語で書かれたオブジェクト指向ウィジェットツールキットであり、GObjectGLibオブジェクトシステム)を使用している。GTKは主にX11Waylandで使用されるが、Microsoft WindowsWindows APIを使用)やmacOSQuartzを使用)など、他のプラットフォームでも動作する。BroadwayというHTML5バックエンドも存在する[11][12]

GTKは、描画されるウィジェットの外観を変更するように設定できる。これは、さまざまな表示エンジンを利用して行われる。使用中のプラットフォーム上のネイティブウィジェットの外観をエミュレートしようとする表示エンジンもいくつか存在する。

2005年にリリースされたバージョン2.8以降、GTKはグラフィカルコントロール要素ウィジェットのほとんどをCairoを使用してレンダリングするようになった[13]。GTKバージョン3.0以降、すべてのレンダリングはCairoを使用して行われる[14]

2018年1月26日、DevConf.cz英語版で、マティアス・クラセン(Matthias Clasen)はGTK 4開発の現状について概要を説明し、GTK 3でのレンダリングと入力の仕組み、GTK 4(> 3.90)での変更点とその理由について詳細に説明した[15]。2019年2月6日、GTK 4ではプロジェクト名から「+」が削除されることが発表された[16]

GTK Drawing Kit (GDK)

[編集]

GDKは、基盤となるウィンドウシステムおよびグラフィックスシステムによって提供される低レベル関数のラッパーとして機能する。

GTK Scene Graph Kit (GSK)

[編集]

GSKは、GTKのレンダリングおよびシーングラフ英語版APIである。GSKは、グラフィカルコントロール要素(ウィジェット)とレンダリングの間に位置する。GSKは、最終的に2017年3月にリリースされたGTKバージョン3.90に統合された。

GtkBuilder

[編集]

GtkBuilderを使用すると、コードを記述せずにユーザインターフェイスを設計できる。インターフェイスは、手動、またはGUIデザイナーによって生成されるExtensible Markup Language(XML)ファイルで記述され、実行時に読み込まれ、オブジェクトが自動的に作成される。ユーザインターフェイスの記述は、使用されているプログラミング言語に依存しない。

言語バインディング

[編集]

C++、Genie、JavaScriptPerlPythonValaなど、C以外の言語からGTKを使用するための言語バインディングが利用可能である。

バックエンド

[編集]

GTKはさまざまなバックエンドをサポートしており、システムや環境に応じてGTKアプリケーションを表示するさまざまな方法を提供する。GTKバックエンドの例は次の通りである。

  • Wayland – Linuxシステムで使用される、X11のモダンな代替。
  • X11 – X.Orgディスプレイサーバーを使用するLinuxシステムのデフォルト。
  • Win32 – WindowsでGTKアプリケーションを実行することができる。
  • Quartz – macOSのサポート。
  • Broadway – HTML5WebSocketを使用して、WebブラウザーでGTKアプリケーションを実行できる[11][12]

開発ツール

[編集]

GUIデザイナ

[編集]
Cambalache Interface Designer

GTKには複数のGUIデザイナが存在する。以下にGTK GUIデザイナの一部を紹介する。

  • Cambalache – Gladeの後継で、GTK 4をサポートしている[17]
  • Glade – GTK組み込みのGUI記述形式であるGtkBuilderをサポートしている(現在、アクティブにメンテナンスされていない)。
  • Gazpacho – Pythonで書かれたGTKツールキット用のGUIビルダー[18]
  • Crow Designer – 独自のGuiXml形式とGuiLoaderライブラリを使用している[19]
  • Stetic – MonoDevelopの一部で、Gtk#向けである。
  • Gambas(バージョン2.0以降、BASICベース)
  • Xojo
  • Lazarus(LinuxではデフォルトでGTK 2とのインターフェイスとなる)

GTKインスペクタ

[編集]
GTKインスペクタ

GTKインスペクタはGTKに組み込まれたインタラクティブなデバッグツールであり、UI要素の検査と変更、CSSの変更のテスト、ウィジェット構造のリアルタイム分析を行うことができる。Control + Shift + IまたはControl + Shift + Dのショートカットを使用するか、GTK_DEBUG=interactive環境変数を設定することで有効にできる[20]。GTKバージョン3.14で導入された[21][22]

機能

[編集]
  • インタラクティブなデバッグ
  • リアルタイムのCSSテストと変更
  • 詳細な検査のためのウィジェットの拡大
  • UI構造の分析とオブジェクトプロパティの検査
  • 環境変数によるカスタマイズ可能な表示設定
  • 詳細なオブジェクト検査(タイプ、状態、プロパティ、CSS、アクションなど)
  • グローバルアプリケーション情報の表示
  • CSSルールのデバッグ
  • レンダリングパイプラインの記録と検査

開発

[編集]

GTKは主にGNOMEプロジェクトによって開発されている。GNOMEプロジェクトはGNOME開発プラットフォームとGNOMEデスクトップ環境も開発している[23]。GTKは主にC言語で書かれており[24]、多くの言語バインディングが利用可能である。GTKの開発は緩く管理されている。

GNOMEの開発者とユーザーは、毎年開催されるGNOMEユーザーと開発者のヨーロッパ会議GUADECミーティングに集まり、GNOMEの現状と将来の方向性について議論する[25]。GNOMEは、他のデスクトップとの相互運用性を高めるために、freedesktop.orgの標準とプログラムを取り入れている[要出典]

2016年9月1日、GTK開発ブログの投稿で、GTKの将来の番号付けスキームなどが示された[26]。2016年秋にリリースされたGTKバージョン3.22は、3.x系の最後のリリースとなる予定だったが、2018年秋にはGTK 4の遅れによりバージョン3.24が続いた[27]。GTK 4の開発では、2020年12月に最初のGTK 4.0安定リリースが開始されるまで、バージョン名3.90、3.92などが使用されていた[28]。最初の安定したGTK 4リリースにもかかわらず、GTKを使用する一部のアプリケーションは依然としてGTK 2に依存している。たとえば、2022年1月現在、GIMPはまだGTK 3に移植されていない[29]

ビルド自動化

[編集]

GTKのマスターブランチはビルド自動化Mesonを利用している。GTK(およびGNOME、GLibなど)は、以前はビルド自動化システムとしてGNU Build System(Autotools)を利用していた。2017年8月14日以降、Autotoolsビルドシステムファイルは削除された[30]

批判

[編集]

GTKに対する最も一般的な批判は、主要なアップデートにおける下位互換性の欠如であり、特にAPIとテーマにおいてそれが顕著である[31][32]。その結果、アプリケーション開発者やテーマ開発者は、GTKの新しいバージョンで動作するようにコードを書き直す必要がある。

GTK 3.xの開発サイクル中にマイナーリリース間で互換性が途切れたのは、現代のユーザーが期待する機能の提供や、影響力が増しているWaylandのサポートなど、革新への強いプレッシャーが原因であるとBenjamin Otteは説明した。GTK 4のリリースにより、革新の必要性によるプレッシャーは解消され、安定性と革新のバランスはより安定することになる[33]。同様に、テーマに対する最近の変更は、APIのその部分を改善し安定化させることを特に意図している。

  • Aurélien GâteauはGwenviewをGTKアプリケーションとして開始したが、開発の初期段階でQtに切り替えた[34]
  • Subsurfaceの共同開発者であり、IntelのオープンソーステクノロジーセンターのメンバーでもあるDirk Hohndelは、GTK開発者が攻撃的でコミュニティの要求のほとんどを無視していると批判した[35]
  • LXDE(GTKバージョンは廃止され、すべての取り組みはQtへの移植に集中)の開発者であるHong Jen Yeeは、GTKツールキットのバージョン3の根本的なAPI変更とメモリ使用量の増加を軽蔑し、PCManFMをQtに移植した。PCManFMは、GTKとQtの両方で同時に開発されている[36]
  • Audaciousミュージックプレーヤーはバージョン3.6でQtに移行した[37]。開発者らが述べた理由には、クライアント側のウィンドウ装飾への移行が含まれ、これによりアプリケーションが「GNOME風で場違い」に見えるようになったと彼らは主張している[38]
  • Wiresharkは、GTKのクロスプラットフォームサポートで良い経験がなかったため、Qtに切り替えた[39]

使用例

[編集]
GTKの Waylandサポートには、アプリケーションもWaylandに対応させる必要がある。
GIMP 2.8のスクリーンショット - GTKは、メニュー、ボタン、入力フィールドなど、プログラムのインターフェースコンポーネントの管理を担当している。

GTKをウィジェットツールキットとして使用するアプリケーションには、以下のものがある。

GTKプログラムは、必要なライブラリがインストールされていれば、X11Waylandをベースにしたデスクトップ環境や、GTKで作成されていない他のデスクトップ環境でも実行できる。これには、X11.appがインストールされていればmacOSも含まれる。GTKはMicrosoft Windowsでも実行でき、PidginGIMPなどの人気のあるクロスプラットフォームアプリケーションで使用されている。クロスプラットフォームGUIツールキットであるwxWidgetsは、LinuxでデフォルトでGTKを使用する[40]。他のポートにはDirectFB(例えばDebianインストーラで使用)がある。

デスクトップ環境

[編集]

いくつかのデスクトップ環境はウィジェット・ツールキットとしてGTKを使用している。

開発中

[編集]
  • GNOME - GTKをベースとしており、GNOMEネイティブのプログラムはGTKを使用する。
  • Budgie - Solus OSの後継であるSolusオペレーティングシステム用にゼロから構築された。
  • Cinnamon - GNOME 3のフォークで、GTKバージョン3を使用する。
  • MATE - GNOME 2のフォークで、バージョン1.18以降はGTK 3を使用する。
  • Xfce - バージョン4.14以降はGTK 3ベース。
  • Pantheon - elementary OSによって開発されており、GTK 3のみを使用する。
  • Sugar - 青少年初等教育用のデスクトップ環境で、GTK、特にPyGTKを使用する。
  • Phosh - PureOS用に設計されたモバイルUI。
  • LXDE(軽量X11デスクトップ環境) - GTK 2をベースとしている。
  • Unity - Ubuntuの以前のデフォルトのデスクトップ環境。

非アクティブ

[編集]

ウィンドウマネージャ

[編集]

次のウィンドウマネージャはGTKを使用している。

GtkSourceView

[編集]

シンタックスハイライトにはGtkSourceView(ソースコード編集ウィジェット)が利用できる。GtkSourceView は、GTK とは別に GNOME によってライブラリ gtksourceview として管理されている。gsv への名称変更が計画されている[要出典]

GtkSpell

[編集]

GtkSpell は GTK とは別のライブラリである。GtkSpell は GTK と Enchant に依存している。Enchant は実際のスペルチェッカーエンジンやソフトウェアである ispell、Hunspell英語版 などのラッパーである。GtkSpell は GTK の GtkTextView ウィジェットを使用してスペルミスのある単語を強調表示し、置換を提案する。

歴史

[編集]

Linux/Unix

[編集]

GTKは当初、Motifの代替としてGIMPのために設計され、用いられた。ピーター・マティス英語版はMotifに失望し、彼自身のGUIツールキット、GIMP toolkitが書かれた。これはGIMP 0.60のリリースでMotifを置き換えることに成功した[41]。最終的にGTKは書き直され、オブジェクト指向となり、GTK+に名前が変更された[42]。これはGIMPの0.99リリースで最初に使われた。GTKはその後、GNOME Foundationによってメンテナンス対応がなされGNOMEデスクトップ環境で使われるようになった。

GTK 2

[編集]

GTK 2.0.0リリース(2002年[43])シリーズでは、Pangoを使用したテキストレンダリングの改善、新しいテーマエンジン、アクセシビリティ・ツールキット英語版を使用したアクセシビリティの改善、UTF-8文字列を使用したUnicodeへの移行、より柔軟なAPIなどの新機能が導入された。バージョン2.8から、GTK 2はベクターグラフィックスの描画のためのライブラリとしてCairoに依存するようになっている。

GTK 3

[編集]

GTKバージョン3.0.0(2011年[44])には、入力デバイス処理の改良、CSSのような構文で書かれたテーマのサポート、開いている他のGTKアプリケーションに関する情報を受け取る機能が含まれていた。

2019年2月のハッカソン中に「+」が削除され、名前が「GTK」に戻った[45]

OpenVMS

[編集]

HPは、必要なOpenVMSの変更をGTKバージョン1.3の開発ストリームに統合することを目標としていたが、これは実現しなかった[46]。OpenVMS用のGTKの最新バージョンはバージョン1.2.10である[47]

GTK 4

[編集]

GTK 4 開発サイクル(GTK 3.92 など)中に行われた主な変更の1つは、ユーザーカスタマイズオプション(GTK+ 2で設定可能な個別のキーボードショートカットなど)の削除と、GTKが提供する基本クラスに機能をエンコードするのではなく、補助オブジェクトに機能を委任したことである。その他の変更には次のものがある。

  • GtkWidgetによって記述されたシグナルハンドラーからのイベント処理は、イベントコントローラーに委任される。
  • レンダリングは、GtkSnapshotオブジェクトに委任される。
  • レイアウトメカニズムは、GtkWidgetからGtkLayoutManagerに委任される。

2018年のDevConf.cz英語版で、マティアス・クラセン(Matthias Clasen)は当時のGTK 4開発の現状について概要を説明し、GTK 3でのレンダリングと入力の仕組み、GTK 4でどのような変更が行われたか、その変更の理由などについて詳細に説明した。GTK 4で可能になったことの例も示された[48]

関連項目

[編集]

脚注

[編集]
  1. ^ "4.16.12"; 閲覧日: 2025年1月4日; 出版日: 2025年1月3日.
  2. ^ The GTK Open Source Project on Open Hub: Languages Page”. www.openhub.net. March 28, 2019時点のオリジナルよりアーカイブMarch 28, 2019閲覧。
  3. ^ Bassi, Emmanuele (2019年2月6日). “Project rename to "GTK"”. mail.gnome.org. GNOME mailinglist. November 7, 2020時点のオリジナルよりアーカイブ2019年2月7日閲覧。
  4. ^ A brief description on how GTK was born.”. www.gtk.org. June 9, 2023時点のオリジナルよりアーカイブJuly 5, 2023閲覧。
  5. ^ The GTK+ Team. “GTK+ Features”. May 25, 2019時点のオリジナルよりアーカイブ。September 8, 2014閲覧。
  6. ^ Documentation”. www.x.org. December 21, 2019時点のオリジナルよりアーカイブNovember 22, 2019閲覧。
  7. ^ Projects/GTK/Roadmap - GNOME Wiki!”. wiki.gnome.org. May 22, 2019時点のオリジナルよりアーカイブNovember 22, 2019閲覧。
  8. ^ GTK 4.0 – GTK Development Blog” (英語) (December 16, 2020). May 28, 2023時点のオリジナルよりアーカイブ2021年10月18日閲覧。
  9. ^ Robin Rowe / GTK1 · GitLab”. GitLab. March 9, 2023時点のオリジナルよりアーカイブFebruary 22, 2023閲覧。
  10. ^ GTK+ 3 Reference Manual”. June 23, 2021時点のオリジナルよりアーカイブ2017年7月15日閲覧。
  11. ^ a b Using GTK+ with Broadway”. GNOME Developer. GNOME. June 14, 2021時点のオリジナルよりアーカイブMarch 6, 2018閲覧。
  12. ^ a b Broadway - GitHub symbiose/symbiose Wiki”. GitHub. June 28, 2023時点のオリジナルよりアーカイブMarch 6, 2018閲覧。
  13. ^ GTK+ to Use Cairo Vector Engine” (February 5, 2005). 2009年12月27日閲覧。
  14. ^ Gtk: Migrating from GTK 2.x to GTK 3” (英語). docs.gtk.org. May 26, 2023時点のオリジナルよりアーカイブ2022年6月16日閲覧。 “All drawing in GTK 3 is done via Cairo.”
  15. ^ GTK+ to Use Cairo Vector Engine” (February 5, 2005). 2009年12月27日閲覧。
  16. ^ Gtk: Migrating from GTK 2.x to GTK 3” (英語). docs.gtk.org. May 26, 2023時点のオリジナルよりアーカイブ2022年6月16日閲覧。 “All drawing in GTK 3 is done via Cairo.”
  17. ^ glade - man pages section 1: User Commands”. docs.oracle.com. 2024年9月11日閲覧。
  18. ^ Debian -- Package Search Results -- gazpacho”. packages.debian.org. June 28, 2023時点のオリジナルよりアーカイブNovember 22, 2019閲覧。
  19. ^ Nothing-personal - A development site for Crow Designer, GuiLoader and Rally - Google Project Hosting”. 2013年1月24日時点のオリジナルよりアーカイブ。2014年2月17日閲覧。
  20. ^ GTK Inspector” (英語). GNOME Developer Documentation. 2024年9月14日閲覧。
  21. ^ Introducing GtkInspector” (2014年5月15日). May 17, 2014時点のオリジナルよりアーカイブMay 17, 2014閲覧。
  22. ^ Another GtkInspector update” (2014年7月11日). July 14, 2014時点のオリジナルよりアーカイブJuly 13, 2014閲覧。
  23. ^ GNOME Quick SWOT Analysis”. The GNOME Project. March 18, 2014時点のオリジナルよりアーカイブMarch 18, 2014閲覧。
  24. ^ GNOME Languages”. Ohloh. Black Duck Software. May 22, 2014時点のオリジナルよりアーカイブ。May 22, 2014閲覧。
  25. ^ About”. GNOME Users And Developers European Conference (GUADEC). October 4, 2011時点のオリジナルよりアーカイブ。December 3, 2011閲覧。
  26. ^ Versioning and long term stability promise in GTK”. GTK development blog (2016年9月1日). September 21, 2016時点のオリジナルよりアーカイブSeptember 2, 2016閲覧。
  27. ^ GTK+ 3.24 To Deliver Some New Features While Waiting For GTK4”. www.phoronix.com. April 22, 2024時点のオリジナルよりアーカイブApril 2, 2021閲覧。
  28. ^ GTK 4.0”. GTK development blog (2020年12月16日). May 28, 2023時点のオリジナルよりアーカイブOctober 18, 2021閲覧。
  29. ^ “Development release GIMP 2.99.2 is out”. Gimp news. (2020年11月6日). オリジナルのApril 10, 2021時点におけるアーカイブ。. https://web.archive.org/web/20210410211809/https://www.gimp.org/news/2020/11/06/gimp-2-99-2-released/ January 6, 2022閲覧。 
  30. ^ Build system change GTK's master branch”. mail.gnome.org. August 15, 2017時点のオリジナルよりアーカイブOctober 29, 2018閲覧。
  31. ^ How Does One Create A Gtk+ Application? – Morten Welinder”. blogs.gnome.org (June 23, 2014). July 1, 2014時点のオリジナルよりアーカイブJune 3, 2017閲覧。
  32. ^ mclasen (November 20, 2015). “A GTK+ update”. Goings on. May 2, 2016時点のオリジナルよりアーカイブJune 3, 2016閲覧。
  33. ^ GUADEC2013: Benjamin Otte talks about GTK+”. GUADEC. March 6, 2014時点のオリジナルよりアーカイブMarch 5, 2014閲覧。
  34. ^ Aurélien Gâteau (2021年10月3日). “The story behind Gwenview name”. agateau.com. 2024年4月22日時点のオリジナルよりアーカイブ。2024年12月15日閲覧。 “Yes, you read this right! Gwenview started its life as a GTK+ application!”
  35. ^ Larabel, Michael (2014年1月12日). “The Biggest Problem With GTK & What Qt Does Good”. Phoronix. July 1, 2016時点のオリジナルよりアーカイブ2014年9月10日閲覧。
  36. ^ Hong Jen Yee (2013年3月26日). “PCManFM Qt 0.1.0 released”. June 7, 2013時点のオリジナルよりアーカイブ2014年9月10日閲覧。
  37. ^ Audacious - An Advanced Audio Player”. audacious-media-player.org. July 28, 2019時点のオリジナルよりアーカイブNovember 22, 2019閲覧。
  38. ^ Lindgren, John (2014年5月6日). “Ugly window decorations and how to fix them (GTK 3.12)”. October 13, 2014時点のオリジナルよりアーカイブ2014年10月21日閲覧。
  39. ^ Gerald Combs (2013年10月15日). “We're switching to Qt”. October 19, 2013時点のオリジナルよりアーカイブ2015年8月19日閲覧。
  40. ^ GTK+”. WxWidgets Compared To Other Toolkits. October 5, 2007時点のオリジナルよりアーカイブAugust 28, 2007閲覧。
  41. ^ LinuxWorld - Where did Spencer Kimball and Peter Mattis go?”. April 17, 1999時点のオリジナルよりアーカイブ。2013年8月19日閲覧。
  42. ^ What is the + in GTK+?” (2011年). 2012年3月26日時点のオリジナルよりアーカイブ。2014年3月18日閲覧。
  43. ^ https://mail.gnome.org/archives/gtk-devel-list/2002-March/msg00161.html
  44. ^ https://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00020.html
  45. ^ Rename some references to GTK+ (d080be3e) · Commits · GNOME / gtk”. gitlab.gnome.org (February 4, 2019). February 25, 2021時点のオリジナルよりアーカイブFebruary 5, 2019閲覧。
  46. ^ HP OpenVMS systems - GTK+”. July 13, 2018時点のオリジナルよりアーカイブJuly 12, 2018閲覧。
  47. ^ HP OpenVMS systems - GTK+”. July 13, 2018時点のオリジナルよりアーカイブJuly 12, 2018閲覧。
  48. ^ GTK+ 4 Status Update”. Fedora People. April 22, 2024時点のオリジナルよりアーカイブApril 22, 2024閲覧。

外部リンク

[編集]