SPAがいいねと君が言ったから7月6日はGatsby記念日。ざっと3日くらいおうちで頑張って移行したぞ!
スタックはこう。
Hugoが嫌いになったわけではないです。
開発も盛んで気がつけばバージョンが倍くらい上がってたりするような活発さで、ちょっとついていけなかったりしたけどとてもお世話になったプロダクトだった。
だけど、ちょっと静的サイトジェネレータ自体の運用に疲れてしまった・・・。
Markdownをファイル生成して書いて〜コミットして〜みたいなのってすごく楽なんだけど、なんか日付とかカテゴリをファイル内で管理するのが辛くなってきたのが正直なところ。
なんかこう、JSONを手でいじってるときと似た辛さ。
思えばいろいろと辛い場面はあった気がする。
まあでもGatsbyJSも静的サイトジェネレータではあるんけど、融通の利きやすさ(Contentfulとかコンテンツソースが選び放題)という意味で以下の辛さがだいたい解決できるのでは?と思ってる。
どれも頑張ればなんとかできることだし、実際なんとかしてる人も多いと思うけど、ちょっと個人的に限界が来てしまった。
もうバックエンドは手元で管理するのをやめて、Contentfulに載せることにした。
Conntentfulは知ったときから気になってたHeadless CMSというたぐいのサービスで、まあデータ構造とデータ自体の管理だけやってあとはAPI(GraphQL)で配信してあげるよって感じのもの。
これ絶対有用だしこれからの時代でバリバリ使う場面あるっしょと思ってたんだけど、なんだかんだその場面が見いだせずにここまで来てしまった。出遅れた。
これがこれまでより楽になるかはもうちょっと運営しないとわからないけど、まあ物は試しで。
まずこれを読む。
GatsbyJS and Contentful in five minutes
package.json
を見るとyarn dev
で動きそうなので叩いてみるけど、こんな感じでエラーしたので、
error We encountered an error while trying to load your site's gatsby-config. Please fix the error and try again.
TypeError: Cannot destructure property `spaceId` of 'undefined' or 'null'.
gatsby-config.js
を見ながらこんな修正をしてみる。
1~/Develop/repositories/src/github.com/dim0627/blog.unresolved.xyz (*master) $ git diff 2diff --git a/gatsby-config.js b/gatsby-config.js 3index 6f41f16..994f447 100644 4--- a/gatsby-config.js 5+++ b/gatsby-config.js 6@@ -1,7 +1,7 @@ 7 let contentfulConfig 8 9 try { 10- contentfulConfig = require('./.contentful') 11+ contentfulConfig = require('./.contentful')[process.env.NODE_ENV] 12 } catch (_) { 13 contentfulConfig = { 14 spaceId: process.env.CONTENTFUL_SPACE_ID,
これで通るようになるんだけど、実際にContentfulに設定されている構造とサンプルのGraphQLのリクエストがミスマッチを起こしてエラーするので、その変を適宜調整。
GraphQLは初めてで全然わかんなかったけど、読めばなんとなくわかるのですごい。
Next.jsと同様、examplesがたくさん用意されているので疎通だけならほとんど詰まることはなかった。
gatsby/examples at master · gatsbyjs/gatsby
こういうのほんとたすかる。
とはいえReact自体の知識がなさすぎるのとGatsbyJSの土地勘がないので、細かい部分までやろうとすると結構詰まった場面は多かった。
いらないファイル消したりstyled-componentsに置き換えたり地道な作業もあったし。
Hugo使ってるときはコンテンツの管理とブログ自体のソースを一緒くたにしてたんだけど、今回はGitHub上にブログのソース、コンテンツはContentfulって感じで切り分けることができた。
なのでmaster pushをするとNetlifyがうけとってリビルドしてくれるんだけど、Contentful側でコンテンツをかえた場合はリビルドされないので、ContentfulのWebHookとNetlifyのWebHookをつなげてあげれば自動デプロイの環境が簡単につくれる。