外部プロジェクトからの BlinkGTK 統合ガイド

別のプロジェクト(独自アプリ、3D ビュワー、EPUB リーダー等)から BlinkGTK を
描画エンジンとして利用する開発者向けのガイドです。

対象: BlinkGTK 本体のソースを改変せず、C API / pkg-config 経由で BlinkGTK を
リンクして使う
開発者。


1. 利用方式の選択

BlinkGTK を外部から利用する方法は 2 つあります。

方式 対象 利点 欠点
A. バイナリパッケージ 一般開発者・配布 Chromium ソース不要、pkg-config が使える インストール先固定
B. Chromium ビルドツリー直接利用 BlinkGTK 開発者・最新機能追跡 最新の BlinkGTK をすぐ試せる Chromium のフルビルドが必要

推奨: まずは 方式 A で試し、深い統合や最新機能が必要になってから方式 B に移行してください。


2. 方式 A: バイナリパッケージからの統合

2.1 インストール

# Fedora / RHEL(RPM)
sudo dnf install ./blinkgtk-bin-1.0.8-1.fc43.x86_64.rpm

# Debian / Ubuntu(DEB)
sudo dpkg -i ./libblinkgtk-0.1-0_1.0.8-1_amd64.deb \
              ./libblinkgtk-0.1-dev_1.0.8-1_amd64.deb

# 汎用 tarball
tar xjf blinkgtk-1.2.2-build6-linux-x86_64.tar.bz2
cd blinkgtk-1.2.2-build6-linux-x86_64
sudo ./install.sh   # デフォルト /usr/local

2.2 pkg-config で確認

pkg-config --cflags blinkgtk-0.1
# → -I/usr/include/blinkgtk-0.1 -I/usr/include/gtk-4.0 ...

pkg-config --libs blinkgtk-0.1
# → -lblinkgtk -lgtk-4 -lglib-2.0 ...

2.3 最小アプリのビルド

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

static void on_activate(GtkApplication* app, gpointer user_data) {
    GtkWidget* win = gtk_application_window_new(app);
    gtk_window_set_default_size(GTK_WINDOW(win), 1024, 768);

    GtkWidget* view = blink_web_view_new();
    gtk_window_set_child(GTK_WINDOW(win), view);

    blink_web_view_load_uri(BLINK_WEB_VIEW(view),
                            "https://example.com");
    gtk_window_present(GTK_WINDOW(win));
}

int main(int argc, char** argv) {
    blink_gtk_init(&argc, &argv);  /* GTK4 は引数なし */
    GtkApplication* app = gtk_application_new(
        "com.example.myapp", G_APPLICATION_DEFAULT_FLAGS);
    g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
    /* BlinkGTK は Chromium のブラウザメインループを回す必要がある。
     * g_application_run() ではそれが回らず、ページが読み込まれない
     * (navigation が commit しない)。register → activate →
     * blink_gtk_run_main_loop() の順にする。
     */
    GError *error = NULL;
    if (!g_application_register(G_APPLICATION(app), NULL, &error)) {
        g_printerr("アプリケーションの登録に失敗しました: %s\n", error ? error->message : "不明なエラー");
        g_clear_error(&error);
        g_object_unref(app);
        return 1;
    }
    g_application_activate(G_APPLICATION(app));
    int rc = blink_gtk_run_main_loop();
    g_object_unref(app);
    blink_gtk_shutdown();
    return rc;
}

include は blink_gtk.h のみです。 v1.2.0-build5 までは GObject 化以前の
内部ヘッダ blink_web_view.h も同梱されていましたが、blink_gtk.h と同時に
include すると conflicting types for 'BlinkWebView' でコンパイルできないため、
それ以降は同梱していません。

cc myapp.c -o myapp $(pkg-config --cflags --libs blinkgtk-0.1 gtk4)

2.4 実行

# パッケージインストール先の bin ディレクトリから実行
/usr/local/blinkgtk-1.0.8/bin/run-with-resources ./myapp

重要: BlinkGTK は Chromium リソースファイル(ICU データ、V8 スナップショット、ロケール)を
バイナリ隣接ディレクトリから読み込みます。パッケージ付属の run-with-resources
スクリプトを使うか、下記の「リソースファイルの配置」を参照してください。


3. 方式 B: Chromium ビルドツリー直接利用

