WebKitGTK からの移行ガイド

作成者: BlinkGTK Project
最終更新: 2026-07-30

English

WebKitGTK 6.0 (GTK4) のアプリケーションを BlinkGTK に移すためのガイドです。
最短の移行手順を最初に、次に機械的な置換表、API 対応表、設計の違い、
そして「WebKitGTK にあって BlinkGTK に無いもの」を正直に記します。
記載されている BlinkGTK の API はすべて、配布物のヘッダと共有ライブラリに
実在することを機械検証しています。

まず動かす

典型的な WebKitGTK アプリの移行は、コードの変更としては数箇所です。
それに加えて BlinkGTK 固有の準備が 2 つ あります (WebKitGTK には無い手順):

  1. リンクは pkg-config 経由が必須pkg-config --cflags --libs blinkgtk-0.1
    手書きリンクだと必要なライブラリの直接リンクが漏れ、起動直後に落ちます
  2. Chromium ランタイムリソースの配置icudtl.datlocales/ などが
    実行時に必要です。パッケージ同梱のラッパー run-with-resources を使うか、
    blink_gtk_set_resources_path() で場所を指定します

いずれも アプリのビルド に完全な手順があります。

Before — WebKitGTK 6.0

#include <webkit/webkit.h>
#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    gtk_init();

    GtkWidget *window = gtk_window_new();
    gtk_window_set_title(GTK_WINDOW(window), "WebKitGTK Browser");
    gtk_window_set_default_size(GTK_WINDOW(window), 1024, 768);

    WebKitWebView *web_view = WEBKIT_WEB_VIEW(webkit_web_view_new());
    gtk_window_set_child(GTK_WINDOW(window), GTK_WIDGET(web_view));

    webkit_web_view_load_uri(web_view, "https://example.com/");
    gtk_window_present(GTK_WINDOW(window));

    GMainLoop *loop = g_main_loop_new(NULL, FALSE);
    g_main_loop_run(loop);
    return 0;
}

After — BlinkGTK

#include <blink_gtk/blink_gtk.h>
#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    /* 変更 1: エンジンの初期化を GTK より先に */
    if (!blink_gtk_init(&argc, &argv)) {
        g_printerr("blink_gtk_init() failed\n");
        return 1;
    }
    gtk_init();

    GtkWidget *window = gtk_window_new();
    gtk_window_set_title(GTK_WINDOW(window), "BlinkGTK Browser");
    gtk_window_set_default_size(GTK_WINDOW(window), 1024, 768);

    /* 変更 2: WebView 作成。戻り値は GtkWidget* なのでキャスト不要で子にできる */
    GtkWidget *web_view = blink_web_view_new();
    gtk_window_set_child(GTK_WINDOW(window), web_view);

    /* 変更 3: BlinkGTK API へ渡すときは BLINK_WEB_VIEW() でキャスト */
    blink_web_view_load_uri(BLINK_WEB_VIEW(web_view), "https://example.com/");
    gtk_window_present(GTK_WINDOW(window));

    /* 変更 4: メインループは BlinkGTK のものを使う */
    int status = blink_gtk_run_main_loop();

    /* 変更 5: 終了処理 */
    blink_gtk_shutdown();
    return status;
}

ビルドコマンドの変更

# Before
cc app.c -o app $(pkg-config --cflags --libs gtk4 webkitgtk-6.0)

# After
cc app.c -o app $(pkg-config --cflags --libs blinkgtk-0.1)

機械的な置換 (チェックリスト)

API 対応表

設定 (WebKitSettings 相当)

BlinkGTK には Settings オブジェクトがありません。設定は WebView に直接行います。

WebKitGTK BlinkGTK 備考
webkit_settings_set_enable_javascript() blink_web_view_set_javascript_enabled() Settings 取得が不要
webkit_settings_set_auto_load_images() blink_web_view_set_images_enabled() 同上
webkit_settings_set_enable_html5_local_storage() blink_web_view_set_local_storage_enabled() 同上
webkit_settings_set_default_font_size() blink_web_view_set_default_font_size() 同名
webkit_settings_set_default_charset() blink_web_view_set_default_encoding()
webkit_settings_set_user_agent() blink_web_view_set_user_agent() 対応済み

set_* に対応する get_* も同様にあります。詳細:
Settings API

ナビゲーション

WebKitGTK BlinkGTK 備考
webkit_web_view_load_uri() blink_web_view_load_uri()
webkit_web_view_load_html() blink_web_view_load_html()
webkit_web_view_go_back() / go_forward() blink_web_view_go_back() / go_forward() 同名
webkit_web_view_can_go_back() / can_go_forward() blink_web_view_can_go_back() / can_go_forward() 同名
webkit_web_view_reload() blink_web_view_reload() 同名
webkit_web_view_stop_loading() blink_web_view_stop()
webkit_web_view_get_uri() / get_title() blink_web_view_get_uri() / get_title() 戻り値は g_free() が必要
webkit_web_view_get_estimated_load_progress() blink_web_view_get_estimated_load_progress() 同名
webkit_web_view_is_loading() blink_web_view_is_loading() 同名

