**Turbopack:構築量を削減し、より高速に実現**

2026/01/21 3:49

**Turbopack:構築量を削減し、より高速に実現**

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

要約

Japanese Translation:


要約

Turbopack は Next.js の新しいデフォルトバンドラで、瞬時のビルドと大規模なワークロードでも高速な React Fast Refresh を実現するように設計されています。その増分アーキテクチャは、10 年以上にわたる研究から構築された細粒度キャッシュに依存し、Salsa、Parcel、Rust コンパイラのクエリシステム、Adapton などからインスピレーションを得ています。

Turbopack の中心には value cells (

Vc<…>
) があり、個々の実行単位を表します。セルが読み取られたときにのみ依存関係が記録されるため、ディスクファイル、AST、モジュールのインポート/エクスポートメタデータ、およびチャンク情報全体でサブセル粒度の追跡が可能です。ソースファイルが変更されると、Turbopack はそれに依存する関数を「汚れた(dirty)」としてマークします;これらの関数は、ホットリロード中などアクティブなクエリに組み込まれた時点で遅延再計算されます。

2 層構造の依存関係システムがこれらの関係を追跡します:

  1. 一次グラフ – 関数 ↔ value cells。
  2. 集約グラフ – 大規模なサブグラフを要約し、各ルートはアプリケーションのエントリポイントまたはルートを表します。この集約により、エラー収集や汚れたノード探索などのクエリ時のトラバースコストが削減されます。

Next.js 16.1 以前はすべてのキャッシュがメモリ内に存在していました。16.1 リリースでは

next dev
用にオンデフォルトでファイルシステムキャッシュを追加し、依存関係と集約グラフ、および value‑cell の中間結果をディスクに永続化しました。この永続化は再起動後の高速ウォームスタートを可能にし、開発者体験を向上させつつ増分精度を維持します。

Turbopack の設計は、増分計算の複雑性とバグ潜在性に対処し、GNU Make など従来のバンドラで見られる粗粒度キャッシュの落とし穴を回避します。その結果、ビルド時間が短縮され、ホットリロードがスムーズになり、より信頼性の高いパイプラインが実現します。これらは開発者の反復速度を加速させ、広範なウェブツールエコシステムに影響を与える可能性があります。

本文

編集 → 保存 → 更新 → 待機…
コードをコンパイルするという作業は、通常「待つ」ことと同義ですが、Turbopack はキャッシュと増分計算により反復ループを瞬時のサイクルへと変換します。すべての最新バンドラが増分アプローチを採用しているわけではなく、それは意図的な選択です。増分計算は大きな複雑さを伴い、バグを招くことがあります。キャッシュには追加の追跡やデータコピーが必要で、CPU とメモリへの負荷が増します。不適切に実装されると、キャッシュ自体がパフォーマンスを低下させることもあります。


なぜ挑戦を受け入れたのか

Turbopack の成功には増分アーキテクチャが不可欠だと私たちは知っていました。Next.js の新しいデフォルトバンドラとして、インスタントビルドと「タイプしながら即座に反映される」React Fast Refresh を実現する必要があります――最大規模で最も要求の高いワークロードでも同様です。この増分設計がその核となります。


デザイン原則

  • キャッシュを念頭に置いたゼロからのアーキテクチャ
    Turbopack の増分システムは、webpack のキャッシュ問題を直接経験し、10 年以上の研究成果を活かしてゼロから構築しました。Salsa(Rust Analyzer や Ruff で使用)、Parcel、Rust コンパイラのクエリシステム、Adapton などに触発されました。

  • 細粒度キャッシュ
    内部関数がどのように呼び出され、何を参照しているかを自動的に追跡することで、変更があった場合には最小限の結果だけを再計算します。


手動 vs. 自動増分計算

手動依存関係グラフ

GNU Make など多くのビルドシステムは明示的な依存関係グラフを宣言するよう求めます。理論上は最適ですが、エラーが起きやすく、ファイル単位で粗い粒度になりがちです。粗い粒度はキャッシュサイズを削減しますが、内部データ構造のキャッシュ機会も失います。

自動細粒度計算

バンドラはツリーシェイキングや依存関係クラスタリングのためにプログラム全体を解析します。生成されたアーティファクトはソースファイルとの多対多の複雑な関係を持つため、手動グラフでは実用的ではありません。Turbopack は関数レベルで依存関係追跡を自動化することでこれを解決します。


Value Cells – 自動キャッシュの核

  • value cell(Vc<…>)は、スプレッドシートセルに似た細粒度実行単位です。
  • 関数がセルを読み取ると、その関数自身と読み取ったすべてのセルを依存関係として記録します。
  • 依存関係は初回読み取り時にのみ登録され、トップダウンメモ化よりも細かな粒度が実現できます。
  • 例:多くの value cell を持つオブジェクトが引数になると、その具体的なセルだけが変更された場合に再計算がトリガーされます。

Value cells は、ディスクファイル・AST・インポート/エクスポートメタデータ・チャンク分割やバンドリングのクラスタリングデータなど、Turbopack 内のすべてをカバーします。


ダーティプロパゲーション

  1. 初回実行:要求された出力(バンドル済みアセット)を根とし、ソースファイルを葉とするグラフを構築。
  2. ファイルシステムウォッチャーが変更されたファイルの value cell を読み取った関数を ダーティ とマーク。
  3. ダーティな関数を再計算すると影響を受けるセルが更新され、内容が変わらない場合は更新をスキップ。
  4. ダーティ状態はグラフ上で伝播し、すべての影響を受けた関数が再計算されるまで続く。

需要駆動実行 は、ダーティな関数が「アクティブクエリ」(ホットリロードされたページや本番ビルドなど)に含まれるまで再実行を遅延させます。


集約グラフ

