2023-08-22

Next.jsのApp RouterでSSGしてブログを作る その1

脱 Gatsby.js すべく Next.js のドキュメントを読みながら SSG でブログを再構築しようとしている
個人的な感想だけど、Gatsby.js よりもとっつきやすい気がするのと、公式のドキュメントが大変わかりやすいので割とスムーズに移行作業が進んでいる

今回は Next.js の App Router で SSG する際に色々調べたので、要点だけ簡単にメモしておこうと思う

SSG モードを有効にする

これをしないと始まらない

module.exports = {
  // https://nextjs.org/docs/app/building-your-application/deploying/static-exports
  output: 'export',
}

これで npm run build でルートディレクトリの out というフォルダに静的なファイルが出力されるようになる

記事一覧ページにおける記事データの取得

ここが一番よくわからなかった部分だったけど、旧 Pages Router のドキュメントと見比べるとこうなるっぽい

記事の個別ページ

このブログは hakozaru.com/posts/:slug というパスで作られているので、App Router でのディレクトリ構成は app/posts/[slug]/page.tsx となる

最初 [slug] というディレクトリ名が信じられなくてホンマか???となったけど、Pages Router 時代から普通に使われてた
https://nextjs.org/docs/pages/building-your-application/routing/dynamic-routes#example

記事の個別ページはどうやって用意するのかというと、これも旧 Pages Router と比較すると以下のようになるっぽい

  • Pages Router
    • ↑ の記事一覧ページのやり方と同じく、 getStaticProps を使えばよい
  • App Router

Sass を使う

こちらに書いてあるが、デフォルトで使えるようになっている
旧ブログの資産をまんま流用したいので使っている(本当は Tailwindcss に移行したいけどネ-)

module.exports = {
  output: 'export',
  sassOptions: {
    includePaths: [path.join(__dirname, 'css')],
    prependData: '@import "css/global.scss";',
  },
}

includePaths で sass/scss が入っているディレクトリを指定して、必要に応じて prependData で global.css や reset.css などを指定してやればよい

ひとまずこのあたりがわかれば簡単にブログ構築できると思うので、これを見ているあなたもぜひ!