Bun バージョン 1.3.9

2026/02/09 2:39

Bun バージョン 1.3.9

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

要約

Japanese Translation:


Summary

Bunの最新リリースでは、ランタイム、ツールチェーン、およびAPI表面に新機能・パフォーマンス向上・バグ修正が追加されました。主な変更点は以下の通りです。

  • スクリプト実行:
    bun run --parallel
    bun run --sequential
    は、複数の
    package.json
    スクリプトを並列または順次に実行できるようになりました。ワークスペースとフィルタオプションもサポートしています。
    --no-exit-on-error
    フラグは、一つのスクリプトが失敗してもすべてのスクリプトを継続します。
    --if-present
    は、要求されたスクリプトが存在しないパッケージをスキップします。
  • 出力フォーマット: 各スクリプトの出力行は、色付きでパディングされたラベル(スクリプト名と、フィルタやワークスペース使用時にはパッケージ名)で接頭辞されます。
  • HTTP/2アップグレード処理: Net.Server → Http2SecureServer の接続アップグレードパターンが正しく動作し、http2-wrapper や crawlee などのライブラリが生の TCP 接続を HTTP/2 サーバへ転送できるようになりました。
  • モック破棄:
    mock()
    spyOn()
    [Symbol.dispose]
    を実装し、
    using
    キーワードでオブジェクトがスコープ外になると自動的にモックを復元します。
  • プロキシ処理:
    NO_PROXY
    環境変数は、
    fetch()
    WebSocket()
    に明示的なプロキシオプションが渡されても尊重されます。
  • CPU プロファイリング:
    --cpu-prof-interval
    フラグで CPU プロファイルのサンプリング間隔(マイクロ秒)を設定できます(デフォルトは 1000 µs)。
  • ESM バイトコードコンパイル:
    --compileUsing --bytecode --format=esm
    の ESM バイトコードサポートが有効になりました。明示的にフォーマットを指定しない場合は CommonJS がデフォルトです。
  • ARMv8.0 修正: Linux aarch64 CPU での誤ったアトミック命令によるクラッシュが解消され、Bun は ARMv8.0 を正しくターゲットします。
  • Markdown & 正規表現高速化: Markdown のレンダリング(
    Bun.Markdown
    Bun.markdown.react()
    )は SIMD でスキャンし、キャッシュされた HTML タグ文字列を使用することで 3–15 % の速度向上を実現します。JavaScriptCore の RegExp エンジンは SIMD アクセラレーテッドプレフィックス検索と固定数括弧 JIT を採用し、正規表現パターンで最大約4倍のスピードアップが可能です。
  • その他のバグ修正 & API 改良: Node.js 互換性の更新(例:Windows 上での
    existsSync('.')
    )、WebSocket の binaryType 処理、HTTP プロキシリクエストハング修正、チャンク付きエンコーディングパーサーのセキュリティパッチ、および Bun.build ターゲット用 TypeScript 型の更新などが含まれます。

これらの改善は、以前のリリースで残っていた並列処理不足、HTTP/2 サポート制限、モック破棄欠如といったギャップを埋め、セキュリティと Node.js 互換性を強化します。開発者や企業にとって、このアップデートはビルド速度の向上、ランタイムコストの低減、テストコードのクリーンさ、そして多様な環境でのネットワーク信頼性向上を意味します。

本文

Bunのインストール

curl -fsSL https://bun.sh/install | bash

またはPowerShell:

irm bun.sh/install.ps1 | iex

Docker:

docker run --rm --init --ulimit memlock=-1:-1 oven/bun

Bunのアップグレード

bun run --parallel
bun run --sequential

package.json
内の複数スクリプトを並列または順次で実行し、Foreman 風にプレフィックス付きで出力します。
--filter
--workspaces
を併用するとワークスペース全体に渡ってスクリプトを走らせることも可能です。

コマンド説明
bun run --parallel build test
現在の
package.json
から buildtest を同時に実行。
bun run --sequential build test
buildtest を順次、プレフィックス付きで実行。
bun run --parallel "build:*"
グロブマッチしたスクリプト名を並列実行。
bun run --parallel --filter '*' build
ワークスペース内のすべてのパッケージで build を同時に実行。
bun run --sequential --workspaces build
すべてのワークスペースパッケージで build を順次実行。
bun run --parallel --filter '*' build lint test
複数スクリプトを全パッケージで並列実行。
bun run --parallel --no-exit-on-error --filter '*' test
1 パッケージが失敗しても残りは継続。
bun run --parallel --workspaces --if-present build
スクリプトが無いパッケージはスキップ。

