技術とかの雑なToday I Learnedメモ

ブログカード/リンクカードをSSGで使うときどうすればいいのか 続き

ブログカード/リンクカードをSSGで使うときどうすればいいのか 続き

昨日書いた記事にnasaさんから反応をもらった。

このツイートのリプライで会話していたのだけど、

  • ビルドしてるところ(= このサイトならVercelのデプロイ?)で怒られなければ大丈夫かも
  • すべての記事内リンクでOGPを取得する必要はない(ブログカードを出すかどうかは書いてるときに都度判断する)
  • 差分ビルドができるのが一番よさそう

という話をした。

たしかに、ビルド時点で怒られなければいいというのはその通りだし、記事内リンクでもブログカードとして出したいときとそうでないときで出し分けられるのが良さそう。

出し分けに関しては、マークダウンのパースでうまいことやったり、mdxにしたりしないと難しいかもしれない。\[title\]\(url\)の形式ならブログカードにしないとか、そういう工夫が簡単にできたらいいんだけど。

差分ビルドについては、Next.jsでうまいことできないかな?と思って調べた。

過去に自分が書いたやつを読んだ。過去の自分に感謝。

Next.jsのSSGとISRとその他

fallback: 'blocking'とかfallback: trueを指定すれば、存在しないURLにアクセスしたときの挙動的に差分ビルドに近い形になりそう。

フォールバックしたタイミングでURLのパスからその日付のコンテンツを取得して、SSR or CSRの形でレンダリングされる、はず。もし未来の日付や存在しないURLだった場合はちゃんとエラーハンドリングして404を出す必要があるけど。

今は基本的に動的ルーティングの箇所はすべてfallback: falseにしているので、ここを変えたらいいんだけどまあそれだけの簡単な作業ではなさそう。

fallback: 'blocking'とかfallback: trueにするなら記事コンテンツ自体は別リポジトリや別サービスで管理する必要がありそう。

今は同リポジトリのマークダウンファイルで管理しているけど、新しいものを書いてpushするたびにビルドが走るので、結果やってることはSSGと何も変わらなくなる。

コンテンツが裏側で更新される場合に有効なフォールバックオプションなのに、コンテンツの更新とアプリケーションの更新がイコールになっているので、理想の挙動とはならなさそう。

アプリケーションのビルドとコンテンツの更新を完全に分離してしまって、アプリケーションコードをいじったときだけビルドするようにしなければいけないんだけど、その場合はmicroCMSみたいなCMSにコンテンツを置いたりしなければいけないので仕組みからいじらなければいけない。

どうしたものか。