大規模な依存関係グラフの一部を調べる必要がある操作があります:

  • サブグラフがアクティブになるときにすべてのダーティノードを探す。
  • エラー、警告、リント情報をサブグラフから収集する。
  • サブグラフの計算完了を待つ。

細粒度キャッシュは数百万ノードに達することがあるため、集約グラフ―層状の要約を使用して走査コストを削減します。各レイヤーでより多くの関数を少ないノードにまとめ、上位レイヤーでは詳細度が下がりますが、走査すべきノードは大幅に減少します。エントリポイントやルートなど、あらゆる潜在的なアクティブクエリは集約グラフの根になります。


ファイルシステムキャッシュ

Next.js 16.1以前はすべてのキャッシュがメモリ内に留まっていました。新バージョンでは

next dev
用に ファイルシステムキャッシュ が追加され、安定してデフォルトで有効になります。これにより次のものが永続化されます:

  • 依存関係グラフ
  • 集約グラフ
  • value cell に格納されたすべての中間結果

再起動時に

next dev
はこの温かいキャッシュから復帰し、スタートアップ時間を大幅に短縮します。

永続的キャッシュの実装には、パフォーマンスと品質基準を満たすために 1 年以上の集中的な作業が必要でした。詳細は今後公開予定のエンジニアリングブログで共有します。


フィードバック & コミュニティ

Next.js の未来を共に形づくるために、ぜひご参加ください:


同じ日のほかのニュース

一覧に戻る →

2026/01/26 4:03

まず、私に関心を持っていただけるようにしてほしいです。

## Japanese Translation: **改訂要約:** 著者は、ウェブサイト、個人の「Me」セクション、ブログを組み合わせた新しいプラットフォームを立ち上げました。外部リソースへのリンクとファンサポート用のPatreonページが特徴です。今後の計画としては、さらに多くのブログ投稿を追加し、リンク統合を拡大し、場合によっては追加のPatreonティアを作成することがあります。これによりユーザーはキュレーションされたコンテンツへ簡単にアクセスでき、クリエイターには追加収益源が提供されます。 (このバージョンではすべての主要ポイントを保持し、推測された業界全体のトレンド表現を削除しています。)

2026/01/26 9:10

**科学者たちが「あなた」の限界を決める脳波を特定**

## Japanese Translation: > 本研究は、頭頂皮質におけるアルファ振動のリズムが、人々がゴム手を所有していると感じる強さを因果的に形成することを示しています。スウェーデンの研究者66名とフランスの研究者43名が合計106名の被験者から脳波(EEG)を記録し、古典的なゴム手錯覚を体験させました。ロボットアームは実際の手と偽の手の両方にタップを打ち、タップの同期性は最大500 msまで遅延させられました。 > > 被験者はタップが同期しているときに最も強い所有感を報告し、遅延が増すにつれてその感覚が弱まりました。EEGからは、頭頂部のアルファ周波数が被験者の遅延検知能力と相関していることが明らかになりました:高速なアルファ波は小さな時間ギャップに対する敏感性を高め、一方で低速なアルファ波は大きなギャップが存在しても錯覚を強化しました。 > > 頭頂部のアルファ波を人工的に高速化または遅延させる経頭蓋交流電流刺激(tACS)を用いて、研究者たちは因果関係を確認しました——アルファ波を加速すると所有感が増し、逆に減速すると錯覚が弱まり、自分の手と偽手との区別が難しくなりました。 > > これらの結果は *Nature Communications* に掲載され、頭頂部のアルファ活動が身体所有感を構築する上で因果的役割を果たすことを示唆しています。精神疾患(統合失調症や幻肢痛など)の治療に寄与したり、ターゲットとした脳刺激によってよりリアルな義手や仮想現実インターフェースの設計指針となる可能性があります。

2026/01/26 0:34

**タイトル** 「姿勢が悪くなると画面をぼかす macOS アプリ」

## Japanese Translation: Posturrは、MacのカメラとAppleのVisionフレームワークを使用してリアルタイムで姿勢を監視する軽量macOSアプリです。鼻と肩の角度を測定し、全身ランドマークが利用できない場合は顔検出にフォールバックします。前かがみが検知されると、画面が徐々にぼかれます(デフォルトではmacOSのプライベートCoreGraphics APIを使用し、互換モードではNSVisualEffectViewにフォールバック)。良い姿勢が回復するとぼかしは即座に消えます。ぼかしの強度は「Low」から「Very High」に段階的に上昇し、デッドゾーン設定で軽微な前かがみを無視できます。 Posturrは完全にローカルで動作します:動画データはマシンを離れず、オンラインアカウントやクラウドサービスも不要です。MITライセンスのソースコードはコミュニティへの貢献を歓迎しています。メニューバーには小さなアイコンがあり、ステータス表示、監視の有効/無効化、再校正、感度調整、互換モード切替、デッドゾーン設定、またアプリ終了などが可能です。また、外部制御用に`/tmp/posturr-command`というファイルベースのコマンドインターフェイス(`capture`、`blur <0‑64>`、`quit`)も公開しています。 インストールは簡単で、Homebrew(`brew install --cask posturr`)を使用するか、リリースページから署名済みのDMG/ZIPをダウンロードします。ノタリゼーションされており、システム設定でカメラ権限が必要です。最適な結果を得るためには、カメラを目線レベルに位置させ、十分な照明を確保し、画面を向いて座り続け、肩が見えるようにしてください。Posturrはマルチディスプレイ環境にも対応しており、macOS 13+でXcode Command Line Toolsを使用してソースからビルドできます。 すべての処理をデバイス上で完結させ、プライバシー優先設計を提供することで、Posturrは姿勢モニタリングツールがユーザーのプライバシーを侵害せずにエルゴノミック支援を行う方法を示しています。