1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

React で SSG して Vercel で gh-pages ブランチを配信する方法(Puppeteer の Error: Failed to launch chrome! というエラーに対応する)

Last updated at Posted at 2022-05-12

概要

FRAMEWORK PRESETOther に、BUILD COMMANDINSTALL COMMAND: (何もしないコマンド)にしてプロジェクトを作成し Production Branchgh-pages にする。

※Vercel 上で Puppeteer を動かす方法ではありません。

事の起こり

React で作成したアプリ(SPA)を Vercel で配信しようとしたところ、「Error: Failed to launch chrome!」というエラーが出てしまいました。どうやらサーバー側で yarn build を実行しようとしたところ、chrome が起動できなかったようです。

[05:24:30.478] $ react-snap ; cp -R assets/ dist/
[05:24:30.988] Error: Failed to launch chrome!
[05:24:30.988] [0427/202430.981852:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
[05:24:30.988] 
[05:24:30.988] 
[05:24:30.988] TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
[05:24:30.988] 
[05:24:30.989]     at onClose (/vercel/path0/node_modules/puppeteer/lib/Launcher.js:348:14)
[05:24:30.989]     at Interface.<anonymous> (/vercel/path0/node_modules/puppeteer/lib/Launcher.js:337:50)
[05:24:30.989]     at Interface.emit (events.js:412:35)
[05:24:30.989]     at Interface.close (readline.js:530:8)
[05:24:30.989]     at Socket.onend (readline.js:254:10)
[05:24:30.989]     at Socket.emit (events.js:412:35)
[05:24:30.989]     at endReadableNT (internal/streams/readable.js:1334:12)
[05:24:30.989]     at processTicksAndRejections (internal/process/task_queues.js:82:21)
[05:24:30.994] Done in 7.02s.
[05:24:31.007] Error: No Output Directory named "public" found after the Build completed. You can configure the Output Directory in your Project Settings. Learn More: https://vercel.link/missing-public-directory

これは、↓の記事に従って react-snap でサイト全体を SSG (Static Site Generation) して配信しようとしていたことが原因のようでした。react-snap では Puppeteer を使用しているようですが、その Puppeteer が chrome を起動しようとしているようです。

解決方法

解決方法は色々とあると思いますが、そもそもの話として、React というのは yarn build したファイルをサーバーで配信すれば済む話だったはずですので、今回はその方法を試したいと思います。

まず、 gh-pages パッケージを導入して github にビルド済みのファイルをアップロードします。dist/ ディレクトリにビルドしたファイルを配置する場合は以下のようなコマンドになります。

yarn add -D gh-pages
yarn build && yarn gh-pages -d dist/

そしたら Vercel で新しいプロジェクトを作成して、 FRAMEWORK PRESETOther に、BUILD COMMANDINSTALL COMMAND は何もしなくてよいので : に、OUTPUT DIRECTORY. にしておきます。

image.png

この状態で Deploy を押すと一旦 master (main) ブランチがデプロイされますが、index.html が無いので 404 となります。

Production Branch の変更

配信したいのは master (main) ブランチではなく gh-pages ブランチなので、 Project Settings → Git → Production Branch と移動して、 BRANCH NAMEgh-pages に変更します。

image.png

デプロイの実行

Vercel は github にブランチを push したタイミングでデプロイがトリガされるようなので、再度 gh-pages ブランチを push します。

yarn build && yarn gh-pages -d dist/

するとビルドが実行されてファイルが配信されます。Vercel を使用しているので、 / 以外の URL にアクセスしてもページが表示されるようになっているはずです。また、カスタムドメインを指定している場合は自動でそのドメインにも配信されるはずです。お疲れ様でした! 何か気になる点などありましたらコメントお願いします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?