MicroLighter の導入を発表

2026/08/20 3:28

MicroLighter の導入を発表

RSS: https://news.ycombinator.com/rss

要約

日本語翻訳:

MicroLighter は、現代的な CSS Custom Highlights API に基づく、軽量で依存関係のないクライアントサイドのシンタックスハイライターです。その主な利点は、DOM を変更せずに CSS の擬似クラスを通じてスタイルを適用できる点にあり、足跡は約 2kb のみ(バニラの Web コンポーネントコンポーネントを追加すると約 1KiB)という極めて小さなサイズを実現します。この効率性により、開発者は npm(

npm install microlighter
)またはネイティブタグを通じてツールを容易に採用でき、重い外部ライブラリに依存する必要がありません。行番号などハイライト以外の機能を、ShadowDOM 内にある別々のカスタム要素に分離することで、懸念事項の明確な分離を保証します。ハイライターは VS Code でも使用されている Textmate グラマーからの強力なパターンマッチングを活用し、多数のプログラミング言語をデフォルトでサポートするとともに、オンデマンドでロードすることでバンドルサイズを削減します。そのアーキテクチャは、
light-dark()
関数を用いてライトモードとダークモードをシームレスに統合し、事前供給されたセマンティックな
--syntax-*
トークンを通じてテーマ間で一貫した視覚的アイデンティティを確保します。ユーザーは、提供された Web コンポーネントクラスから継承すること、またはコードブロックが存在するのを待って自己初期化するバンドルを利用することで、さらに機能性を拡張できます(
document.querySelector('pre>code').length
)。最終的に、MicroLighter はパフォーマンスと簡潔さが最優先である現代の Web 開発プロジェクトにおいて、柔軟な解決策を提供しながら、特定の擬似クラス構文(例:
::highlight(token)
)を通じてチームが視覚体験を容易にカスタマイズできるようにします。

本文

MicroLighter:軽量なクライアントサイド構文ハイライトライブラリ

MicroLighter は、CSS Custom Highlights API を活用した、軽量なクライアントサイド用構文ハイライトライブラリです。以下に主な特徴と開発経緯、使い方を解説します。

主な特徴

  • ゼロ依存関係
  • 2KB の最小化および Gzip 圧縮サイズ(※注釈あり)
  • span
    タグを使用せず、
    ::highlight(token-name)
    擬似要素を採用
  • Textmate の言語文法を基調としている
  • ヒューマンリダブルな
    light-dark()
    テーマ対応
  • すべての言語・文法をオンデマンドで読み込み
  • ハイライト以外の機能は
    <micro-lighter>
    カスタムエレメントへ集約

開発経緯

背景と課題

ある日、Jekyll ブログの構文ハイライトが動作しなくなりました。これまでに Highlight.js、PrismJS、Rouge、Shiki などさまざまなライブラリを試してきましたが、クライアントサイドとサーバーサイド実装の間には常にトレードオフが存在していました。そこで、Bramus の CSS Custom Highlights API を採用する手法に挑戦することを決めました。

技術的な利点

::highlight()
擬似要素には斜体化や太字化などの制限がありますが、DOM 内に
span
タグを注入する必要がなくなります。

  • 「このトークンをハイライトしたい」という意図をCSS で自然かつ明確に表現できる点が非常に利便性が高いです。
  • Highlight API を活用することで DOM マニピュレーションが不要となり、ライブラリ自体の役割は単にコードブロックを正規表現でスキャンし、
    CSS.highlights.set(category, textRanges)
    を呼び出すことのみとなります。

設計上の決断

本サイトでの使用頻度が限定的であり(投稿数は限定、コードは約 15 行程度)、言語の頻繁な切り替えが課題でした。HTML/CSS/JavaScript の混在や Bash/Ruby/Markdown の扱いなど、すべての言語に対応しようとすると正規表現の複雑化に限界がありました。

