バージョン: 1.2.2-build6 / 言語: 日本語 | English
BlinkGTK は「画面を Web
技術で作る」ための部品です。HTML・CSS・JavaScript で
書いた画面を、Linux アプリケーションの中に埋め込んで動かします。
公開しているスクリーンショットが電子書籍リーダーなので日本語の本を読むための
ライブラリに見えるかもしれませんが、それは用途のひとつです。この文書では、
どんな用途に向くのかを先に見て、最後にどの用途にも共通して効く性質を
実際にある機能からまとめます。
AI
はもう研究室の話ではありません。文書の要約と翻訳、会議の書き起こし、
スキャン書類の文字起こし (OCR)、検査画像の判定、窓口の対話案内 —
すでに多くの現場でソフトウェアの標準装備になりつつあります。そして
その多くは、ブラウザの中で動く形 (WebAssembly・WebGPU の上の Web 推論)
でも
公開されています。Transformers.js や ONNX Runtime Web
のような、ブラウザで
モデルを動かすランタイムの生態系が育っているからです。
BlinkGTK は、その同じ基盤を 1 つの GTK
ウィジェットとしてデスクトップ
アプリに持ち込みます。つまりこういうことです — AI
機能への参入に、専用の
機械学習スタックをゼロから組む必要はありません。Web
で動いているものを、
自分のアプリの中で動かすところから始められます。
どんな画面が作れるか、想像してみてください。
共通する強みは一つです。モデルを独自スキームで端末内から配信すれば、
推論の入力データは機器の外に出ません。
プライバシーや守秘が参入障壁に
なっていた現場ほど、オンデバイス AI の価値は大きくなります。
はじめの一歩も具体的です。
なお GPU を使う推論 (WebGPU)
の動作はハードウェアとドライバの組み合わせに
依存します。車載の項と同じく、実機での確認を前提にしてください。
このプロジェクト自身も、日本語組版のページ計算を WebGPU
で速くできないか
という研究を進めています —
同じ好奇心をお持ちの方の実験報告を歓迎します。
不特定多数が触る端末では、画面が意図した状態から動かないことが要件になります。
BLINK_CONTENT_POLICY_KIOSK
で操作を閉じ、全画面で占有し、
独自スキームで端末内のコンテンツを出す —
という組み合わせがそのまま当てはまります。
表示物を HTML
で作れることは、更新のしやすさにも効きます。掲示内容の差し替えが
アプリの作り直しではなく、コンテンツの入れ替えで済みます。
派手に動き続ける画面を組み込みで出す —
エンターテイメント端末の要件は、
実は BlinkGTK がいちばん得意とする形のひとつです。
GPU 描画 (EGL) とソフトウェア描画の両方を持つので、筐体の GPU
構成に
合わせて選べます。ここでも実機での確認を前提にしてください
— 描画性能は
ハードウェアと画面構成に依存します。
車載の画面は通信が切れても動き続ける必要があります。独自スキームで端末内から
配信する形なら、圏外でも表示は成立します。表示倍率の制御は、走行中の視認性
(遠い距離から読む) と停車中の操作 (近い距離で触る)
の切り替えに使えます。
GPU 描画とソフトウェア描画の両方を持っているので、GPU
の構成が限られる車載向け
SoC
でも動かす余地があります。ただし実機での確認は必須です
— 描画経路は
ハードウェアと compositor の組み合わせに依存します。
機器の操作パネルを HTML
で作れると、同じ画面を機器上と手元のブラウザの両方で
使えるようになります。BlinkGTK は機器側の表示を担当します。
JavaScript から C 側の関数を呼ぶ経路
(blink_web_view_execute_javascript() と
スクリプト注入) があるので、Web
の画面とハードウェア制御をつなげられます。
はじめにお断りしておくと、医療機器としての適合性を BlinkGTK
が保証することは
できません。規制対応は機器を作る側の責任範囲です。ここでは、そうした機器でよく
求められる要件に対してどの機能が応えられるかだけを書きます。
| よくある要件 | 対応する機能 |
|---|---|
| 外部ネットワークに出さない | 独自スキームで端末内配信 |
| 操作を限定する (誤操作防止) | コンテンツポリシーで個別に禁止 |
| 表示内容を記録する | blink_web_view_capture_screenshot() |
| 表示の再現性 | 版数を実行時に取得して記録できる |
計測データの可視化や研究機器の GUI
のように、規制の対象外で「グラフや表を
きれいに出したい」という用途であれば、素直に使える領域です。
現在いちばん実績のある領域です。縦組み、ルビ、圏点、縦中横、禁則処理といった
日本語組版の要素を Chromium
のレンダリングエンジンがそのまま扱います。
どこまでできて何がまだかは、Chromium 147 → 152
の新機能
に版ごとの実測付きでまとめています。たとえば Chromium 151 では、
圏点を付けても行送りが太らなくなりました(行間に余裕がある場合)。
現行の Chromium 153
では、ルビの注記を行の高さを膨らませずに置く仕組みが
既定になり、ルビの配置計算そのものが作り直されています(縦書きの段組みでは
適用されない場面があります。詳細は上のリンク先)。
ここまでの用途に共通して効いている部分をまとめます。挙げていない用途でも、
この 6 つに照らせば「自分の用途に合うか」を判断できるはずです。
blink_web_view_register_custom_scheme() で独自の
URL スキームを登録できます。
myapp://screen/main のような URL
を受け取ったら、アプリ側の関数が本文を返す —
という形で、端末の中にあるコンテンツをそのまま配信できます。
Web
サーバーを立てる必要も、外部に出ていく必要もありません。閉じたネットワークの
端末、電波の届かない場所で動く機器、通信を許されない環境で効きます。
blink_web_view_set_content_policy()
で、画面に対する操作を個別に禁止できます。
| 定数 | 禁止する操作 |
|---|---|
BLINK_CONTENT_POLICY_NO_COPY |
クリップボードへのコピー |
BLINK_CONTENT_POLICY_NO_SAVE |
ページの保存 |
BLINK_CONTENT_POLICY_NO_PRINT |
印刷 |
BLINK_CONTENT_POLICY_NO_CONTEXT_MENU |
右クリックメニュー |
BLINK_CONTENT_POLICY_NO_DEVTOOLS |
開発者ツール |
BLINK_CONTENT_POLICY_NO_SELECTION |
文字の選択 |
BLINK_CONTENT_POLICY_NO_SCREENSHOT |
画面の取得 |
BLINK_CONTENT_POLICY_NO_DRAG |
ドラッグによる持ち出し |
まとめて指定する
BLINK_CONTENT_POLICY_KIOSK
も用意しています。
不特定多数が触る端末で「Web
ブラウザとしての機能」が露出してしまう問題への答えです。
blink_web_view_set_javascript_dialog_handler()
を使えば、ページが出す
alert() や confirm()
をアプリ側で受け取って差し替えることもできます。
無人運用の端末で、消せないダイアログが出て止まる事態を避けられます。
blink_web_view_set_fullscreen_handler() と
blink_web_view_is_fullscreen() で
全画面表示を制御できます。blink_web_view_set_zoom_level()
は表示倍率を変えるので、
離れて見る画面と、手元で操作する画面で同じコンテンツを使い回すことができます。
C の API を GObject として公開しており、GObject Introspection
の型情報
(.gir / .typelib)
を配布物に同梱しています。Python (PyGObject)、Rust、
C++、JavaScript (GJS)、Vala、Go
などから、追加のバインディングを書かずに
同じ API を呼べます。既存のチームが使っている言語に合わせられます。
画面 (JavaScript) とアプリ本体 (C など) の間には、双方向の橋があります。
つまり C から繋がる機器は、
そのまま画面から使えます。プリンタ、カメラ、センサー、IC
カードリーダー、
決済端末、シリアル機器 —
端末の周辺に何を繋ぐかは、アプリ側の自由です。
BlinkGTK は上流の Chromium に追従し続けています (現行
153.0.8010.36)。
新しい CSS、WebAssembly、WebGPU といった Web
プラットフォームの進化は、
エンジンを積み替えることなく、版の更新とともに手元へ届きます。
どの版で何ができるようになったかは
Chromium 新機能史
に実測付きでまとめています。
BlinkGTK が最初に公開されたのは Interop Tokyo 2026 (幕張メッセ) です。
上に書いたのは「こういう機能があるから、こういう用途に向くはず」という説明であって、
実際の採用事例ではありません。BlinkGTK
で何か作られた方がいらっしゃれば、
掲載募集の窓口
までスクリーンショットをお寄せください。ここに載せるべきは、私たちの想像ではなく
実際に動いているものだと考えています。
また、特定の環境に向けた拡張の実装 —
特殊なハードウェアへの対応、
専用機能の組み込み、概念実証 (PoC) の伴走など — は、
blinkgtk.com
でカスタマイズ開発として承っています。
標準の配布物で届かない要件があれば、まずご相談ください。