Chromium 147 → 151 — BlinkGTK に何が増えたか

バージョン: 1.2.0-build2 / 言語: 日本語 | English

BlinkGTK は Chromium のレンダリングエンジン Blink をそのまま載せています。つまり
Chromium が新しい版で獲得した Web の能力は、BlinkGTK を新しい版に上げるとそのまま
手に入ります
。この文書は、BlinkGTK がベースにしてきた Chromium 147・148・149・150・151
の間で何が変わったのかを、実際にできるようになったことの側から辿ったものです。

仕様書の抜粋ではありません。エンジンのソースツリーそのものを版ごとに突き合わせて
差分を取り、そこから読者に関係するものを選んでいます(取得方法は末尾に書きます)。


この文書の読み方 — 「入った」と「使える」は違う

Web の機能は、ある日いきなり全ユーザーに届くわけではありません。Blink では機能ごとに
ランタイムフラグという札が付いていて、その状態によって既定で動くかどうかが決まります。
本文ではこの 3 つを区別します。ここを混ぜると「ドキュメントには書いてあるのに動かない」
という事故になるので、最初に約束しておきます。

表記 フラグの状態 意味
既定で有効 stable 何もしなくても効きます。BlinkGTK でもそのまま使えます
試験段階 experimental 既定では無効。起動フラグで明示的に有効化すれば動きます
開発中 test テスト実行時のみ。プロパティが CSS として解釈されても、描画には反映されません

3 番目が曲者です。たとえば hanging-punctuation(行末の句読点をぶら下げる、日本語組版で
長く待たれてきたもの)は、149 で CSS プロパティとしての受け皿が入りました
getComputedStyle() で値も返ります。しかし実装のフラグは 151 の時点でも test のままで、
実際の行組版には効きません。「プロパティが存在する」ことと「組版が変わる」ことは
別の出来事です。

実際に測ると、この食い違いは 機能検出のコードを裏切る形で出ます
(BlinkGTK v1.2.0 / Chromium 151 実測):

フラグなし                                        → CSS.supports(...) = false
--enable-blink-features=CSSHangingPunctuation で  → CSS.supports(...) = true
                                                     getComputedStyle = "allow-end"

CSS.supports() が true を返しますが、行組版は 1px も変わりません。
版面をちょうど本文 8 字幅にして「本文 8 字 + 句点」を流すと、ぶら下げが効けば
1 行に収まるはずのところ、none でも allow-end でも 2 行のままでした。

つまり CSS.supports('hanging-punctuation', ...) を機能検出に使うと外します。
現時点では「使えない」前提で版面を組んでください。


全体像

5 つの版で、エンジンが持つ機能フラグは 1,103 → 1,214 に増えました。

Chromium 機能フラグ総数 前版から既定で有効になったもの 新規追加 削除 CSS プロパティ BlinkGTK 側
147 1,103 800 v1.0.6 〜 v1.0.10-build16
148 1,116 34 47 34 800 v1.0.11-dev
149 1,140 39 52 28 803 (追従のみ)
150 1,172 48 51 19 820 v1.1.0-build1 〜 build6
151 1,214 44 64 22 822 移行作業中 (2026-08)

1 版あたり 30〜50 個の機能が既定で有効になり、20〜35 個が消えています。削除があるという
点は見落とされがちですが、上げるときに壊れる可能性があるのはむしろこちら側です。
各章の最後に「移行の注意」を置いたのはそのためです。


147 → 148 — 下線とコンテナクエリが整った版

一言で: 派手な新機能より、CSS の細部の辻褄合わせが多い版です。

文字まわり

下線が文字を避けるようになりました(text-decoration-skip-ink の適用範囲拡大)。
日本語だと p のように基線より下に出る部分に下線が重なると、可読性が目に見えて
落ちます。147 では試験段階でしたが、148 から既定で有効になりました。

可変フォントの avar2 対応も入りました。1 つのフォントファイルで太さや字幅を連続的に
変えられる仕組みの、新しい版のテーブルに対応したものです。

CSS

そのほか

移行の注意

<command> 要素の残骸が削除されました。ほとんどのアプリには影響しませんが、
古いコードをそのまま持ち込んでいる場合は確認してください。


148 → 149 — 段組みの罫線と、ぶら下げの「受け皿」

一言で: 多段レイアウトの表現力が増え、日本語組版の器がひとつ用意された版です。

日本語組版に効いたもの