出力の各行は色付きでラベル付きです:

build | compiling...
test  | running suite...
lint  | checking files...

--filter
--workspaces
を使うと、ラベルにパッケージ名も付加されます:

pkg-a:build | compiling...
pkg-b:build | compiling...
  • --parallel
    はすべてのスクリプトを即時開始し、インターリーブされたプレフィックス付き出力を行います。
  • --sequential
    は順番に1つずつ実行します。
  • デフォルトでは失敗したら残りは停止しますが、
    --no-exit-on-error
    で継続可能です。

prebuild
,
postbuild
等の前後スクリプトは自動的にグループ化され、各グループ内で正しい依存順序で実行されます。

--filter
bun --filter="pkg" <script>
の違い

bun --filter="pkg" <script>
  • 依存関係を尊重し、スクリプトはその依存先が完了してから開始します。
  • 長時間実行されるウォッチスクリプトに有効です。
  • --parallel
    --sequential
    は依存順序を考慮しません。

net.Server
を使った HTTP/2 接続アップグレード

net.Server → Http2SecureServer
の接続アップグレードパターンが正しく動作するようになりました。これにより、http2-wrapper, crawlee などのライブラリや独自 HTTP/2 プロキシサーバーで原始 TCP 接続を転送できるようになります。

import { createServer } from "node:net";
import { createSecureServer } from "node:http2";
import { readFileSync } from "node:fs";

const h2Server = createSecureServer({
  key: readFileSync("key.pem"),
  cert: readFileSync("cert.pem"),
});

h2Server.on("stream", (stream, headers) => {
  stream.respond({ ":status": 200 });
  stream.end("Hello over HTTP/2!");
});

const netServer = createServer((rawSocket) => {
  h2Server.emit("connection", rawSocket);
});

netServer.listen(8443);

Symbol.dispose
によるモックサポート

mock()
spyOn()
Symbol.dispose
を実装したため、
using
キーワードでスコープを抜けた際に自動的にモックが復元されます。

import { spyOn, expect, test } from "bun:test";

test("auto-restores spy", () => {
  const obj = { method: () => "original" };

  {
    using spy = spyOn(obj, "method").mockReturnValue("mocked");
    expect(obj.method()).toBe("mocked");
  }

  // `spy` がスコープを抜けたときに自動復元
  expect(obj.method()).toBe("original");
});
import { mock } from "bun:test";

const fn = mock(() => "original");
fn();
expect(fn).toHaveBeenCalledTimes(1);

fn[Symbol.dispose](); // fn.mockRestore() と同等
expect(fn).toHaveBeenCalledTimes(0);

NO_PROXY
を明示的なプロキシオプションで尊重

以前は

http_proxy/HTTP_PROXY
から自動検出されたときのみ
NO_PROXY
が機能していました。
現在は、明示的に
proxy
オプションを指定した場合でも常に
NO_PROXY
をチェックします。

// NO_PROXY=localhost
await fetch("http://localhost:3000/api", { proxy: "http://my-proxy:8080" });
// プロキシが正しくバイパスされます。

WebSocket も同様です。


CPUプロファイラ

Bun は Node.js と同等の

--cpu-prof-interval
フラグをサポートします。
デフォルトは 1000 µs (1 ms) です。

bun --cpu-prof --cpu-prof-interval 500 index.js   # 500 µs 毎にサンプリング

--cpu-prof
--cpu-prof-md
を指定しないと警告が出ます。


ESM バイトコードコンパイル

  • --compileUsing --bytecode --format=esm
    が利用可能になりました。
  • 形式を明示しなければデフォルトは CommonJS(将来のバージョンでは ESM に変更されるかもしれません)。

ARM64 対応修正

  • Cortex‑A53、Raspberry Pi 4、AWS a1 等の古い ARM64 CPU で発生していたクラッシュを解消。
  • Linux aarch64 では ARMv8.0 をターゲットにし、ランタイムディスパッチ用にアウトラインアトミックを使用。

Markdown レンダリング性能向上

  • Bun.Markdown
    は HTML エスケープ(
    &
    ,
    <
    ,
    >
    ,
    "
    )のため SIMD で高速化。
    → 3–15 % のレンダリング速度アップ。
  • Bun.markdown.react()
    内で頻繁に使われる HTML タグ文字列をキャッシュ。
    → 文字オブジェクト数が 40 % 削減、ヒープ使用量が 6 % 減少。

