---
title: "Puppeteerとは？Chrome自動操作Nodeライブラリの仕組みと使い方【2026年最新】"
url: "https://www.issoh.co.jp/tech/details/3844/"
published: 2024-10-15
updated: 2026-07-22
categories: ["自動化"]
publisher: "株式会社一創"
---

# Puppeteerとは？Chrome自動操作Nodeライブラリの仕組みと使い方【2026年最新】

Puppeteer（パペティア）は、ChromeやChromiumをDevToolsプロトコル経由でプログラムから操作する、Google（Chrome DevToolsチーム）製のNode.jsライブラリです。ページの読み込み・クリック・入力・スクリーンショット・PDF出力といったブラウザ操作をコードで再現でき、Webスクレイピングやエンドツーエンド（E2E）テストの自動化に使われます。この記事では、名前の意味と読み方、DevToolsプロトコルで動く仕組み、インストールと最小コード、SeleniumやPlaywrightとの使い分け、他言語での利用、そしてv20以降で大きく変わった仕様までを、公式ドキュメントの事実に沿って整理します。

## まとめ：この記事の要点

- Puppeteerは「Chrome/ChromiumをDevToolsプロトコルで操作するNode.jsライブラリ」。GoogleのChrome DevToolsチームが開発するオープンソース（Apache-2.0）。
- 読み方はパペティアで、原義は「人形遣い（傀儡師）」。ブラウザを人形のように操る、という名前。
- `npm i puppeteer` で本体と「Chrome for Testing」が自動ダウンロードされ、すぐ動く。ブラウザを同梱したくないなら `puppeteer-core` を使う。
- 用途はスクレイピング・E2Eテスト・PDF/スクショ生成・パフォーマンス計測。JavaScriptが生成する動的コンテンツも取得できる。
- クロスブラウザで選ぶなら[Playwright](https://www.issoh.co.jp/tech/details/3167/)、既存の言語・資産に合わせるなら[Selenium](https://www.issoh.co.jp/tech/details/4241/)が有利。ChromeのCDPを深く使うならPuppeteer。
- v20でChrome for Testing採用、v22で新ヘッドレスが既定、v23でWebDriver BiDi対応とFirefox正式サポート。`page.waitForTimeout()` はv22.0.0で削除された。

## Puppeteerとは何か：定義・読み方・仕組み

Puppeteerは、Chrome DevToolsプロトコル（CDP）を介してブラウザを制御する高レベルAPIを提供するNode.jsライブラリです。ブラウザを「ヘッドレス（画面非表示）」でも「ヘッドフル（画面表示）」でも動かせ、実際のブラウザエンジンでページを描画してから操作するため、JavaScriptで後から生成される要素も扱えます。ライセンスはApache-2.0で、商用利用を含めて無償で使えます。

### 読み方と名前の由来

「Puppeteer」の読み方はパペティア（英語の puppeteer ＝人形遣い、傀儡師）です。操作対象のブラウザを人形に見立て、それを糸で操る人形遣いになぞらえた命名です。検索では実験器具の「ピペッター（pipette）」と混同されやすいですが、両者は無関係です。

### DevToolsプロトコル（CDP）で動く仕組み

Chrome DevToolsプロトコルは、ChromeやChromiumが公開する制御用インターフェースで、DOM操作・ネットワーク傍受・コンソールログ取得・パフォーマンス計測などをプログラムから実行できます。PuppeteerはこのプロトコルにWebSocketで接続し、コマンドを送ってブラウザを操作します。ブラウザ拡張やHTTPリクエスト単体では届かない「実際にレンダリングされた後のページ」を扱えるのが、CDPを土台にするPuppeteerの核心です。なお後述のとおり、v23以降はChromeに対するCDPに加えて、標準仕様のWebDriver BiDiにも対応しています。

## Puppeteerでできること（主な用途）

Puppeteerの用途は、ブラウザ操作を伴う自動化に集約されます。代表的なものは次の4つです。

- **Webスクレイピング**：JavaScriptで生成される動的コンテンツを含め、レンダリング後のHTMLからデータを抽出する。単純なHTTP取得では取れないSPA（シングルページアプリ）のデータに強い。
- **E2Eテスト**：ログイン→操作→検証といった実ユーザーの流れを再現し、フロントとバックエンドが連携して動くかを確認する。MochaやJestなどのテストフレームワークと組み合わせる。
- **PDF・スクリーンショット生成**：請求書・レポートのPDF化や、UIの見た目を記録するビジュアルリグレッションテストに使う。
- **パフォーマンス計測**：ページ読み込み時間やリソース使用状況を収集し、ボトルネックを特定する。

逆に、静的なHTMLだけを取得すれば足りる用途では、ブラウザを起動しないHTTPクライアント（fetchやaxios）の方が速く軽いです。ブラウザを丸ごと立ち上げるコストに見合うのは、「JavaScript実行後の状態」や「実ユーザー操作の再現」が必要な場面に限られます。

## インストールと最小コード（使い方の第一歩）

Node.js（v18以上が目安。対応版は公式で確認）が入っていれば、インストールはコマンド1つです。

```
npm i puppeteer
```

このコマンドでライブラリ本体に加え、動作確認済みのブラウザ「Chrome for Testing」が自動ダウンロードされます（以前のChromiumから、v20でChrome for Testingに変わりました）。CI環境などでダウンロードを避けたい場合は、環境変数 `PUPPETEER_SKIP_DOWNLOAD` でスキップし、既存のChromeを `executablePath` で指定します。次は、ページを開いてスクリーンショットを撮る最小例です。

```
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();          // 既定でヘッドレス起動
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'example.png' });
  await browser.close();
})();
```

ESM（`import puppeteer from 'puppeteer'`）でも同様に書けます。要素の操作は `page.click()`・`page.type()`・`page.select()`、動的な要素の待機は `page.waitForSelector()` を使うのが基本です。

### puppeteerとpuppeteer-coreの違い

パッケージは2種類あります。ブラウザを同梱してすぐ動かしたいなら `puppeteer`、ブラウザは自前で用意し軽く保ちたいなら `puppeteer-core` を選びます。

| 項目     | puppeteer                   | puppeteer-core      |
| ------ | --------------------------- | ------------------- |
| ブラウザ同梱 | あり（Chrome for Testingを自動DL） | なし（自分で用意）           |
| すぐ動くか  | インストール後すぐ                   | executablePath指定が必要 |
| 主な用途   | ローカル開発・学習・一般的な自動化           | Docker/サーバーレス等の軽量構成 |

### ヘッドレスモードの指定方法

起動モードは `launch()` の `headless` オプションで切り替えます。v22以降は「新ヘッドレス」が既定で、通常のChromeと同じコードパスで動くため挙動のズレが減りました。

```
await puppeteer.launch({ headless: true });     // 新ヘッドレス（v22以降の既定）
await puppeteer.launch({ headless: 'shell' });   // 旧chrome-headless-shell（軽量・機能限定）
await puppeteer.launch({ headless: false });     // 画面表示あり（デバッグ向き）
```

スクレイピングやCIのバッチ処理はヘッドレス、UIの挙動を目視で追いたいデバッグ時は `headless: false`、という使い分けが基本です。

## Playwright・Seleniumとの違いと選び方

ブラウザ自動化ツールは複数あり、Puppeteerが常に最適とは限りません。判断基準は「対応ブラウザの広さ」「使う言語」「Chrome依存の深さ」の3点です。

| 観点       | Puppeteer             | Playwright              | Selenium          |
| -------- | --------------------- | ----------------------- | ----------------- |
| 開発元      | Google                | Microsoft               | OSSコミュニティ         |
| 主な対応ブラウザ | Chrome/Firefox        | Chromium/Firefox/WebKit | 主要ブラウザ全般          |
| 対応言語     | JavaScript/TypeScript | JS/Python/Java/.NET     | 多言語（Java/Python他） |
| 強み       | ChromeのCDPに密着         | クロスブラウザと自動待機            | 実績と広い言語・環境対応      |

結論としては、Safari（WebKit）を含むクロスブラウザ検証や自動待機の手厚さを重視するなら[Playwright](https://www.issoh.co.jp/tech/details/3167/)が有利で、新規のE2Eテストでは第一候補になります。既存資産がJava/Pythonにあり、多環境で動かす必要があるなら[Selenium](https://www.issoh.co.jp/tech/details/4241/)。ChromeのDevToolsプロトコルを深く使う（詳細なネットワーク傍受やパフォーマンストレースなど）用途、あるいはNode.js中心の小回りの利く自動化ならPuppeteerが噛み合います。ブラウザ自動化全体の位置づけは[Browser Automationの解説](https://www.issoh.co.jp/tech/details/9129/)も参考になります。

## PythonやRubyなど他言語での利用

Puppeteer本体はNode.js専用です。他言語では非公式の移植版が存在しますが、扱いには注意が必要です。

- **Python**：非公式移植の「pyppeteer」がありますが、更新が停滞しており最新のChromeで不具合が出やすい状況です。PythonでPuppeteer相当のことをするなら、同じChromiumベースで公式にPython対応するPlaywright for Pythonを検討する方が現実的です。
- **Ruby**：「puppeteer-ruby」という非公式Gemがあり、PuppeteerのAPIをRubyから呼び出せます。ただし公式サポートではないため、本番運用では追随状況を確認してから採用してください。

いずれの移植版も「公式ではない」点が共通のリスクです。長期運用や重要なテスト基盤では、Node.jsでの公式Puppeteer、または各言語で公式サポートのある他ツールを優先するのが安全です。

## 最新版で押さえておく変更点（v20〜v25）

Puppeteerはバージョンで既定挙動が変わっています。古い記事のコードをそのまま使うと動かないことがあるため、次の点を押さえておきます（記事作成時点の最新はv25系。正確な最新版は公式で確認してください）。

| バージョン | 主な変更                                   |
| ----- | -------------------------------------- |
| v20   | 同梱ブラウザがChromiumからChrome for Testingへ   |
| v22   | 新ヘッドレスが既定に（旧ヘッドレスは`'shell'`指定）         |
| v23   | WebDriver BiDiが実用段階に。Firefox安定版を正式サポート |

v24・v25では既定挙動を壊す大きな変更はなく、細かな改善とブラウザ追随が中心です。むしろ古い記事で注意したいのが `page.waitForTimeout()` で、これはv22.0.0で削除されました（現行では呼ぶとエラーになります）。固定時間の待機はテストを不安定にするため、条件が満たされるまで待つ `page.waitForSelector()` や、自動待機を備えたLocator API（`page.locator()`）への置き換えが推奨されます。どうしても固定待機が必要な場合は `new Promise(r => setTimeout(r, 1000))` で代替します。また、Chromeを操作するときの既定プロトコルはCDPのままですが、Firefoxを起動するとWebDriver BiDiが既定で使われる点も覚えておくと、ブラウザ差の挙動を理解しやすくなります。

## よくある質問（FAQ）

### Puppeteerの読み方は？

パペティアです。英語の puppeteer（人形遣い・傀儡師）が語源で、ブラウザを操る様子をなぞらえた名前です。実験器具の「ピペッター」とは無関係です。

### PuppeteerはPythonで使えますか？

本体はNode.js専用です。Python向けには非公式のpyppeteerがありますが更新が停滞しているため、PythonではPlaywright for Pythonなど公式対応のツールを選ぶ方が安定します。

### PuppeteerとSeleniumの違いは？

PuppeteerはChromeのDevToolsプロトコルに密着したNode.jsライブラリで、Chrome/Firefoxが対象です。Seleniumは多言語・多ブラウザに対応し実績が豊富で、既存資産や幅広い環境対応を重視する場合に向きます。

### Puppeteerは無料で使えますか？

はい。ライセンスはApache-2.0のオープンソースで、商用利用を含めて無償で利用できます。

### インストールするとChromiumがダウンロードされますか？

`puppeteer`を入れると、現在はChromiumではなく「Chrome for Testing」が自動ダウンロードされます。ダウンロードを避けたい場合は`puppeteer-core`を使うか、環境変数でスキップして既存のChromeを指定します。

## 関連記事

- [Playwrightとは｜仕組み・できること・Seleniumとの違いを解説](https://www.issoh.co.jp/tech/details/3167/)
- [Seleniumを活用したWebアプリケーションテストの実施方法](https://www.issoh.co.jp/tech/details/4241/)
- [Browser Automationとは何か？Webブラウザ操作を自動化する技術の概要を詳しく解説](https://www.issoh.co.jp/tech/details/9129/)

---

出典: [Puppeteerとは？Chrome自動操作Nodeライブラリの仕組みと使い方【2026年最新】](<https://www.issoh.co.jp/tech/details/3844/>)（株式会社一創）