詳細: Navigation API

シグナル

WebKitGTK BlinkGTK 備考
load-changed load-changed 同名。イベント値は BlinkLoadEvent
load-failed load-failed 同名
notify::title title-changed 専用シグナルになった
notify::uri uri-changed 同上
permission-request permission-request 同名。既定は拒否、blink_permission_request_allow() / deny() で応答

詳細: Signals API

ページとの対話

WebKitGTK BlinkGTK 備考
webkit_web_view_evaluate_javascript() blink_web_view_execute_javascript()
webkit_user_content_manager_add_script() blink_web_view_inject_user_script() ContentManager 取得が不要
webkit_user_content_manager_add_style_sheet() blink_web_view_inject_user_stylesheet() 同上
script message handler (script-message-received) blink_web_view_register_message_handler() ページ側は window.blinkgtk.postMessage()
(C → ページへの送信は WebKitGTK では JS 評価で代用) blink_web_view_send_message_to_page() ページ側は window.blinkgtk.addMessageHandler()
webkit_web_context_register_uri_scheme() blink_web_view_register_custom_scheme() / register_custom_scheme_full() WebContext 不要、WebView 単位

詳細: アプリ連携 API

UI のカスタマイズ

WebKitGTK BlinkGTK 備考
script-dialog シグナル blink_web_view_set_javascript_dialog_handler() alert / confirm / prompt
run-file-chooser シグナル blink_web_view_set_file_chooser_handler() 応答は file_chooser_response()
WebKitDownload (decide-policy 等) blink_web_view_set_download_handler()
authenticate シグナル blink_web_view_set_auth_handler() 応答は auth_response()
TLS エラーポリシー blink_web_view_set_certificate_error_handler()
enter-fullscreen / leave-fullscreen blink_web_view_set_fullscreen_handler()

詳細: UI ハンドラ API

その他の機能

WebKitGTK BlinkGTK 備考
webkit_web_view_set_zoom_level() blink_web_view_set_zoom_level() 同名
WebKitFindController blink_web_view_find_in_page() / stop_finding() Controller 取得が不要
WebKitPrintOperation blink_web_view_print_to_pdf() PDF 出力のみ (印刷ダイアログは無い)
webkit_web_view_get_snapshot() blink_web_view_capture_screenshot() / _async() PNG 保存
WebKitCookieManager blink_web_view_get_cookies() / set_cookie() / delete_all_cookies() Manager 取得が不要
WebKitWebInspector blink_web_view_open_devtools() Chrome DevTools が開く

目的から探す場合は 逆引きリファレンス が便利です。

考え方が変わるところ

  1. Settings / Manager / Controller オブジェクトが無い — WebKitGTK では
    webkit_web_view_get_settings() などで補助オブジェクトを取得してから操作しますが、
    BlinkGTK ではすべて WebView に直接 API を呼びます
  2. 型は GtkWidget*blink_web_view_new()GtkWidget* を返します。
    GTK の API にはそのまま渡し、BlinkGTK の API には BLINK_WEB_VIEW() でキャストして渡します
  3. 初期化順序が厳密blink_gtk_init() を GTK より先に呼びます
    (ライフサイクル図 参照)
  4. 実行時リソースの配置が必要 — Chromium 由来のデータファイル群が実行時に要ります。
    WebKitGTK には無い手順なので、移行時に最初に確認してください
  5. Wayland セッション必須 — BlinkGTK は Wayland 専用です。X11 のみの環境では
    動作しません (WebKitGTK は X11 でも動くため、ここは明確な差です)
  6. 開発ツールは Chrome DevTools — WebInspector の代わりに、リモートデバッグを含む
    Chrome DevTools が使えます (DevTools API)

WebKitGTK にあって BlinkGTK に (まだ) 無いもの

正直に書きます。以下は現時点で相当機能がありません。

これらが移行の妨げになる場合は、
不具合報告・要望 または
contact@blinkgtk.org までお知らせください。

よくある質問

WebKitGTK と BlinkGTK を同じプロセスで使えますか

推奨しません。どちらも大きなランタイムを持つため、メモリ使用量が増えるほか、
シンボルやメインループの取り合いなど予期しない干渉の恐れがあります。

パフォーマンスはどうですか

JavaScript は V8、描画は Chromium のパイプラインで実行されます。静止中のページで
CPU をほぼ消費しない設計です。一方、Chromium 系はメモリ使用量が WebKit より
多くなる傾向があります。用途に応じて評価してください
(詳細: エンジン比較)。

X11 環境でも動きますか

動きません。Wayland セッションが必須です。

移行はどこから始めるべきですか

このページの「まず動かす」の After のコードを、そのまま
アプリのビルド の手順でビルドして動かしてから、
自分のアプリの置換に進むのが確実です。

関連

変更履歴

日付 内容
2026-07-30 全面改訂 — WebKitGTK 6.0 (GTK4) 前提に統一、User-Agent API 対応済みへ是正 (旧版は「未提供」と記載)、対応表を現行機能 (対話・UI ハンドラ・DevTools 等) に拡張、無い機能の節を追加
2026-01-01 初版