AbortSignal 最適化

AbortSignal.abort()
はリスナーが無い場合にイベントオブジェクトの生成とディスパッチを省略。
16 ms / 1M 呼び出し の高速化(≈6 %)を実現。


JavaScriptCore 強化

  • SIMD 加速された正規表現前方検索 (ARM64/TBL2, x86_64/PTEST)。
  • 新しい定数マテリアライズプリミティブ (
    move128ToVector
    など)。
  • 固定カウントの括弧は JIT コンパイル対象となり、約 3.9× のスピードアップ。

文字列 & コレクション最適化

機能改善
String.prototype.startsWith
1.42×高速(定数フォールディングで 5.76×)
Set.size
,
Map.size
イントリニシックで 2–3×高速化
String.prototype.trim*
10–17 % 改善
Object.defineProperty
DFG/FTL でイントリニシックとして認識
String.prototype.replace
ロープを使用し、急激コピーを回避

Node.js 互換性修正

  • .
    ,
    Function.prototype.toString()
    のホワイトスペース処理、
    node:http2
    のクラッシュ解消。
  • Bun.stringWidth
    がタイ語/ラオ語の間隔付き母音を正しく報告。
  • WebSocket クライアントで
    binaryType="blob"
    を使用した際のクラッシュ修正。
  • HTTP プロキシがハングする問題解消。
  • チャンクエンコーディングパーサーにおけるリクエストスモグリングのセキュリティ修正。

TypeScript 定義更新

  • Bun.Build.CompileTarget
    に SIMD バリアントを追加。
  • bun-linux-x64-baseline
    bun-linux-x64-modern
    ターゲットを追加。
  • Socket.reload()
    の型を
    { socket: handler }
    に修正。

同じ日のほかのニュース

一覧に戻る →

2026/02/08 12:09

ご協力いただけるとのこと、ありがとうございます! 整えたいテキストをお送りください。すぐに丁寧に仕上げさせていただきます。

## Japanese Translation: ``` ## Summary Vouch は、貢献者がコードベースの設定可能な部分と対話する前に「証明(vouch)」される必要がある軽量なコミュニティトラスト管理システムです。また、明示的に「非承認(denounce)」を行うことでそのような対話をブロックできます。信頼関係は単一のフラット `.td` ファイル(Trustdown フォーマット)に保存されます。このファイルでは各行が1つのハンドルを保持し、オプションでプラットフォーム接頭辞(`platform:username`)と先頭マイナス記号が付けられたユーザーは非承認者として扱われ、その後に任意の理由が続きます。GitHub Actions は標準搭載の統合を提供します: - `check-pr` は `pull_request_target` で実行され、PR 作成者のステータスを検証し、未承認または非承認のプルリクエストを自動的に閉じることができます。 - `manage-by-discussion` と `manage-by-issue` は協力者がディスカッションやイシューコメントを通じて証明または非承認を行えるようにします。 Nushell CLI モジュールにより手動制御も可能です:`vouch add <user>`、`vouch denounce <user> [--reason] --write`、`vouch gh-check-pr <pr_id> --repo owner/repo`(ドライランまたは自動閉鎖)、および `vouch gh-manage-by-issue <pr_id> <comment_id> --repo owner/repo` などのコマンドがあります。ステータスチェックは終了コードを返します(`0 = vouched`、`1 = denounced`、`2 = unknown`)。 Vouch は任意のコードフォージで動作するよう設計されていますが、GitHub 統合がすぐに使用できる状態で提供されます。現在は実験段階であり、Ghostty プロジェクトによってテスト中です。このプロジェクトはコミュニティからのフィードバックをもとに機能を洗練しています。今後の計画としては、リポジトリ間で信頼リストをリンクし信頼ネットワークを構築すること、プラットフォームサポートの拡張、および自動化機能の強化が挙げられます。 *検証された参加を強制することで、Vouch は悪意ある貢献を減らし、コードレビューのワークフローを合理化し、安全なコラボレーションをオープンソースメンテナ、企業チーム、および広範なソフトウェア開発エコシステムに奨励することを目指します。``` ```

2026/02/09 6:52

米国におけるソーシャルメディア利用の変化 2020–2024:減少・断片化・極化 (2025)

