
2026/03/25 3:03
**Show HN:** 私は16年ぶりにVideo.jsを取り戻し、再構築してサイズを88%削減しました。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
## Summary Video.js v10.0.0 beta は 2026年3月10日にリリースされ、Video.js、Plyr、Vidstack、および Media Chrome の完全な書き直しとして登場しました。既に75kのGitHubスターと毎月数十億回の動画再生を誇るエコシステムです。この新バージョンは **デフォルトバンドルサイズを約88 %削減** し、圧縮前の最小化済みHTMLプレイヤーを260 kBから97 kB(gzippedでは25 kB)に短縮します。さらに、デフォルトビルドからアダプティブビットレートサポートを除外することで **コード量を追加で66 %削減** しています。 重要なアーキテクチャの変更点は、**State、UI、および Media をオプションコンポーネントに分離** したことです。開発者は `createPlayer` に機能配列を渡すことで、必要なものだけを含めることができます。ベータ版では二つのスキン―フロスト(凍った外観)とミニマルクリーン―を提供し、それぞれに洗練されたコントロール、アニメーション、および新しいエラーダイアログがあります。 リリースには軽量な **SPF (Streaming Processor Framework)** エンジンが導入されました。単純なHLS使用時は **HLS.js‑light の12 %程度** で済みます。実際に、v10 + SPF を HTMLプレイヤーに組み込むと、144.6 kB(minified)/38.7 kB(gzipped)、単体のSPFエンジンは38.5 kB(minified)/12.1 kB(gzipped)となり、hls.js などの従来のエンジンよりも遥かに小さくなります。 デフォルトでは **3つのプリセット** が用意されています:default video、default audio、および background video(コントロール/オーディオなし)。API はまだベータ段階で、基本的な再生、字幕、複数形式をサポートしていますが、設定メニューは未実装です。 将来のマイルストーンとしては **2026年中頃のGA**(完全機能同等)と、その後に広告サポート、レガシープロジェクト向けの移行ガイドがあります。コードベースは意図的に **AI‑フレンドリー** であり、スタイルなしUIプリミティブ、`llms.txt` ナビゲーション、LLM向け Markdown ドキュメント、および拡張中の AI スキルリポジトリを提供しています。 開発者にとって、このベータ版は React、TypeScript、Tailwind、または AI ワークフローとの統合がスムーズな、より軽量な動画体験を実現します。ロード時間、帯域幅コスト、およびウェブ動画エコシステム全体での統合作業を削減します。
本文
2026年3月10日 – 読了時間14分
本日は Video.js v10.0.0 ベータ版のリリースを発表できることに大変喜びを感じています。これは、Video.js([ディスカッション])だけでなく、Plyr、Vidstack、Media Chrome の再設計も含めた、相当規模のゼロからの書き直しの結果です。Web 動画に対して熱意を持つオープンソースプロジェクトと開発者が集結し、合計 75,000 件以上の GitHub スターと毎月数十億回の再生を誇る珍しい協業でした。
私は16年前に Video.js を構築した際、Flash から HTML5 動画への移行を支援するためでした。その後、多くの方々のおかげで大きく発展しましたが、コードベースと API は時代遅れなままでした。今回の再設計は、現代の開発者に合わせてプレイヤーをモダナイズし、AI 連携機能への次なる大規模移行の土台を築きます。
主な取り組み点は以下です:
- バンドルサイズの縮小 – デフォルトバンドルが 88 % 軽量化
- 選択したフレームワーク(React、TypeScript、Tailwind)で親しみやすいカスタマイズを実現
- 「どうしてこんなに美しくできたの?」と驚くようなデフォルト UI を提供
- AI エージェントがプレイヤー構築時に共に作業できるよう設計されたコードベースとドキュメント
従来の Web メディアプレイヤーとは異なる動作ですが、実際に開発する感覚にはより馴染みやすくなっています。
バンドルサイズ
現在のビデオプレイヤーで最も不満が多い点はファイルサイズです。1 MB 程度に minify され、gzip だと数百 KB。従来のプレイヤーはスマートバンドラーやツリーシェイキングなどの技術が登場する前に構築されたため、大きくなりがちです。
| プレイヤー | Minified (kB) | Gzip (kB) | 備考 |
|---|---|---|---|
| Video.js v8(コア) | 260.5 | 75.2 | |
| Vidstack | 237.4 | 74.1 | |
| Media Chrome | 175.5 | 41.3 | |
| Plyr | 109.8 | 32.6 | |
| Video.js v10 Video Player [HTML] | 97.4 | 25.1 | |
| Video.js v10 Audio Player [HTML] | 85.8 | 23.0 | |
| Video.js v10 Video Player [React] | 62.0 | 18.0 | |
| Video.js v10 Audio Player [React] | 49.2 | 15.2 | |
| Video.js v10 Background Video [HTML] | 22.2 | 6.9 | |
| Video.js v10 Background Video [React] | 10.7 | 3.5 |
v10 のデフォルトプレイヤーは、前バージョンのデフォルトに比べ 88 % 軽量です。主な節約効果は Adaptive Bitrate(ABR)サポートを分離したことによるもので、以前は
video.js/core からインポートしていた機能です。ABR を除けば、v10 のデフォルト HTML プレイヤーは 66 % 軽量化しています。
エンジンサイズ
ストリーミングエンジンは HLS/DASH に対応し、マニフェスト解析・セグメント読み込み・バッファ管理・ABR ロジック・コーデック検出・MSE 統合・DRM・サーバー側広告などを担当します。従来のエンジンはモノリシックです。
Video.js v10 では SPF(Streaming Processor Framework) を導入しました。これは機能コンポーネントで構成され、目的に合わせて小さくまとめられたストリーミングエンジンを作るフレームワークです。単純な HLS 使用例では、SPF を用いた v10 は ABR を含む v8 のファイルサイズの 19 % にしかならないほど軽量です。
| エンジン | Minified (kB) | Gzip (kB) | 備考 |
|---|---|---|---|
| Vidstack + HLS.js | 764.3 | 238.1 | |
| Media Chrome + HLS.js | 701.2 | 202.9 | |
| Video.js v8 + VHS* | 697.0 | 202.7 | *VHS はデフォルトでバンドル |
| Plyr + HLS.js | 614.0 | 188.5 | |
| Video.js v10 + HLS.js | 526.5 | 164.1 | |
| Video.js v10 + SPF [HTML] | 144.6 | 38.7 | |
| Video.js v10 + SPF [React] | 107.3 | 31.6 | |
| v10 Background Video + SPF [HTML] | 61.2 | 18.9 | |
| v10 Background Video + SPF [React] | 49.2 | 15.6 |
SPF 組み合わせエンジンは、単純な Adaptive Streaming(HLS)に必要なものだけを含むため、
hls.js-light のファイルサイズの 12 % にすぎません。その他のエンジン(dash.js, Shaka, hls.js)は大きく、一般的なユースケースで SPF を置き換えることは想定していません。
最小例
React だけで「hello world」のビデオと再生ボタンを作るコードは gzip <5 kB に収まります。プレイヤーのインフラは極めてシンプルですが、カスタムプレイヤーへの拡張も容易です。
Video.js v10 は State・UI・Media をそれぞれ独立したコンポーネントに分離し、API コントラクトで通信します。各コンポーネントは任意で置き換え可能です。音声が不要ならボリューム/ミュートコードはバンドルされません。UI コンポーネントをインポートしなければ、それもバンドルに入らない設計です。
UI カスタマイズ
v10 ベータ版には、以下のような洗練されたスキン(コントロールセット)がデフォルトで搭載されています:
- Default skin – 霧がかった美しい外観
- Minimal skin – 開発者向けにクリーンに設計
両方とも Base UI と Radix に触発されたスタイル未設定 UI プリミティブを用い、各コンポーネントは単一の HTML 要素で出力されるため、直接制御が可能です。任意のスキンをエクスポートすれば、フレームワーク固有言語で完全なソースコードを取得できます ― 本当に自分だけのコンポーネントとして所有・変更できる形です。
デザインは最優先事項です:Plyr の創設者 Sam Potts が新スキンを設計し、洗練されたコントロール、滑らかなインタラクション、思慮深いアニメーション、およびエラーダイアログの統一感を実現しました。
ユースケース別プリセット
プリセットは特定ユースケース向けにスキン・機能・メディア設定をまとめたものです:
- Default video preset – 一般的なウェブサイト用ビデオ
- Default audio preset – 音声タグ置換
- Background video preset – レイアウトのみ、コントロールや音声なし
これらのプリセットを使えば、すぐに構築できる一方で完全なコンポジション柔軟性も残せます。
AI への焦点
ベータ版は Video.js ベースプレイヤーを AI と共に作る体験を重視しています:
- 抽象化の少ないコンポーネントとスタイル未設定 UI プリミティブ
によるドキュメントの効率的ナビゲーション(フレームワーク別)llms.txt- すべてのドキュメントを Markdown バージョンで取得可能 (
)Accept: text/markdown - リポジトリ内に AI スキルが増設され、構築支援を行います
ベータ版の試し方
- API はまだ安定しておらず、GA までインターフェースは変更される可能性があります。
- 機能は限定的です – シンプルなウェブ再生、字幕、多数フォーマット・ストリーミングサービスを想定しています。設定メニューなどはまだ実装途中です。
- フィードバックが不可欠です。GitHub で issue を報告し、Discord に参加して動作確認や不具合を共有してください。
新しいプロジェクトを始める際は videojs.org で v10 を試してください。既存バージョンを本番環境で運用中の方は、マイグレーションガイドに注目していただければ幸いです。
ロードマップ(2026年半期 GA)
- Plyr、Vidstack、Media Chrome との機能同等化
- 2026 年後半に広告サポートを計画
- Video.js v8、Plyr、Vidstack、Media Chrome 向けマイグレーションガイド
- より多くのプレイヤープリセットを追加
謝辞
@cpilsbury, @decepulis, @esbie, @luwes, @mihar‑22, @sampotts, @claude, @dhassoun, @essk, @ewelch‑mux, @gesinger, @gkatsev, @kixelated, @littlespex, @mister‑ben, @misteroneill, @muxinc, @brightcove, @qualabs など、貴重なご協力をいただいた皆様に感謝します。
あなたがビデオプレイヤーへの愛着を再び深めることを心から楽しみにしています ❤️
それでは、
@heff