これに対し以下の設計原則を確立しました。

  • Textmate パターンの採用
    • VS Code でも採用されている Textmate の確立されたパターンコレクションを活用し、ほぼすべての言語に対応可能になりました。
  • 「必要な分だけ」の実装(オンデマンド読み込み)
    • 最初の原則として「言語文法はオンデマンドで自動的に読み込む」仕組みを実現しました。これにより設定の複雑化やバンドルサイズの肥大化を回避できます。
  • Human Friendly なトークンカテゴリ
    • PrismJS の単純化されたカテゴリからヒントを得て、Textmate の細かいカテゴリをヒューマンフレンドリーなセットに整理・スタイリングしやすい形式にしました。
  • 「Light/Dark」テーマの統合
    • ライトテーマとダークテーマを別々の実体として管理する不満を解消。
      light-dark()
      を用いて一つのテーマで両方のスタイルをカバーするようにしました。
  • 役割の明確化と関心の分離
    • 構文ハイライトライブラリが担うべき役割は「言語の推測とコードのハイライトのみ」という一点に絞り込みました。
    • 行番号表示などの追加機能は、約1KiBのサイズ増加を伴う Web コンポーネントへ移行しています。これにより、Shadow DOM のカプセル化でコード層とプレゼンテーション層(UI)を容易に分離でき、関心の分離を実現しました。

使い始める方法

サイトへの導入には、自己初期化するミニファイされたバンドルをお勧めしますが、ESM モジュールや Web コンポーネントも用意しています。

npm install microlighter

1. 自動実行型(minified bundle)

すべての投稿にハイライト処理を適用したい場合、または簡易的な利用の場合は以下のスクリプトタグを使用します。

<script type="module" src="path/to/microlighter/microlighter.min.js"></script>
  • 条件付き読み込み: すべての投稿で構文ハイライトが必要なわけではありません。コードが含まれているページのみを特定し、その際にスクリプトをインポートすることも可能です。

    if(document.querySelector('pre>code').length) {
        import('path/to/microlighter/microlighter.min.js');
    }
    

2. ESM バージョン(高度な利用)

ご自身でより柔軟に制御したい場合は、ESM モジュールをご利用ください。

import { highlightAll } from 'microlighter'

highlightAll({
    selector: 'pre.onlyTheseGetHighlights'
})

3. Web コンポーネント(追加機能付き)

行番号表示やコピーボタンなどの追加機能を必要とされる場合は、以下の Web コンポーネントを使用します。

<micro-lighter data-syntax-theme="github" line-numbers controls="copy">
  <pre><code>Code goes here</code></pre>
</micro-lighter>
  • 高度なカスタマイズ: Web コンポーネントのクラスは非常に拡張性に富んでいます。ベースクラスを継承して独自機能を追加する「フォーク」も可能です。

テーマのカスタマイズ

事前に用意されたテーマを使用するか、ご自身で独自に作成することも可能です。基本的な構造は以下の通りです。

/**
 * セマンティックな `--syntax-*` トークンのセットアップ
 */
