ブログカード/リンクカードをSSGで使うときどうすればいいのか 続き
昨日書いた記事にnasaさんから反応をもらった。
何も考えないで実装したわ | ブログカード/リンクカードをSSGで使うときどうすればいいのか https://t.co/ujOnJ754QD
— nasa9084@某某某某(0x1d) (@nasa9084) May 19, 2022
このツイートのリプライで会話していたのだけど、
- ビルドしてるところ(= このサイトならVercelのデプロイ?)で怒られなければ大丈夫かも
- すべての記事内リンクでOGPを取得する必要はない(ブログカードを出すかどうかは書いてるときに都度判断する)
- 差分ビルドができるのが一番よさそう
という話をした。
たしかに、ビルド時点で怒られなければいいというのはその通りだし、記事内リンクでもブログカードとして出したいときとそうでないときで出し分けられるのが良さそう。
出し分けに関しては、マークダウンのパースでうまいことやったり、mdxにしたりしないと難しいかもしれない。\[title\]\(url\)
の形式ならブログカードにしないとか、そういう工夫が簡単にできたらいいんだけど。
差分ビルドについては、Next.jsでうまいことできないかな?と思って調べた。
過去に自分が書いたやつを読んだ。過去の自分に感謝。
fallback: 'blocking'
とかfallback: true
を指定すれば、存在しないURLにアクセスしたときの挙動的に差分ビルドに近い形になりそう。
フォールバックしたタイミングでURLのパスからその日付のコンテンツを取得して、SSR or CSRの形でレンダリングされる、はず。もし未来の日付や存在しないURLだった場合はちゃんとエラーハンドリングして404を出す必要があるけど。
今は基本的に動的ルーティングの箇所はすべてfallback: false
にしているので、ここを変えたらいいんだけどまあそれだけの簡単な作業ではなさそう。
同じリポジトリのマークダウンファイルで記事管理しているからpushするたびにビルド走っちゃうけど、記事だけ別で管理すれば毎日ビルドする必要ないし、そうすればfallback: ‘blocking’か’true’で新しい日付のURLにアクセスしたときにSSR or CSRするから実質差分ビルドみたいな感じになるかな
— tagucch (@tagucch) May 19, 2022
fallback: 'blocking'
とかfallback: true
にするなら記事コンテンツ自体は別リポジトリや別サービスで管理する必要がありそう。
今は同リポジトリのマークダウンファイルで管理しているけど、新しいものを書いてpushするたびにビルドが走るので、結果やってることはSSGと何も変わらなくなる。
コンテンツが裏側で更新される場合に有効なフォールバックオプションなのに、コンテンツの更新とアプリケーションの更新がイコールになっているので、理想の挙動とはならなさそう。
アプリケーションのビルドとコンテンツの更新を完全に分離してしまって、アプリケーションコードをいじったときだけビルドするようにしなければいけないんだけど、その場合はmicroCMSみたいなCMSにコンテンツを置いたりしなければいけないので仕組みからいじらなければいけない。
どうしたものか。