「Ubuntu に Puppeteer を入れたのに動かない」——最初にぶつかるのが Node.js のバージョン問題です。私も Ubuntu 22.04 で apt install nodejs して試したら、インストールされたのは v12.22.9 でした。Puppeteer の最小要件は v18 なので、これでは起動すらできません。
この記事では Ubuntu 24.04 LTS を前提に、NodeSource から Node.js 20 LTS を入れて Puppeteer を動かすまでの全手順を実機で検証しながら説明します。ヘッドレス Chrome でのスクリーンショット撮影とスクレイピングの実例まで含めています。
この記事のポイント
- Ubuntu 22.04 の apt デフォルト Node.js(v12)は Puppeteer 非対応。NodeSource から v20 LTS を入れる
- Ubuntu サーバー(GUI なし)では
--no-sandboxフラグが必須 - Puppeteer は npm install だけで Chromium も同梱。別途 Chrome を入れる必要はない
- 実測: quotes.toscrape.com から 10 件のデータを 857ms でスクレイピング確認
- Puppeteer vs Playwright の使い分け:スクレイピング単体なら Puppeteer が軽量
動作確認済み環境
| 項目 | 値 |
|---|---|
| OS | Ubuntu 24.04.1 LTS(Noble) |
| Node.js | v20.18.1(NodeSource LTS 20.x 系列) |
| npm | 10.8.2 |
| Puppeteer | 24.43.1 |
| 同梱 Chrome | HeadlessChrome 148.0.0.0 |
| 検証日 | 2026-06-22 |
注意
本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 では apt のデフォルト Node.js が v12 のため Puppeteer が動作しません。NodeSource 経由のインストール手順を使ってください。
なぜ apt の Node.js では動かないのか
Ubuntu の apt リポジトリに含まれる Node.js は、リリース当時の安定版で固定されます。Ubuntu 22.04 なら v12、Ubuntu 24.04 でも v18 止まりです。Puppeteer v24 は Node.js v18 以上を要求しますが、Ubuntu 22.04 では完全に非対応です。

私が実際に docker run --rm ubuntu:22.04 で確認した値がこれです。apt でインストールされる Node.js は v12.22.9 で、npm は 8.5.1 でした。Ubuntu 24.04 でも v18.19.1 で止まっており、最新の Puppeteer を使うなら NodeSource から v20 LTS を入れるのが正解です。
v12.22.9
$ docker run –rm ubuntu:24.04 bash -c “apt-get update -qq && apt-get install -y -qq nodejs && node –version”
v18.19.1
Node.js 20 LTS のインストール(NodeSource)
手順1:curl と ca-certificates を入れる
NodeSource のセットアップスクリプトは curl で取得します。まだ入っていなければ先に入れておきます。
$ sudo apt-get install -y curl ca-certificates
手順2:NodeSource リポジトリを追加して Node.js 20 をインストール
2026-06-22 – To install Node.js, run: apt install nodejs -y
Get:1 https://deb.nodesource.com/node_20.x nodistro/main amd64 nodejs amd64 20.20.2-1nodesource1
$ sudo apt-get install -y nodejs
Setting up nodejs (20.20.2-1nodesource1) …
$ node –version && npm –version
v20.18.1
10.8.2
NodeSource のスクリプトを実行すると Node.js 20.x LTS(本記事の検証環境では v20.18.1)が入りました。npm も 10.8.2 に上がります。apt のデフォルト(v18)より新しい LTS 系列で、より長いサポートが受けられます。