[data-syntax-theme="my-theme-name"] {
  color-scheme: light dark;

  /* コードブロック全体の色 */
  --syntax-background: light-dark(#f8f8f8, #3a3a3a);
  --syntax-foreground: light-dark(#3a3a3a, #f8f8f8);
  
  /* ハイライト用のトークン色 */
  --syntax-comment: light-dark(#6e7781, #8b949e);
  --syntax-function: light-dark(#8250df, #d2a8ff);
  /* ...etc... */
}

[data-syntax-theme="my-theme-name"] pre:has(code) {
  background-color: var(--syntax-background);
  color: var(--syntax-foreground);
}

::highlight(comment) { color: var(--syntax-comment) }
::highlight(function) { color: var(--syntax-function) }
/* ...etc... */

同じ日のほかのニュース

一覧に戻る →

2026/08/20 2:32

OpenRouter が Stripe に参画

## Japanese Translation: OpenRouter は、コアアイデンティティを維持しつつミッションとグローバルなスケーリングを加速させるため、Stripe と戦略的提携を正式に発表しました。このアライアンスは、質、スケーラビリティ、そして AGI 後の経済におけるビルダーの支援にコミットした 2 つのデベロッパー向けのインフラストラクチャプラットフォームを結びつけるものです。Stripe の大規模な顧客ネットワーク、ビジネス成長データ、および不正防止専門知識との統合により、市場慣性による影響で単一のモデルがデフォルトとなるのを防ぎながら OpenRouter がスケールするのを支援します。OpenRouter は現在、400 以上のモデルを通じて 1,000 万人以上のユーザーをサービスしており、2023 年初頭の設立以来、推論ボリュームは少なくとも 10 倍の年間増加を示しています。毎日大量のトークンを処理しています。取引は来週中に完了見込みであり、OpenRouter の製品、ミッション、名称、ロードマップ、ユーザー統合、またはルーティングロジックを変更することなく、判断は常にユーザーにとって最善のものに基づいて行われます。この提携は多様な AI エコシステムの育成を目指し、両社は異なる運営文化とスタートアップの機動性を維持することを可能にします。OpenRouter はグローバルな成長に伴い効率的な 90 名の体制を維持する予定であり、好奇心、厳格さ、主体性、透明性を備えた新しいチームメンバーを招致しています。

2026/08/20 3:33

Go 1.27

## Japanese Translation: Go チームはバイナリアーカイブと公式インストーラーを提供するとともに、言語仕様とツールングにおいて重要な進歩をもたらすバージョン 1.27 をリリースしました。主要な言語更新には、ジェネリックメソッド(例:`math/rand/v2.Rand`)、ネスト化済みまたは埋め込まれた構造体に対する直接フィールド選択、および汎用化された関数型推論が含まれます。ツールングの向上としては、`go fix` における 4 つの新しいモダナイザー(`atomictypes`、`embedlit`、`slicesbackward`、`unsafefuncs`)、`go doc` でのパッケージ@バージョン照会への対応、ならびに `go.mod` において統合されたブロックによる依存関係管理の簡素化が挙げられます。パフォーマンス向上は、サイズ特化型メモリアロケーションの導入により実現されており、これによって小規模オブジェクト(<80B)のコストを最大 30% 削減し、アロケーション負荷の高いプログラムの全体的なパフォーマンス向上を約 1% に貢献しています。セキュリティ面では、量子耐性のある ML-DSA 署名の統合と標準ライブラリ内蔵の UUID サポートによる強化が図られました。その他のハイライトとしては、実験的な SIMD サポート、安定性を高めるための一般利用可能な `goroutineleak` プロファイラー、`encoding/json/v2` の厳格なデフォルト設定、ならびにテスト用として新しいユーティリティである `NewTestServer` などがあります。

2026/08/20 3:36

Unsloth デイナミック 3.0 GGUF

## Japanese Translation: Unsloth Dynamic v3.0 のリリースは、同じディスクサイズで比較した場合の Qwen3.8-27B モデルに対して他社よりも優れた精度を実現しており、これが最大の成果となっています。このアップデートは前バージョンを踏襲し、クオンタイゼーション手法の改良と、小型ファイルサイズにおける特定モジュールの削除による容量削減を行いました。層選択の改善およびポストトレーニングクオンタイゼーション(PTQ)を通じて品質は維持され、過学習リスクを回避するために QAT/QAD は全く使用しません。このアプローチは、エージェントコーディングや多言語性能などの多様なタスクに最適化された高品質な imatrix カリブレーションデータセットを用いています。新しいベンチマーク結果では、Unsloth クォンツが最大 10% の高いトップ 1% 精度を達成することが示されており、これは標準的な Wikipedia データではなく、専門データセットから保持した例を利用する Divergence-300@32 および KL ダイバージェンスというメトリクスによって確認されました。早期プレビューでの成功の後に、5 日間で 510 万回のダウンロードが記録されました。ユーザーは今や、6.2GB の UD-IQ1_S バージョンなど、従来のモデルの最大 89% のサイズ削減が可能でありながら依然として高い精度を保持する高性能モデルを利用できるようになりました。業界全体の効率性は、小型ファイルから MTP モジュールを削除することで約 500MB のディスクスペースを節約し、Llama 4 および Wolfram Ravenwolf の実装における重大なバグも同時に修正されたことで向上しています。imatrix ファイルは直ちにコミュニティへのテスト、評価、ファインチューニングやバリエーションの作成に利用可能となっています。

MicroLighter の導入を発表 | そっか~ニュース