kledgeb UbuntuやLinuxの最新情報を紹介

Linux その203 - GTKとLibadwaitaの役割・デザイン言語の分離

GTKとLibadwaitaの役割

GTKとLibadwaitaの役割が以下で紹介されています。


  • Libadwaita: Splitting GTK and Design Language

アプリを構築するためのライブラリー

GTKもLibadwaitaも、GUIアプリを構築するための機能を提供しています。

  • GTK
  • Libadwaita

GUIアプリを構築するためのライブラリーという大枠の観点では、どちらも同じ枠に存在するライブラリーです。
しかし歴史的な経緯から、お互いの役割や、それぞれのライブラリーが対象とする機能の範囲が異なります。

元々Libadwaitaは存在していなかったライブラリーであり、GTKよりも後に登場したライブラリーです。
GTKは1998年に登場しましたが、Libadwaitaはもっとずっと後の2021年に登場しました。

GTK

GTKはGUIアプリに必要なプッシュボタンやチェックボックスなど、広範にGUIパーツを提供するライブラリーです。
このGUIパーツのことをウィジェットと言います。
またGTKのようにGUIアプリの構築に必要な機能を提供するライブラリーのことを、ツールキットとも表現します。

GTKはGUIアプリに様々なウィジェットを提供するライブラリーであり、GUIアプリにとって礎となるライブラリーです。
またGTKはクロスプラットフォームで汎用的に活用可能なライブラリーでもあります。

GTKには複数のメジャーバージョンがありますが、現在最新版のGTKはGTK4です。
前メジャーバージョンのGTK3よりもパフォーマンスが改善されています。

GTKはGNOMEの方針に影響を受ける

さてGTKを開発及びメンテナンスするGTKプロジェクトは、それを包括するGNOMEプロジェクトの一部であり、GNOMEの方針に影響を受けやすいライブラリーです。

そのためGNOME以外の環境でも動作する汎用なGUIアプリをGTKを利用して開発する時に、GNOMEの方針によって影響を受けたGTKの機能とアプリの要件が衝突するケースもあります。

デザイン言語

アプリケーションデザインにおけるデザイン言語とは、ユーザーに視覚的な特性を提供する要素のことです。
例えばフォントや色、ウィジェットの形状やフォーム、レイアウトなど、ユーザーの視覚を通じて情報を提供する要素がデザイン言語になります。

GNOMEのデザインパターンに沿ったウィジェット

GNOMEにはGNOMEのデザイン方針があります。

  • GNOME Human Interface Guidelines(GNOME HIG)

GNOME向けに開発されているアプリはGTKで開発されており、GNOME以外の環境で利用すると、そのUIデザインに違和感を覚えるケースもあるでしょう。

例えばハンバーガーボタンやヘッダーバー、サイズの大きいボタンやマージンレイアウトは、その一例です。
これらのウィジェットやデザインはWindowsで馴染みあるデザインではありませんし、GNOME以外の環境で積極的に活用されているデザインでもありません。

衝突

GTKにGNOMEの事情が取り込まれてきた結果、GNOMEとそれ以外の環境のデザイン方針が衝突するようになっていきました。

一般的にGTKやQtにようにクロスプラットフォームで提供されるツールキットは、特定のOSやデスクトップに依存しないウィジェットを提供します。
しかしクロスプラットフォームで提供され汎用性を備えているはずのGTKから、その目的が失われつつありました。

メンテナンスコストの増大

また同様にGTKにGNOMEの事情が取り込まれてきた結果、GNOME HIGを実現するために開発されたGNOME向けウィジェットと、特定のプロットフォームに依存しない汎用ウィジェットがGTK内に混在するようになりました。

GTKの開発では、GNOME向けウィジェットの開発に重点が置かれてきたため、汎用ウィジェットにGNOMEデスクトップでのみ利用される機能も取り込まれていき、汎用性が失われていきました。

GNOME向けウィジェットと汎用ウィジェットの双方を十分に区別しながら実装されてこなかったため、巨大なコードベースを有するGTKのメンテナンスコストは増大していき、機能の修正や改善が困難になっていきました。

分離の第一歩、Libhandyの登場

この状況の中、技術的な課題を解消するため、2017年にLibhandyの開発が始まりました。
そして最初の試験バージョンが2018年にリリースされました。

  • Libhandy

LibhandyはGTK(主にGTK3)で開発されているGNOME向けのアプリに、GNOMEのポリシーに適合する追加ウィジェットを提供するライブラリーです。
GTK3で開発されているGNOME向けアプリの多くは、Libhandyを利用するようになりました。

しかし元々GTK3で提供されていたウィジェットの多くはGTK3に実装されたままであり、GNOME向けウィジェットと汎用ウィジェットの分離には至りませんでした。

GTK4とLibadwaitaの登場、そしてウィジェットの分離

2020年にGTK4が登場し、そして2021年にLibhandyの後継としてLibadwaitaが登場しました。
LibadwaitaはLibhandyで得られた知見をもとに構築され、拡張性とメンテナンス性が向上しています。

