私たちが待ち望んでいたJavaScript標準ライブラリ
JavaScriptのエコシステムは長年、包括的な標準ライブラリの欠如に悩まされてきました。この空白により、開発者は多数のマイクロパッケージを統合せざるを得ず、プロジェクトの依存関係が大幅に肥大化し、サプライチェーン攻撃への脆弱性が高まっていました。断片化されたサードパーティ製ソリューションへの依存は、永続的なアーキテクチャ上の課題となっていました。
Bun 1.4は、Rust Rewriteとして導入され、この問題に直接対処します。このランタイムは、これまで外部パッケージを必要としていたコア機能を、Rustで設計された高性能なユーティリティとして統合しました。これにより、さまざまなプロジェクトタイプで一般的だった15以上の依存関係を排除できます。
依存関係の置き換えの具体的な例は以下の通りです:
- Bun.WebView: PlaywrightやPuppeteerに代わるヘッドレスブラウザ制御
- Bun.Image: Sharpなどのライブラリを不要にする画像処理機能
- Bun.Markdown: 強力なMarkdown解析の統合
- Bun.Terminal: node-ptyへの依存を解消する組み込みの疑似端末
この統合的なアプローチは、JavaScriptエコシステムにおける大きな哲学の転換を示しています。断片的なマイクロパッケージの文化から脱却し、より堅牢な「バッテリー同梱型」のランタイムへと移行します。Bun 1.4は基盤となる機能を統合し、安定性の向上とプロジェクトのオーバーヘッド削減を目指しています。
ネイティブAPIでPuppeteerとSharpを排除
Bun 1.4では、自動化のための組み込みヘッドレスブラウザであるBun.WebViewが導入されました。これはPlaywrightやPuppeteerなどの依存関係を置き換えるように設計されています。Macでは、Bun.WebViewはSafariのエンジンであるWebKitを利用するため、追加のインストールは不要です。WindowsおよびLinuxユーザー向けには、既存のChromeまたはChromiumインスタンスを活用し、ヘッドレスサブプロセスの実行や、既に開いているブラウザへの接続が可能です。
このネイティブ統合により、クリック、タイピング、スクロールなどの操作でネイティブブラウザイベントが発行され、Webページに対してより人間らしい挙動を実現します。そのAPIは、要素の検索、クリック、タイピング、evaluateを介したページ固有のJavaScript実行といった基本的な操作をカバーしています。軽量なブラウザ自動化やスクレイピングには有効ですが、Bun.WebViewはテストランナーやトレースビューアなどの機能を欠いており、現時点ではPlaywrightのようなツールを完全に置き換えるものではありません。
依存関係の肥大化をさらに削減するため、Bun.ImageがSharpの強力な代替手段として機能します。このネイティブ画像ライブラリは、Bun内で直接チェーン可能な操作を提供します。開発者は、画像のサイズ変更、回転、反転、明るさや鮮明さの調整、フォーマット変換を効率的に行えます。また、Bun.Imageはピクセルデータの完全なデコードを必要とせずに、幅、高さ、フォーマットなどのメタデータを読み取ることができます。これにより、複雑なネイティブビルドが不要になり、外部の画像処理ライブラリで頻繁に発生するデプロイメントの問題に対処できます。
開発ワークフローを標準機能に
Bun 1.4では組み込みのスクリプトランナーが導入され、concurrentlyやnpm-run-allといった外部依存関係が不要になりました。開発者は、--parallelを使用して複数のpackage.jsonスクリプトを並列実行したり、--sequentialを使用して順次実行したりできるようになりました。この機能には、スクリプト名による出力のプレフィックス、スクリプト名のグロブマッチング、ワークスペースフィルタリングが含まれます。また、いずれかのスクリプトでエラーが発生しても他のスクリプトを継続させるオプションも用意されています。
タスクスケジューリングにおいて、Bun.cronはnode-cronなどのパッケージを置き換えるものです。2つのモードをサポートしており、シンプルなジョブにはイベントループ上で実行される関数を、OSレベルのネイティブなcronジョブにはスクリプトを登録します。これらのシステムレベルのジョブは、Linuxではcrontab、Macではlaunchd、Windowsではタスクスケジューラを活用し、堅牢で永続的な実行を実現します。名前付きの日付やdailyのようなヘルパーを含む、標準的なcron構文がサポートされています。
疑似端末(pseudo-terminal) APIであるBun.Terminalがランタイムに直接統合され、node-ptyが不要になりました。これにより、JavaScriptからBash、Vim、Htopといった対話型コマンドラインアプリケーションを操作できるようになります。Bun.spawnにはterminalオプションが追加され、サブプロセスがカラー出力、カーソル移動、対話型プロンプトのための真のターミナル環境を確実に受け取れるようになりました。これらの機能やその他の詳細については、Bun 1.4のリリースノートを参照してください。
この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。
1日1通 · 2クリックで解除 · サードパーティのトラッキングなし
Rustによる書き直しの真の恩恵
Bun 1.4の基盤となるRust Rewriteは、再設計の真の恩恵として大幅なパフォーマンス向上をもたらします。この再エンジニアリングにより、起動時間が短縮され、すべての操作においてCPU使用率が測定可能なレベルで低下しました。特筆すべきは、Bun.WebViewやBun.Imageといった広範な新機能が追加されたにもかかわらず、Bunのバイナリサイズが17%削減されたことです。
追加のユーティリティにより、開発ワークフローがさらに効率化されます。Bun.Archiveは、tarballを検査するための高速なネイティブ実装を提供し、開発者は.tgzアーカイブからpackage.jsonのような特定のファイルを、完全に展開することなく読み取ることができます。また、BunはJSON5とXMLの両方の解析および文字列化をネイティブでサポートし、これらの一般的なデータ形式のためにサードパーティ製ライブラリを使用する必要がなくなりました。
パッケージ管理における重要な利便性の向上として、新しいグローバル仮想ストアであるisolatedLinkerが導入されました。この機能は、インストールされたパッケージを複製するのではなく、各プロジェクトのnode_modulesフォルダにシンボリックリンクを作成することで、ディスク容量を大幅に節約します。また、isolatedLinkerは複数のプロジェクト間でのbun installコマンドを高速化し、開発者の全体的な効率を向上させます。
よくある質問(FAQ)
Bun 1.4における最大の変更点は何ですか?
「Rust Rewrite」により強力な組み込み標準ライブラリが導入され、ブラウザ自動化、画像処理、cronジョブなどのタスクで一般的に使用される15以上のNPM依存関係を、ランタイム内で直接置き換えることを目指しています。
Bun 1.4はPlaywrightやPuppeteerを完全に置き換えますか?
完全ではありません。Bun.WebViewは軽量なブラウザ自動化、スクレイピング、UIスクリプトには最適ですが、現時点ではPlaywrightにある専用のテストランナーやトレースビューアのような高度な機能は備わっていません。
Bun 1.4で置き換え可能な主要な依存関係にはどのようなものがありますか?
Bun 1.4は、Playwright/Puppeteer(Bun.WebView)、Sharp(Bun.Image)、Marked(Bun.Markdown)、node-cron(Bun.cron)、concurrently(並列スクリプト)、およびさまざまなtarやANSI文字列ライブラリなどを置き換えることができます。
Bun 1.4のグローバル仮想ストアはどのように機能しますか?
isolatedLinkerが有効な場合、bun installはパッケージをマシン上の単一のグローバルストアに展開します。その後、シンボリックリンクを使用してそれらをプロジェクトのnode_modulesに接続することで、ディスク容量を大幅に節約し、複数のプロジェクト間でのインストールを高速化します。