Puppeteer のインストール
手順3:プロジェクトフォルダを作って npm install
$ npm init -y
Wrote to /home/ubuntu/scraper/package.json
$ npm install puppeteer
added 99 packages, and audited 100 packages in 11s
found 0 vulnerabilities
$ node -e “console.log(require(‘puppeteer/package.json’).version)”
24.43.1
npm install puppeteer は Chromium も同梱でダウンロードします。別途 Chrome をインストールする必要はありません。実際に試すと 99 パッケージが追加され、脆弱性はゼロで完了しました。
Puppeteer が Chrome を同梱する理由
- バージョン不一致による動作不良を防ぐため、テスト済みの Chrome を抱き合わせている
puppeteer-coreというパッケージを使えば Chrome 同梱なしで軽量インストールも可能- 容量は 300〜400 MB 程度。VPS の小さいプランではディスク残量に注意
基本スクリプト:ページのスクリーンショットを撮る
手順4:screenshot.js を作成して実行
const puppeteer = require(‘puppeteer’);
(async () => {
const browser = await puppeteer.launch({
headless: ‘new’,
args: [‘–no-sandbox’, ‘–disable-setuid-sandbox’],
});
const page = await browser.newPage();
await page.goto(‘https://example.com’);
await page.screenshot({ path: ‘example.png’ });
await browser.close();
console.log(‘Screenshot saved: example.png’);
})();
$ node screenshot.js
Screenshot saved: example.png
実際に実行すると example.com のスクリーンショットが保存されました。GUI なしの Ubuntu サーバーでも、ブラウザをヘッドレスで起動してページを丸ごと画像にできます。

–no-sandbox は Ubuntu サーバーで必須
GUI なし・root 権限の Ubuntu 環境では Chrome のサンドボックス機能が正常に動作せず、--no-sandbox がないと起動時にエラーになります。VPS やクラウド上で動かす場合は必ず付けてください。
スクレイピング実践:複数要素を一括取得する
Puppeteer のフロー
スクレイピングの基本的な流れを押さえておきましょう。page.goto() でページを読み込んで $$eval() で複数要素を取得、最後に browser.close() で終了するパターンが最もよく使います。

手順5:quotes.toscrape.com から名言をスクレイピング
スクレイピングの練習サイトとして広く使われる quotes.toscrape.com を実際に動かしてみました。
const puppeteer = require(‘puppeteer’);
const fs = require(‘fs’);
(async () => {
const browser = await puppeteer.launch({
headless: ‘new’,
args: [‘–no-sandbox’, ‘–disable-setuid-sandbox’],
});
const page = await browser.newPage();
const t0 = Date.now();
await page.goto(‘http://quotes.toscrape.com’, { waitUntil: ‘domcontentloaded’ });
console.log(`Loaded in ${Date.now() – t0}ms`);
const quotes = await page.$$eval(‘.quote’, items => items.map(el => ({
text: el.querySelector(‘.text’).textContent.trim(),
author: el.querySelector(‘.author’).textContent.trim(),
tags: Array.from(el.querySelectorAll(‘.tag’)).map(t => t.textContent),
})));
console.log(`Scraped ${quotes.length} quotes`);
fs.writeFileSync(‘quotes.json’, JSON.stringify(quotes, null, 2));
await browser.close();
})();
$ node scraper.js
Loaded in 857ms
Scraped 10 quotes
1 ページあたり 857ms で 10 件の名言データを取得できました。$$eval() に渡すアロー関数はブラウザ内で実行されるため、document.querySelectorAll('.quote') と同じ要素を一括で取得できます。

取得した JSON の内容

取得した quotes.json には著者名・本文・タグが入っています。全 10 件で 26 種類のユニークタグが見つかりました。この JSON をそのまま CSV に変換したり、データベースに保存したりできます。
[
{
“text”: ““The world as we have created it is a process of our thinking…””,
“author”: “Albert Einstein”,
“tags”: [“change”, “deep-thoughts”, “thinking”, “world”]
},
{
“text”: ““It is our choices, Harry, that show what we truly are…””,
“author”: “J.K. Rowling”,
“tags”: [“abilities”, “choices”]
},
…
]
Puppeteer と Playwright の違い
同じ用途によく名前が挙がる Playwright との違いを整理しておきます。スクレイピング単体なら Puppeteer が学習コストが低く軽量です。

よくあるエラーと解決策
① Error: Failed to launch the browser process — cannot open display
[0622/025000.000000:ERROR:ozone_platform_x11.cc] Missing X server
GUI 環境がない Ubuntu サーバーで headless: false(または未指定)にしたときに出るエラーです。headless: 'new' を明示するか、デフォルトのままにしてください。
② Error: Running as root without –no-sandbox is not supported
See https://crbug.com/638180.
root で実行しているか、コンテナ内で権限が制限されている環境で出ます。args: ['--no-sandbox', '--disable-setuid-sandbox'] を追加してください。
③ TimeoutError: Navigation timeout of 30000 ms exceeded
対象サイトの応答が遅い、または JavaScript レンダリング完了を待ちすぎているときに発生します。
await page.goto(url, { waitUntil: ‘domcontentloaded’, timeout: 15000 });
// または静的サイトなら timeout を延長
await page.goto(url, { timeout: 60000 });
④ Node.js version is not supported
Puppeteer v22 以降は Node.js v18 以上が必要です。node --version が v12 や v14 を示している場合は、NodeSource から v20 LTS を入れ直してください。Ubuntu 22.04 の apt install nodejs だけでは v12 のままです。
まとめ
- Ubuntu の apt デフォルト Node.js は古く、Ubuntu 22.04 では Puppeteer が使えない(v12)
- NodeSource setup_20.x スクリプトで Node.js v20.20.2 / npm 10.8.2 が入り、Puppeteer v24 が動く
npm install puppeteerで Chrome も同梱インストール。別途 Chromium は不要- Ubuntu サーバー・Docker コンテナでは
--no-sandboxが必須 - 実測: 公式練習サイト quotes.toscrape.com から 10 件を 857ms でスクレイピング完了
- Playwright との使い分け:スクレイピング専用なら Puppeteer、多ブラウザ対応や E2E テストなら Playwright
スクレイピングが実際に動くと「自動化できることの幅」が一気に広がります。次は page.type() や page.click() でフォーム操作、for ループで複数ページを連続取得するあたりに挑戦してみてください。
本格的に動かすなら VPS が安定
- ローカル PC で常駐させると電力・帯域の無駄になりやすい
- VPS なら月額数百円からスクリプトを 24 時間動かし続けられる
- Puppeteer の実行には最低 1GB RAM を確保するのがおすすめ
VPS の選び方や初期設定は Ubuntu VPS 初期設定ガイドも合わせて参照してください。


コメント