ウィジェットの分離

Libadwaitaの登場によりGNOME向けウィジェットと汎用ウィジェットが分離され、GNOME向けウィジェットはLibadwaitaに移されました。

GTK3の観点から見てみると、GTK3で提供されていたGNOME向けウィジェットは、GTK4で削除または非推奨となり、Libadwaitaで提供されるようになりました。

GtkDialogの例

ダイアログを構築するGtkDialogは、GTK4で非推奨になりました。

  • GtkDialog

代わりにLibadwaitaでAdwDialogとして実装されています。

  • AdwDialog

ちなみにダイアログ作成などGtkDialogのコアとなる機能は、GtkWindowに移されました。

  • GtkWindow

GtkInfoBarの例

ダイアログ無しでメッセージを表示するGtkInfoBarは、GTK4で非推奨になりました。

  • GtkInfoBar

代わりにLibadwaitaでAdwBannerとして実装されています。

  • AdwBanner

GTK4とLibadwaitaの関係

GNOME向けウィジェットと汎用ウィジェットが分離されたことで、それぞれの役割が明確になりました。

GTK4

特定のデスクトップやOSに依存しない汎用的なウィジェットを提供します。
GNOME向けではなく、幅広いプラットフォームに対応したGUIアプリを構築する場合は、GTK4を利用することになります。

この時アプリ開発者から見て不足しているウィジェットがあるかもしれません。
しかしGTKは特定のプラットフォームに適合したアプリを開発する時に、そのプラットフォームに適応した補完ライブラリーを別途用意してアプリを構築することを想定しています。

Libadwaita

GNOME HIGに適合するGNOMEデスクトップ向けウィジェットを提供します。
そのためGNOME向けアプリでは、GTK4とLibadwaitaを組み合わせてGUIアプリを構築することになります。

LibadwaitaはGNOMEプラットフォームに適合したGTKの補完ライブラリーになります。

補完ライブラリーの代替

上記でも紹介したようにLibadwaitaはGNOMEプラットフォーム固有のライブラリーであり、GTKを補完するライブラリーでもあります。

Libadwaitaの代替ライブラリー

Libadwaitaと同様の役割を持ち、別のプラットフォームに対応した補完ライブラリーもあります。

  • Granite
  • He – 1

Libhandyの代替ライブラリー

Libhandyの代替ライブラリーもあります。

  • libxapp
  • libxfce4ui

Linux
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 26.04 その42 - Ubuntu 26.04.1 LTS のリリーススケジュール
    Ubuntu 26.04.1 LTSのリリーススケジュール Ubuntu 26.04.1 LTS のリリーススケジュールを紹介します。
  • Linux Mint その292 - Linux kernel 7.0 採用の Linux Mint 22.3 リリース・システム管理ツールにカーネル管理機能追加など
    Linux Mint 月刊ニュース Linux Mint 開発チームは Linux Mint 月刊ニュースにて、Linux Mint の開発状況や取り組みを紹介しています。
  • Linux その422 - GNOME Boxes の再構築と未来・Flatpak のみの提供やモダンな機能の実装など
    GNOME Boxes の再構築と未来 GNOME Boxes の再構築と未来が以下で紹介されています。
  • Ubuntu 26.04 その68 - Ubuntu 26.04.1 LTS がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.04.1 LTS リリース 2026年8月27日、Ubuntu 26.04.1 LTS がリリースされました。
  • Kubuntu その117 - Kubuntu 26.04 LTS にもっと手厚いサポートを・最高の信頼性を誇る KDE 搭載ディストリビューションを目指して
    最高の信頼性を誇る KDE 搭載ディストリビューションを目指して Kubuntu 26.04 LTS に手厚いサポートが導入されました。
  • Linux その421 - GNOME Shell のデザイン構想と長期的な見通し
    GNOME Shell のデザイン構想と長期的な見通し GNOME Shell のデザイン構想と長期的な見通しが、以下で紹介されています。
  • Linux その420 - KDE Plasma で実装予定の新機能や改善・UI レイアウトの調整やリモートデスクトップの改善など
    KDE Plasma で実装予定の新機能や改善 KDE Plasma で実装予定の新機能や改善を紹介します。
  • Windows その29 - Windows 向け Coreutils 登場・Coreutils のインストールやコマンドの一覧など
    Windows 向け Coreutils 登場 Windows 向け Coreutils が登場しました。
  • Linux その386 - Arch Linux の AUR パッケージで悪意あるコミットが続く・今度はソースコードの難読化か
    Arch Linux の AUR パッケージで悪意あるコミットが続く Arch Linux の AUR パッケージで悪意あるコミット(マルウェア)が続いています。
  • Ubuntu 18.04 その195 - PolicyKitにクラッシュや権限の昇格など複数の脆弱性・今すぐアップデートを
    PolicyKitの脆弱性 2018年7月16日、クラッシュや権限の昇格など複数の脆弱性に対応した「PolicyKit」がリリースされました。
記事のピックアップ
オプション