OSS探訪GitHubでログイン

長い一覧のうち画面付近の要素だけを計算し、描画量を抑えるヘッドレス仮想化ライブラリ

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
7,128
主要言語
TypeScript
ライセンス
MIT
リポジトリ最終更新
2026/09/21
ページ内ナビ

概要

TanStack Virtualは、長い一覧や格子表示で、見えている範囲とその周辺だけを描画するための位置計算を提供します。見た目を決めないため、React、Vue、Svelteなど既存の画面部品へ組み込めます。

特徴と向いている用途

実機検証あり(下記の環境・範囲に限定) · 内容確認日:

主な特徴

何を処理できるか

項目数、推定寸法、表示領域、スクロール位置から、描画する項目の番号・開始位置・大きさを返します。固定版の例では100件を30pxずつと見なし、90pxの領域を300pxまで動かした結果を計算します。

出典:[1][2][3]

向いている用途

どの場面に合うか

ログ、検索結果、表など、全件をDOMへ置くと表示や操作が重くなる一覧に向きます。実際の画面では測定値の変化とスクロール要素を接続し、返された項目だけを配置します。

出典:[2][3]

導入前の確認

導入前に確認する点

データ取得や画面部品そのものは含まず、項目の安定したキー、寸法推定、スクロール要素の管理は利用側の責任です。GitHubと3.17.11のLICENSEはMITです。

出典:[3][4][5]

3.17.11 / macOS, Node.js 26.7.0, isolated temporary npm project

Executed the pinned @tanstack/virtual-core API example and verified 9,10,11,12,13; no browser or external service was used.

参考にした公式資料

  1. [1]TanStack/virtual README at 78371e851e90(2026-10-05)
  2. [2]Virtual official documentation(2026-10-05)
  3. [3]@tanstack/virtual-core 3.17.11 package source(2026-10-05)
  4. [4]TanStack/virtual LICENSE at 78371e851e90(2026-10-05)
  5. [5]TanStack/virtual GitHub metadata(2026-10-05)
編集部からの補足

一覧の見た目を変えずに描画件数を減らしたい場合に適します。まずコアAPIへ既知の領域と位置を渡し、余白を含む項目範囲が予測どおりか確かめてください。

3ステップで試す

  1. 1

    固定版のコアを準備する

    Node.jsとnpmが必要です。一時ディレクトリにvirtual-core 3.17.11を固定して導入します。

    demo=$(mktemp -d "${TMPDIR:-/tmp}/tanstack-virtual.XXXXXX") && cd "$demo" && npm init -y >/dev/null && npm install --save-exact @tanstack/virtual-core@3.17.11
  2. 2

    仮想一覧の条件を与える

    100件・各30px・表示高90px・スクロール位置300pxを模した仮想一覧を作ります。前後1件の余白も指定します。

    printf '%s\n' 'import {Virtualizer} from '\''@tanstack/virtual-core'\''' 'let setRect,setOffset' 'const v=new Virtualizer({count:100,getScrollElement:()=>({}),estimateSize:()=>30,overscan:1,observeElementRect:(_,cb)=>{setRect=cb;return()=>{}},observeElementOffset:(_,cb)=>{setOffset=cb;return()=>{}},scrollToFn(){}})' 'v._didMount();v._willUpdate()' 'setRect({width:300,height:90});setOffset(300,false)' 'console.log(v.getVirtualItems().map(item=>item.index).join('\'','\''))' > demo.mjs
  3. 3

    描画対象の範囲を検証する

    画面内の10〜12番に前後1件を加え、9〜13番だけが描画対象になることを確認します。

    test "$(node demo.mjs)" = "9,10,11,12,13"
公式READMEで確認

成長

成長の推移 · 直近30日

7,128 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
15
Open PR
38

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • react
  • reactjs
  • virtualization
  • virtualized
  • javascript
  • scrolling
  • performance
  • solid
  • solidjs
  • svelte
  • vue
Stars
7,128
Forks
472
Watchers
34
Open Issues
82
Contributors
152
所有者種別
Organization
主要言語
TypeScript
ライセンス
MIT
リポジトリ最終更新
2026/09/21

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?