GTKとLibadwaitaの役割
GTKとLibadwaitaの役割が以下で紹介されています。アプリを構築するためのライブラリー
GTKもLibadwaitaも、GUIアプリを構築するための機能を提供しています。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向けに開発されているアプリは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は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で非推奨になりました。代わりにLibadwaitaでAdwDialogとして実装されています。
ちなみにダイアログ作成などGtkDialogのコアとなる機能は、GtkWindowに移されました。
GtkInfoBarの例
ダイアログ無しでメッセージを表示するGtkInfoBarは、GTK4で非推奨になりました。代わりにLibadwaitaでAdwBannerとして実装されています。
GTK4とLibadwaitaの関係
GNOME向けウィジェットと汎用ウィジェットが分離されたことで、それぞれの役割が明確になりました。GTK4
特定のデスクトップやOSに依存しない汎用的なウィジェットを提供します。GNOME向けではなく、幅広いプラットフォームに対応したGUIアプリを構築する場合は、GTK4を利用することになります。
この時アプリ開発者から見て不足しているウィジェットがあるかもしれません。
しかしGTKは特定のプラットフォームに適合したアプリを開発する時に、そのプラットフォームに適応した補完ライブラリーを別途用意してアプリを構築することを想定しています。
Libadwaita
GNOME HIGに適合するGNOMEデスクトップ向けウィジェットを提供します。そのためGNOME向けアプリでは、GTK4とLibadwaitaを組み合わせてGUIアプリを構築することになります。
LibadwaitaはGNOMEプラットフォームに適合したGTKの補完ライブラリーになります。