OSS探訪

Node.js上でDOM・HTML標準のsubsetを再現し、testやscrapingに使う

スコアの見方

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

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

概要

jsdomは、WHATWG DOMとHTMLを中心としたWeb標準の一部をJavaScriptで実装し、Node.js上にwindowとdocumentを作るlibraryです。DOM test、server-sideのmarkup解析、browser APIを前提とするcodeの検証などに利用できます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

HTML文字列からwindowとdocumentを作成する

new JSDOM(html)でDOMを構築し、dom.window.documentからquerySelector等の標準DOM APIを使って要素を参照・操作できます。

出典:[2]

URL・resource loading・script実行などをoptionで調整する

url、resources、runScripts、pretendToBeVisual等のoptionで、相対URL解決、subresource読込、script実行、visibilityやrequestAnimationFrameの扱いを変更できます。

出典:[2]

向いている用途

DOM依存codeのunit/integration testやserver-side解析に向く

実browserを起動せずにDOM APIが必要なtestを実行したり、HTMLから情報を抽出・変換したりする用途に向きます。

出典:[2]

導入前の確認

layoutや描画を行う実browserではない

pretendToBeVisualを有効にしても実際のlayoutやrenderingは実装されません。pixel結果、実browser固有挙動、完全なnavigationが必要な場合はPlaywright等との使い分けが必要です。

出典:[2]

未信頼contentでscript実行を有効にしない

READMEはrunScripts: 'dangerously'について、sandboxが完全ではなくNode.js環境へ到達され得ると警告しています。外部から取得したHTMLやuser inputではscript実行を無効のまま扱います。

出典:[2]

参考にした公式資料

  1. [1]jsdom/jsdom repository(2026-09-30)
  2. [2]jsdom README(2026-09-30)
  3. [3]jsdom 30.1.1 package metadata(2026-09-30)
  4. [4]jsdom v30.1.1 release(2026-09-30)
  5. [5]jsdom MIT license(2026-09-30)
編集部からの補足

browser全部を再現するのではなく、Node.js上でtestやscrapingに必要なWeb標準のsubsetを提供します。runScripts: 'dangerously'で未信頼HTMLのscriptを実行するとNode.js環境へ影響し得るため、外部入力では有効化しないのが基本です。

3ステップで試す

  1. 1

    jsdom 30.1.1を追加

    package metadataのNode.js要件を満たすprojectへversion固定で追加します。

    npm install jsdom@30.1.1
  2. 2

    JSDOMでHTMLをparse

    script実行を有効にせず、最小のDOMを作成します。

    const { JSDOM } = require("jsdom"); const dom = new JSDOM("<p>Hello world</p>");
  3. 3

    DOM APIで要素を取得

    Node.js上でdocumentと標準DOM APIが利用できることを確認します。

    console.log(dom.window.document.querySelector("p").textContent);
公式READMEで確認

成長

成長の推移 · 直近30日

21,695 Stars

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

Built with

カテゴリとタグ

GitHubデータ

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

GitHub Topics

  • dom-apis
  • html
  • javascript
  • jsdom
  • nodejs
Stars
21,695
Forks
1,809
Watchers
261
Open Issues
306
所有者種別
Organization
主要言語
JavaScript
ライセンス
MIT
リポジトリ最終更新
2026/09/22

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

情報の誤りを報告

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

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