hanging-punctuation が CSS プロパティとして入りました。行頭・行末に句読点や
括弧が来たとき、版面の外へぶら下げる指定です(none / first / last / allow-end)。
JIS X 4051 と JLReq が求めるぶら下げ組版に直結するプロパティで、値のパースも
getComputedStyle() も動きます。

ただし前述のとおり、実装フラグは 151 の時点でも test のままです
書けるようになったが、まだ効きません。ここは Chromium の今後を待つ部分であり、
BlinkGTK としても継続して追っている項目です。

ルビが入った行での編集操作が直りました(行単位のカーソル移動)。ルビ付きの本文で
上下キーを押したときの挙動が、ルビの有無で崩れなくなります。編集系アプリには効きます。

text-decoration-skip-spaces も追加されました。下線を引くとき、単語間のスペースを
飛ばすかどうかを制御できます。

段組みの罫線

段と段のあいだに罫線を引く仕組み(column-rule / row-rule)が大きく拡張されました。
罫線の端をどこで止めるか、交差部でどう振る舞うかを、*-inset-cap *-inset-junction
系のプロパティで指定できます。多段組みの版面を作るときに、罫線が段の端まで伸び切って
しまう問題を CSS だけで解けます。

なお 148 の時点では column-rule-edge-inset column-rule-interior-inset という名前
でしたが、149 で -inset-cap -inset-junction改名されました。仕様側の議論が
落ち着いた結果です。

そのほか

移行の注意

段罫線プロパティの改名(上記)は、149 より前の名前で書いたスタイルが無効になります
使っている場合は書き換えが必要です。


149 → 150 — 版面を詰める道具が増えた版

一言で: この 5 版でいちばん実りが多く、BlinkGTK v1.1.0 の土台になった版です。

日本語組版に効いたもの

text-box-trim が入れ子リストでも効くようになりました。行の上下に生じるフォント
由来のアキ(ハーフレディング)を削って、指定した文字の高さで版面を作るための仕組みです。
日本語では、見出しと本文のアキを設計値どおりに詰めるときにこれが要ります。

全角スペースの扱いが直りました。テキストの位置対応表(オフセットマッピング)を
再利用する際に全角スペースで崩れる不具合が修正され、選択範囲や折り返し位置が
全角スペース混じりの文章でずれなくなりました。

書記素クラスタの境界チェックが入りました。絵文字の合字や結合文字を、
カーソル移動や削除で分断しにくくなります。

::first-linetext-transform が効くようになり、行分割の中断処理も改善されました。

CSS

そのほか

移行の注意


150 → 151 — ルビと圏点が仕様として整った版

一言で: 日本語組版にとって、この 5 版でもっとも直接的な収穫がある版です。

日本語組版に効いたもの

ルビのはみ出し(ruby-overhang)が既定で有効になりました。147 からずっと
試験段階だったものが、151 でようやく既定になります。ルビ文字が親文字より長いとき、
隣の文字の上へどこまではみ出してよいかの制御です。はみ出しを許さない none 値も
同時に入りました。JLReq がルビの掛け方について定めている部分に、エンジン側が
正面から対応した形です。

圏点(傍点)がルビと同じ経路で処理されるようになりました。これは実装の内側の
話に見えますが、組版結果が変わります。従来は圏点を付けると行の高さそのものが
広がっていましたが、151 では行の高さは line-height のまま保たれ、
必要なぶんは外側のコンテナが伸びます。

この変更の効き方を、151 のビルドで実測しました。縦組み、font-size: 16px
text-emphasis-style: sesame で、段落の実 pitch を測った値です。

行間の余裕 圏点なし 圏点あり
あり (line-height: 2.6 = 41.59px) 150 41.59 44.09 +2.50
151 41.59 41.59 0
なし (line-height: 1.75 = 28px) 150 28.00 37.00 +9.00
151 28.00 30.00 +2.00

行間に余裕があれば、圏点で行送りが太らなくなりました。 余裕がない場合も、
150 の +9.00 から +2.00 へ縮んでいます。縦組みで圏点を多用する日本語文書では、
版面の行数が変わり、総ページ数が減ることがあります。既存レイアウトの確認を
おすすめするのはそのためです (良い方向の変化ですが、変化は変化です)。

text-autospace がルビ注記を無視するようになりました。和欧混植の自動アキ調整が、
ルビのテキストに引きずられて本文の字間を乱すことがなくなります。

