HN 日本語サマリー

← 一覧へ戻る
Web開発

27.5KBの言語非依存なWebGPUシンタックスハイライター

27.5KB language-agnostic WebGPU syntax highlighter (gpu-lexer.vercel.app)

99 pointsby bpierre32 コメント

要約

Vercel Labsが開発した、27.5KBという非常に軽量な言語非依存のWebGPUシンタックスハイライター「gpu-lexer」が発表されました。これは、WebGPUモデルを用いてソースコードを解析し、文脈を考慮してトークンをラベル付けすることで、文法定義なしに様々なプログラミング言語のシンタックスハイライトを実現します。従来のハイライターと比較して、実行速度が速く、バンドルサイズも小さいのが特徴です。

全文翻訳

27.6KB language-agnostic1 WebGPUシンタックスハイライター

import { parse } from 'gpu-lexer'

const spans = await parse('source code')
// {
//   type: 'plain' | 'comment' | 'string' | 'number' | 'keyword' | 'type' | 'function' | 'constant' | 'operator'
//   start: number
//   end: number
// }[]

gpu-lexerは、ソースコードを単語、空白、改行、記号などの単純な部分に分割します。その後、軽量なWebGPUモデルがローカルコンテキストとファイル全体のコンテキストを組み合わせて、各部分にラベルを付けます。これは、文法を選択するのではなく、学習中にその言語や構文を見たことがない場合でも、周辺ソースから各部分の種類を推測することで、あらゆる言語に対応できるように設計されています。隣接するラベルが、コードに返されるシンタックススパンになります。

これは実験であり、文法に相当するハイライターではありません(以下の合意チャートを参照)。チャートはShikiとの合意を測定しており、客観的な正しさではありません。結果は、未知の言語や実際のコードでは異なる場合があります。

Highlight 10× three.min.js
ウォームアップ後のブラウザ実行時間 · 値が低いほど良い

2026年9月16日に行われた1回のウォームアップ後のブラウザ実行。入力はthree.min.jsを10回連結したもの(5.56M文字)でした。MacBook Pro、Apple M4 Pro、20コアGPU、24GB、macOS 26.6.2、Chrome 152。各エンジンは専用のワーカーで実行され、DOMレンダリングは除外されました。gpu-lexerとShikiはトークンデータを返し、Starry NightはHASTツリーを返し、Sugar High、Prism.js、Highlight.jsはハイライトされたHTMLを返しました。Sugar High 2.3.1、Prism.js 1.30.0、Highlight.js 11.12.0、Starry Night 3.11.0、Shiki 4.4.3。

ロードされたライブラリサイズ
ランタイム+選択された言語カバレッジ · 値が低いほど良い

ミニファイおよびBrotli圧縮されたブラウザバンドル。gpu-lexerは2026年9月16日に測定され、比較ライブラリは2026年9月9日に測定されました。主要なWebには、javascript、typescript、css、html、json、markdownが含まれます。gpu-lexerはすべての言語で同じバンドルを使用します。Starry Nightの合計には、Oniguruma WASMペイロードが含まれます。

トップ25の加重合意
Shikiとの人気度加重合意 · 値が高いほど良い

Shikiは100%正規化参照です。各ライブラリのトークン名は、plain、comment、string、number、keyword、type、function、constant、operatorの9つのクラスにマッピングされます。スコアは、2026年第1四半期のGitHub Innovation Graphトップ25の1,103個の保持されたファイル全体で、各言語のプッシャー数で加重された非空白ソース部分を比較します。サポートされていない言語はゼロとスコアリングされ、コーパスサイズは重みに影響しません。

[ライブデモ]

75言語

react.development.js 0バイト