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 その76 - CVE-2026-92392 含む curl の脆弱性22件修正・アップデートを
    curl の脆弱性22件修正 CVE-2026-92392 含む22件の curl の脆弱性に対応したセキュリティーアップデートがリリースされました。
  • Ubuntu 26.10 その38 - Ubuntu 26.10 がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 リリース 2026年10月15日、Ubuntu 26.10 がリリースされました。
  • Ubuntu 26.10 その35 - RISC-V 向け Ubuntu Desktop 登場
    RISC-V 向け Ubuntu Desktop 登場 Ubuntu Desktop 26.10 では、RISC-V 向けデスクトップイメージがリリースされます。
  • Ubuntu 24.04 その104 - Ubuntu 26.04 LTS へアップグレードするには・アップグレードの注意事項
    Ubuntu 26.04 LTS へアップグレードするには 現在 Ubuntu 24.04 LTS を利用しているユーザーは、Ubuntu 26.04 LTS へアップグレードできます。
  • Ubuntu 26.10 その33 - Ubuntu 26.10 β版がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 β版がリリースされました 2026年10月1日、Ubuntu 26.10 β版 がリリースされました。
  • Ubuntu 26.10 その34 - Ubuntu と Rust に対する取り組み(2026年10月)
    Ubuntu と Rust に対する取り組み 2026年10月1日、Ubuntu と Rust に対する取り組みが以下で紹介されました。
  • Ubuntu 26.04 その74 - Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象
    Qt6 で構築されたアプリがクラッシュする現象 Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象が報告されています。
  • Linux Mint その294 - Linux Mint 27 の開発とリリース方針の変更・アラーム管理アプリの開発
    Linux Mint 月刊ニュース Linux Mint 開発チームは Linux Mint 月刊ニュースにて、Linux Mint の開発状況や取り組みを紹介しています。
  • Ubuntu 26.04 その77 - PHP に php2shell(CVE-2026-109618/CVE-2026-109619)の脆弱性・アップデートを
    PHP に php2shell の脆弱性 PHP に php2shell と呼ばれる致命的な脆弱性が見つかりました。
  • Linux その440 - uutils coreutils 0.11.0 でコマンド実行時のエラーメッセージを大幅に改良
    コマンド実行時のエラーメッセージを大幅に改良 uutils coreutils 0.11.0 で、コマンド実行時のエラーメッセージが大幅に改良されました。
記事のピックアップ
オプション