## Japanese Translation: ## Summary: 本研究は、米国におけるソーシャルメディアの利用が縮小し、より断片化していることを示し、残存する活動の中で政治的に極端なユーザーが支配していると結論付けている。2020–2024年の全国代表データを分析した結果、プラットフォーム全体の利用率は減少し、対象者はやや高齢化し教育レベルも上昇しており、投稿活動が共和党ユーザーへと明確にシフトしている—特にTwitter/Xで顕著だ。既存研究では若年層と高齢層の両方で減少傾向が指摘されていたが、本稿は新しいデータを用いてそれらの発見を更新し、TikTokやRedditはわずかに成長しているものの、Facebook、YouTube、Xは市場シェアを失っていることを示唆している。予測される動向として、オンライン公共圏はより小規模で鋭く、極端な意見が支配するようになるとされ、一般ユーザーは離脱しつつも党派的声は依然として高いままである。この結果は、デジタル環境のさらなる分極化を招き、プラットフォームに広範なオーディエンスを維持する課題を投げかけるとともに、広告主や政治戦略家、民主的議論に関心を寄せる政策立案者にも影響を与える可能性がある。 ## Summary Skeleton **What the text is mainly trying to say (main message)** 本研究は、米国におけるソーシャルメディアの利用が縮小し、より断片化していることを示し、残存する活動の中で政治的に極端なユーザーが支配していると結論付けている。 **Evidence / reasoning (why this is said)** 全国代表性のある2020–2024年のANESデータは、全体的なプラットフォーム利用率の低下、やや高齢化し教育レベルが上昇したオーディエンス、および投稿活動が共和党ユーザーへとシフトしている—特にTwitter/Xで顕著だという事実を示している。 **Related cases / background (context, past events, surrounding info)** 以前の分析では若年層と高齢層の両方で利用減少が報告されており、本稿は新しいデータでそれらの発見を更新し、TikTokやRedditはわずかに成長している一方でFacebook、YouTube、Xは市場シェアを失っていることを指摘している。 **What may happen next (future developments / projections written in the text)** オンライン公共圏は小規模で鋭く、よりイデオロギー的に極端になると予測されており、カジュアルユーザーは離脱しつつも党派的声は依然として発言力を保っている。 **What impacts this could have (users / companies / industry)** ユーザーはより分極化したデジタル環境に直面し、プラットフォームは広範なオーディエンスの維持に課題を抱えることになる。トレンドは広告主や政治戦略家、民主的議論に関心を寄せる政策立案者にも影響を与える可能性がある。

2026/02/09 7:25

SGI O2 のプロンプトを逆解析する (原文: “Reverse Engineering the Prompt for the SGI O2”)

## Japanese Translation: > 著者は **`ip32prom-decompiler`** を開発しました。このツールは、SGI O2 マシンで使用されている 512 KiB の IP32 PROM を *ビット単位で同一* な MIPS アセンブリ (.S) ファイルに逆アセンブルし、ラベル、コメント、および関数境界を完全に含みます。 > > 各「SHDR」セクション(長さ・名前・バージョン・タイプフラグ(コード/メタデータ)・任意のメタデータ・2 つのチェックサム)を解析することで、ツールはファームウェアの 3 つのサブセクションを再構築します:`.text` は `0x81000000` に、`.rodata` は `0x81048e70` に、そして `.data` は `0x81054100` に配置されます。チェックサムアルゴリズムは 32‑ビット語全体の 2 の補数和であり、セクションデータと SHDR 自体の両方に適用されます。 > > 到達可能なコードを幅優先探索し、相対/絶対分岐、ジャンプテーブル、および構築されたアドレスに特別な処理を行うことで、バイナリ命令の約 **90 %** を回復します。可視化(XPM 画像)はコード、ヘッダー/チェックサム、ASCII データ、アクセス済みメモリ、nop パディング、および未知のバイトを色分けし、手動解析を支援します。また、コンパイラ遅延スロットによって導入された到達不能またはデッドコードが検出され、注釈付きで記録されます。 > > 逆アセンブルされたアセンブリは同一の ROM イメージに再構成でき、PROM 構造を完全に理解していることを確認します。ファームウェアがこれからゼロから再構築可能になったため、将来の CPU アップグレード(例:新しいプロセッサの導入)は SGI のサポートに依存せずに実行できるようになり、O2 の PROM が変更不可能であるという長年の制約を克服します。この成果は、ホビイストやレトロコンピューティング愛好者に対しても、レガシーファームウェアのリバースエンジニアリング手法として信頼性の高い方法を提供します。 *この改訂版サマリーは、リストからすべての主要ポイントを取り入れつつ、曖昧または推測的な表現を排除して明確に保っています。*

Bun バージョン 1.3.9 | そっか~ニュース