🏌️‍♂️

そろそろ Cloudflare Pages で Gatsby v5 を使おう

2023/07/17に公開

現在(2023/07/17)、 Gatsby の最新のバージョンは 5 です。

https://www.gatsbyjs.com/gatsby-5/

これまでは Gatsby を Cloudflare Pages でホスティング(ビルド)しようとすると、 Gatsby は v4 までしか使えない状況でした。
その理由は Cloudflare Pages の Node.js の Supported versions が 17 までだったため、 Node.js 18 が required な Gatsby v5 はビルドが出来ません。

https://zenn.dev/meihei/articles/0bdcc739c45244

しかし、 2023/05/17 にようやく v2 build system が公開されました!

https://github.com/cloudflare/pages-build-image/discussions/1#discussioncomment-5927573

まだ v1 (これまでのビルドシステム)の完全互換ではないようですが、何と Node.js 18 がデフォルトバージョンとして使用することが出来ます!

Language Default version Supported versions Environment variable File
Node.js 18.16.1 Any version NODE_VERSION .nvmrc, .node-version

https://developers.cloudflare.com/pages/platform/language-support-and-tools/

バージョンアップ

Node.js を v18 へ

ここはえいやで上げていいと思います。

.nvmrc
-17.9.1
+18.16.1

Gatsby を v5 へ

Migrating from v4 to v5 の breaking changes を読んでみます。

https://www.gatsbyjs.com/docs/reference/release-notes/migrating-from-v4-to-v5/#handling-breaking-changes

Minimal Node.js version 18.0.0Minimal required React version is 18がポイントですが、それ以外でも修正が必要な箇所は直します。

package.json
{
  "dependencies": {
-    "gatsby": "^4.0.0"
+    "gatsby": "^5.0.0"
  }
}
package.json
{
  "dependencies": {
    "react": "^18.0.0",
    "react-dom": "^18.0.0"
  }
}

依存ライブラリのアップデート

gatsby-*のバージョンも最新に上げていきます。

package.json
{
  "dependencies": {
-    "gatsby-plugin-sitemap": "^5.24.0",
-    "gatsby-plugin-styled-components": "^5.24.0"
+    "gatsby-plugin-sitemap": "^6.11.0",
+    "gatsby-plugin-styled-components": "^6.11.0"
  }
}

ビルド設定

Cloudflare dashboardに入り、 Workers & Pages > in Overview から、対象の Pages プロジェクトを開きます。
次に Settings > Build & deployments を開きます。

Configure (Production|Preview) build system をクリックして、 Version: 2 (latest) を選択し、保存します。

一応 Production, Preview を個別に選択出来ます。

ビルド時の注意点

Gatsby の preset を使って Build command を実行するとgatsby buildになります。

しかし、このまま使うと v2 ではビルドが失敗します。

17:02:22.356	Executing user command: gatsby build
17:02:22.364	/bin/sh: 1: gatsby: not found
17:02:22.365	Failed: Error while executing user command. Exited with error code: 127
17:02:22.375	Failed: build command exited with code: 1
17:02:23.318	Failed: error occurred while running build command

gatsby のコマンドが見つからないようです。
これは、 build image v1 の場合node_modules/.binPATHに自動的に追加されるようですが、 build image v2 の場合は追加されていないようです。なので、node_modules/.binのコマンドを実行するようなnpm run ~~でビルドします。

package.json
{
  "scripts": {
    "build": "gatsby build"
  }
}

上記のように package.json を記載して、npm run buildをしてビルドを行います。

https://community.cloudflare.com/t/cloudflare-pages-gatsby-not-found/532067

終わりに

まだまだcloudflare pages gatsby 5で検索すると「動かない!」「バージョンに注意」が沢山出ている状況ですが、使える状況になったので、使いましょう。

無視され続きた dependabot の Bump gatsby の PR がようやくマージされました(実際はしておらず手動でバージョンアップしたが)。最新バージョンに合わせられると dependabot が機能し始めるので嬉しいですね。

参考

Discussion