【ITニュース解説】Carbonyl: Forking Chromium to Render Live in a Terminal

2025年09月05日に「Dev.to」が公開したITニュース「Carbonyl: Forking Chromium to Render Live in a Terminal」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

CarbonylはChromiumをベースに、ターミナル上でウェブページを表示するツール。通常ブラウザのようにHTMLを解析せず、Chromiumの描画結果をUnicodeブロック文字とANSIカラーコードに変換する。JavaScriptやCSSも忠実に再現し、マウス操作やテキスト入力も可能。低解像度化やスレッド処理の調整でパフォーマンスを改善。リモート環境やCIでの活用が期待される。

ITニュース解説

Carbonylは、Chromiumをベースにした新しいターミナルブラウザだ。従来のターミナルブラウザとは異なり、HTMLを解析してレイアウトを再構築するのではなく、Chromiumのレンダリングエンジンを直接利用している点が特徴だ。これにより、ウェブページのレイアウト、CSS、JavaScriptエンジン、拡張機能など、Chromeとほぼ同じ体験をターミナル上で実現している。

Carbonylの仕組みはこうだ。まず、ChromiumのレンダリングエンジンであるSkiaがウェブページをオフスクリーンのビットマップに描画する。Carbonylは、カスタムのHostDisplayClientを介してこのビットマップをインターセプトし、GPU、レンダラー、ブラウザプロセス間で共有メモリマッピングを行う。次に、このビットマップをターミナルのブロック文字に変換する。各ターミナルセルは、U+2584(下半分ブロック)と24ビットのANSIカラーを使用し、セルの背景を上部のピクセル、前景を下部のピクセルに設定することで、色を表現している。

テキストのレンダリングにも工夫が凝らされている。SkiaのパイプラインにTextCaptureDeviceを挿入することで、グリフの実行をインターセプトし、グリフIDをUnicodeに変換して、ビットマップブロックの代わりにANSIコードで文字をレンダリングする。これにより、鮮明なテキスト表示と、テキストの選択およびコピーを可能にしている。

Carbonylは、ANSI Device Control Sequences (DCS)を介してマウスとキーボードの入力をリッスンする。例えば、マウスのクリック位置をDCSでエンコードし、それをChromiumの入力システムにフィードバックすることで、GUIブラウザと同様に、クリック、スクロール、テキスト入力などの操作をターミナル上で実現している。

初期状態では、Carbonylのレンダリング速度は5 FPS程度で、CPU使用率は約400%と高い。しかし、いくつかの最適化を行うことで、パフォーマンスを改善できる。例えば、ターミナル出力用にディスプレイのスケールを1/7に強制的に縮小することで、ピクセルグリッドを大幅に削減できる。また、--disable-threaded-scrolling--disable-threaded-animationを無効にすることで、レンダリングをメインスレッドに維持し、スレッド間の高コストな調整を回避できる。これらの調整により、アイドル時のCPU使用率をほぼゼロに抑え、スクロール速度を15%程度に安定させることが可能だ。

Carbonylは、ウェブ互換性を維持しつつ、GUIなしのデモ、リモートインタラクション、制約のある環境への組み込みなどを実現する可能性を秘めている。ブラウザの内部構造、ターミナルグラフィックス、GUIとCLIの橋渡しに関心のある人にとって、Carbonylは実践的なケーススタディとなるだろう。ただし、現時点ではCPU負荷が高く、日常的な使用には実用的ではないという意見もある。リモートサーバ、CIログのプレビュー、低帯域幅環境、または超ポータブルな開発環境などでの利用が考えられる。今後の機能として、True-color検出、設定可能なブロック解像度、SSHフレンドリーな入力モードなどが要望されている。Carbonylは、ブラウザエンジンとターミナルグラフィックスを組み合わせることで、どこまで可能性を広げられるかを示す興味深い事例だ。

【ITニュース解説】Carbonyl: Forking Chromium to Render Live in a Terminal | いっしー@Webエンジニア