Gatsbyのバージョンをv4からv5に上げた
2022-12-04
はじめに
久しぶりにブログを書いていたら、Gatsby の v5 が出ていることに気づいたのでアップデートしました。色々試行錯誤してやっとアップデートできたのでやったことを紹介していきます。といっても大体、公式サイトのマイグレーションガイドに沿っていけば動くはずです。ただ、自分の場合はもともとのバージョンが古すぎたのか変なところでエラーが出ていました…
npm
を使ってやって いますが、yarn でもいい感じに置き換えれば動きそうな気はしています。
アップデート作業をPRでやっているので結果だけを見たい方はそちらを見ると良いかもしれません。
ライブラリのアップデート
最初にとりあえずライブラリのアップデートをしました。npm outdated
して古いライブラリを以下のコマンドを使ってアップデートしました。
npm install アップデートしたいライブラリ名@latest --legacy-peer-deps
自分の場合は、npm
のバージョンが9.1.3
で7
以降だったため、--legacy-peer-deps
をつけました。このオプションは、npm4から6
の挙動にするオプションみたいです。理解があっているか怪しい…
query の修正
ライブラリをアップデートした段階で、gatsby develop
でビルドするとエラーが出てきたのですが、パーセントエンコードされており、かなり見づらかったです。gatsby build
すると見やすいエラー表示になりました。
エラー内容は、以 下のような内容でした。
GraphQL Document Validation This anonymous operation must be the only defined operation.
(省略)
Error: GraphQL Document Validation failed with 1 errors;
Error 0: This anonymous operation must be the only defined operation.
こちらのサイトを読んで解決しました。 query に対して明示的に名前をつけないといけないみたいです。
- query ($skip: Int!, $limit: Int!, $draft: [Boolean]!) {
+ query hoge($skip: Int!, $limit: Int!, $draft: [Boolean]!) {
}
fields の名前を変更
gatsby build
すると query の警告と修正案がコンソールに出ていたのでコピペして修正しました。
{
allMarkdownRemark(
- sort: { order: DESC, fields: [frontmatter___date] },
+ sort: { frontmatter: { date: DESC } },
)
Gatsby の公式サイトにも解説があります。
最後に
Gatsby のバージョンを v4 から v5 に上げました。GraphQL 周りの修正が全く分からず手こずりましたがなんとか修正できました。
アドベントカレンダーの記事を書いている時に何気なくバージョンを上げたらビルド自体通らなくなり焦りましたが、なんとか修正しきったので一安心です。GraphQL ももっと勉強せねばー。
参考サイト
- Migrating from v4 to v5
- バージョン上げたら GraphQL Document Validation failed が消えない
- What does npm install —legacy-peer-deps do exactly? When is it recommended / What’s a potential use case?
- The significance of the string immediately after query type (query / mutation) GraphQL
- GraphQL schema: Changes to sort and aggregation fields