2026年7月27日

2026年7月27日

VPSにchromeheadlessをインストールする方法

はじめに

ChromeにはGUIなしで起動できる「Headlessモード」があり、PDF生成・スクリーンショット取得・E2Eテスト・スクレイピングなどに広く使われます。Node.jsから扱うPuppeteerやPlaywrightと組み合わせれば、複雑なJavaScriptを実行する現代のWebサイトにも対応できます。

本記事ではUbuntu 22.04を例に、Google Chrome安定版(または Chrome for Testing)の導入、依存ライブラリ・日本語フォント・サンドボックス設定、Puppeteerでの動作確認までを実例で解説します。

VPSでは共有メモリ(/dev/shm)容量が小さい問題やUbuntu/Debianの sandbox 設定がしばしばつまずきポイントです。

症状・背景

  • Puppeteerが「Failed to launch the browser process」で起動しない
  • Chrome実行時に共有メモリ不足のエラーが頻発する
  • ヘッドレスでスクリーンショットを取りたいが日本語が豆腐になる
  • Dockerなしでも動かしたい

手順・設定方法

ステップ1: Google Chrome(安定版)をインストール

# 公式リポジトリのGPG鍵を追加
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt update
sudo apt install -y google-chrome-stable
# バージョン確認
google-chrome --version

ステップ2: 依存ライブラリと日本語フォント

# Chromiumが要求するライブラリを揃える
sudo apt install -y \
  libnss3 libxss1 libasound2 libatk1.0-0 libatk-bridge2.0-0 \
  libcups2 libdrm2 libgbm1 libgtk-3-0 libxshmfence1 libxkbcommon0
# 日本語フォント
sudo apt install -y fonts-noto-cjk fonts-noto-color-emoji
sudo fc-cache -fv
# /dev/shm 不足対策(一時的に拡張)
sudo mount -o remount,size=1G /dev/shm

ステップ3: コマンドラインでスクリーンショットを取得

# サンドボックス無効・ヘッドレスで起動してスクショ保存
google-chrome \
  --headless=new \
  --no-sandbox \
  --disable-gpu \
  --hide-scrollbars \
  --window-size=1280,800 \
  --screenshot=/tmp/example.png \
  https://example.com
# PDFを生成
google-chrome --headless=new --no-sandbox \
  --print-to-pdf=/tmp/example.pdf https://example.com
ls -lh /tmp/example.*

ステップ4: Puppeteerでの動作確認

# Node.js LTS 導入
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# プロジェクト作成
mkdir ~/scraper && cd ~/scraper && npm init -y
npm install puppeteer-core
# Puppeteerからシステムインストール済Chromeを使うサンプル
cat > capture.js <<'EOF'
const puppeteer = require('puppeteer-core');
(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/usr/bin/google-chrome',
    args: ['--no-sandbox', '--disable-dev-shm-usage'],
    headless: 'new'
  });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'shot.png' });
  await browser.close();
})();
EOF
node capture.js && ls -lh shot.png

注意事項

  • --no-sandbox を使うのは信頼できるサイトのみ。一般用途ではユーザー名前空間を有効にして sandbox を維持
  • --disable-dev-shm-usage を付けると /dev/shm を使わずディスクに書くため共有メモリ不足を回避
  • puppeteer パッケージは独自Chromiumをダウンロードする。VPSの帯域・容量を節約するなら puppeteer-core + システムChrome
  • Chromeをルートで実行する必要がある場合のみ --no-sandbox、それ以外は専用の非rootユーザーで動かす

まとめ

1. google-chrome-stableを公式リポジトリから導入

2. 依存ライブラリ + 日本語フォントを忘れずに揃える

3. --disable-dev-shm-usageで共有メモリ不足を回避

4. Puppeteer-coreでシステムChromeを使い容量節約

5. 専用ユーザー実行でsandboxセキュリティを維持

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