BlinkGTK を third_party/blinkgtk として Chromium ツリーに配置してビルドしている
開発者向け。

3.1 ビルド

cd /path/to/chromium/src
git clone https://blinkgtk.org/ third_party/blinkgtk
# gn args に is_component_build=true を設定済みとする
autoninja -C out/Release_Component \
  third_party/blinkgtk/examples:simple_browser \
  libblink_core.so libblink_platform.so libblink_modules.so libv8.so \
  content_shell.pak v8_context_snapshot.bin \
  locales/ja.pak locales/en-US.pak

3.2 実行(自分のアプリを含む場合)

cd /path/to/chromium/src/out/Release_Component
LD_LIBRARY_PATH=$PWD \
BLINKGTK_GPU_MODE=swiftshader \
./myapp --no-sandbox --no-zygote

必ず out/Release_Component ディレクトリ内から実行してください。
BlinkGTK は起動時に ./icudtl.dat, ./v8_context_snapshot.bin,
./content_shell.pak, ./locales/ を参照します。


4. リソースファイルの配置

外部アプリを Chromium ビルドツリー外で実行する場合、以下のファイルを
実行バイナリと同じディレクトリに配置する必要があります。

4.1 必須ファイル

ファイル 役割 欠如時の症状
icudtl.dat ICU 国際化データ FATAL: Couldn't mmap icu data file
content_shell.pak UI リソース FATAL: LoadFromPath failed
v8_context_snapshot.bin V8 起動高速化 FATAL: Error loading V8 startup snapshot
snapshot_blob.bin V8 初期ヒープ V8 バージョン不一致で SIGTRAP
locales/ ディレクトリ UI 多言語(ja.pak, en-US.pak 等) 起動可能だが翻訳が欠落

4.2 GPU モード別の追加ファイル

SwiftShader モード (BLINKGTK_GPU_MODE=swiftshader):

ファイル 役割
libEGL.so ANGLE EGL 実装
libGLESv2.so ANGLE GLES2 実装
libvk_swiftshader.so SwiftShader Vulkan
vk_swiftshader_icd.json Vulkan ICD マニフェスト

EGL ネイティブモード (BLINKGTK_GPU_MODE=egl):

システムの EGL / GL ライブラリを使用するため、追加ファイルは不要です。
ただしシステムに Wayland 対応の EGL ドライバ(Mesa, NVIDIA 等)が必要です。

4.3 配置ヘルパースクリプト(将来提供予定)

# 将来提供: Chromium ビルドから必要ファイルを抽出
scripts/setup-dev-env.sh \
  --chromium-src=/path/to/chromium/src \
  --target-dir=/path/to/your/app/runtime

5. GPU モードの選び方

BLINKGTK_GPU_MODE 環境変数で切替できます。未設定時は software

モード 画面描画 用途
software 対応 ヘッドレス・サーバ・CI・低スペック環境
swiftshader 対応 仮想マシン・GPU が無い環境・安定優先
egl 対応 デスクトップ・GPU がある環境。v1.2.0-build2 以前は白画面 (次の版で解消)

詳細は GPU モード解説 を参照。


6. よくあるつまずきポイント

6.1 「白画面で何も表示されない」

原因候補:

確認方法:

# blink_gtk_init が完了した行と、画面へ渡した行が出ているか
./myapp 2>&1 | grep -E "blink_gtk_init|FATAL|set_dmabuf_pixels"

6.2 「ICU データがロードできない」

リソースファイルが実行バイナリ隣接にない。icudtl.dat をコピーするか、
blink_gtk_set_icu_data_path() で明示指定。

blink_gtk_set_icu_data_path("/opt/myapp/icudtl.dat");
blink_gtk_init(&argc, &argv);  /* GTK4 は引数なし */  // 必ず init より前に呼ぶ

6.3 「build/libblinkgtk.so がセグフォする」

build/ はリポジトリルートの 古い Meson ビルドのモック出力です。
v1.0.1 で Meson は廃止されましたが、ディスク上に残存している場合があります。

rm -rf build/

外部アプリからリンクする場合は、必ず次のどちらかを参照してください。

6.4 「pkg-config で blinkgtk-0.1 が見つからない」

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
pkg-config --list-all |

grep blinkgtk

tarball インストールの場合はインストール先の lib/pkgconfig
PKG_CONFIG_PATH に追加してください。


7. トラブルシューティング・参考


8. 質問・バグ報告