開きタグ直前のスペースの後で改行できるようになりました
日本語 <span>語</span> のようなマークアップで、意図しない位置に改行が寄る問題が減ります。

試験段階では AnnotationSpaceOnStart(注記の開始側のアキ)が入りました。既定では
無効ですが、ルビや圏点の前後アキの制御に関わる項目として、次版以降の動きを注視する
価値があります。

編集・選択

そのほか

移行の注意 — ここは壊れる可能性があります

変更 影響
圏点がルビ経路に 圏点付き文書の行の高さと総行数が変わる可能性
document.implementation.createHTMLDocument()readyState 生成直後の状態が仕様準拠に変わりました
ポップオーバー hint の入れ子表示 入れ子で表示しようとすると例外を投げるようになりました
getComputedStyle のフラットツリー外要素 既定で無効化されました
Sub Apps API 削除されました

日本語組版の現在地 — 5 版を通した俯瞰

BlinkGTK の主な用途が日本語縦組みの電子書籍であることを踏まえて、
関係する項目だけを版ごとに並べます。空欄はその版に存在しなかったことを意味します。

項目 147 148 149 150 151
ルビのはみ出し (ruby-overhang) 試験 試験 試験 試験 既定で有効
圏点をルビ経路で処理 既定で有効
text-autospace がルビ注記を無視 既定で有効
開きタグ前スペース後の改行 既定で有効
注記の開始側アキ 試験
入れ子リストの text-box-trim 既定で有効 既定で有効
全角スペースの位置対応修正 既定で有効 既定で有効
ルビ行での編集カーソル移動修正 既定で有効 既定で有効 既定で有効
下線が文字を避ける 試験 既定で有効 既定で有効 既定で有効 既定で有効
ぶら下げ (hanging-punctuation) プロパティのみ (開発中) 同左 同左
縦組み多段の分割 (BlinkGTK 独自) 試験 試験

読み取れることは 2 つあります。

ひとつ、ルビと圏点は 151 で一気に前進しました。長く試験段階に置かれていた
ruby-overhang が既定になり、圏点の実装が整理されました。縦組みリーダーを作るなら、
151 ベースの BlinkGTK は明確に価値があります。

ふたつ、ぶら下げ組版はまだ届いていません。プロパティは 149 で用意されましたが、
実装は 151 でも開発中のままです。JLReq の完全準拠にはこの一手が要ります。
BlinkGTK はここを継続課題として追っています。

最後の行の「縦組み多段の分割」は上流 Chromium にはない、BlinkGTK が独自に足している
機能です(縦組みで段組みを使ったときの分割処理)。Chromium から受け取るだけでなく、
足りないところは自分で埋める、という立ち位置を示しています。


出典と、この差分の取り方

推測を含めないために、すべてエンジンのソースツリーから機械的に抽出しています。
同じ手順で誰でも再現できます。

見たもの ファイル
機能フラグと既定の有効/無効 third_party/blink/renderer/platform/runtime_enabled_features.json5
CSS プロパティの一覧 third_party/blink/renderer/core/css/css_properties.json5

さらに、151 については BlinkGTK のビルドで実際にどうなっているかを確認しています。
上流の宣言が stable でも、ビルド構成によって最終的な既定値は変わりうるためです。
下表は、生成されたコード (runtime_enabled_features.cc) から読んだ実際の初期値です。

機能 BlinkGTK 151 ビルドの既定値
ルビのはみ出し (CSSRubyOverhang) 有効
圏点をルビ経路で処理 (TextEmphasisAsRuby) 有効
text-autospace がルビ注記を無視 有効
開きタグ前スペース後の改行 有効
ぶら下げ (CSSHangingPunctuation) 無効
縦組み多段の分割 (BlinkGTK 独自) 無効 (要求時のみ有効)

本文の記述はこの実測と一致しています。ぶら下げが使えないと書いたのは、
上流の宣言だけでなく実際のビルドでも無効だからです。

各版のツリーからこの 2 ファイルを解析して「機能名 → 状態」の対応表を作り、
隣り合う版どうしで差を取っています。本文で挙げた件数(既定で有効になった数、
追加数、削除数)はすべてこの差分の実数です。

機能名から意味を推測すると誤りが混ざるため、内容に確信が持てないものは
本文に載せていません
。件数と、この文書に挙げた項目の数が合わないのはそのためです。


関連する文書