【Nuxt.js】サーバーサイドレンダリングの仕組みと、動的なルーティングの追加
  • 2019.10.16に公開
  • 2020.04.10に更新
  • 小ネタ集
  • 2. Nuxt.js

この記事では

この記事では、サーバーサイドレンダリングの仕組みを説明しています。

また、動的なルーティングの追加方法についても触れています。

まず結論をいうと、

結論を先に言うと、Nuxt.jsではルーティングの設定に沿ってサーバーサイドレンダリングを実行します。

まずはそのルーティングから理解していきましょう。

ルーティングとは?

ルーティングとは、「このURLはこのファイルを表示してね」と指定しているプロパティのことです。

もう少し詳しく説明すると、

  • URL
  • 表示するファイルの名前
  • ルートの名前

がひとまとめになった情報のことです。

Nuxt.jsのrouter.js

2019-10-16 13-43-06

ルーティングが作られるとき

え?上の画像のようなコード書いた覚えないよ。疑問に思われたかも知れません。

それもそのはず。

Nuxt.jsでは、pagesディレクトリの下に作成されたVueファイルに対して、自動的にルーティングを生成しています。

便利ですね。

わざわざ書かなくても、ファイル名やディレクトリ名から勝手にルーティングを作ってくれます。

サーバーサイドレンダリングとは?

サーバーサイドレンダリングとは、サーバー側でHTMLファイルを生成することです。

Nuxt.jsでは、generateコマンドが実行されると、上画像のルーティンを読み込んで本番環境のサーバーにHTMLファイルを出力します。

サーバーにHTMLファイルがあると、何が嬉しいかって?

クローラーが循環するときに、このHTMLファイルを読み込んでくれます。

また、SNSで記事共有するときにメタ情報を読み込んで、アイキャッチ画像や記事のタイトル欄を自動生成してくれます。

つまり、SEO対策ができるのです。ブログサイトには必須ですね。

一つ問題が。。。

ただ、一つだけ問題があります。

HTMLファイルを出力するとき、Nuxt.jsは 動的なルーティングを無視するのです!

動的なルーティングとは?

デモサイトのカテゴリーページは、_slug.vueという一つのファイルで、全てのカテゴリーを表示しています。

カテゴリーページ

2019-10-13 15-56-55

ファイルは同じでも、「URLが変化することで、カテゴリー名や関連づく記事の表示が変わる」このようなページのルーティングのことを、動的なルーティング と言います。

無視された動的なルーティングの末路

無視された動的なルーティングはどうなるのでしょうか。

そのURLにいきなり飛ぶと「404 Not Find」エラーを吐き出します。

サーバーにHTMLファイルがないので、「ぺージが無いよ!」と怒られるのです。

無視されるなら自分で設定するんだ

対応策はあるのでしょうか?

はい、ご安心を。

以下の手順で動的ルーティングを追加することができます。

  1. nuxt.config.jsファイルにgenerateプロパティを追加します。
  2. そして、routesプロパティに 動的なルーティングのPathを、配列で渡してやるのです。
Pathの配列を渡すサンプルコード
export default {
  generate: {
    routes: [
      '/users/1',
      '/users/2',
      '/users/3'
    ]
  }
}

参考

generateプロパティ - Nuxt.js

ただ、一つ一つ手書きで追加するのは現実的ではありません。

実務的には、APIを取得するメソッドを仕込んでPathを追加していきます。

Contentfulの動的ルーティングをgenerateプロパティに追加する場合

2019-10-11 14-16-51

ルーティングのHTMLファイルを生成する

ルーティングのHTMLファイルの生成は、下のコマンドを実行します。

$ yarn generate

実行すると、distディレクトリにHTMLファイルを吐き出します。

ターミナルには、HTMLファイルを生成したページのPathが表示されます。

動的なルーティングも生成されていますね。(赤い部分)

2019-10-06 10-56-47

本番環境のセッティング

このサイトでは、デプロイ先にNetlifyというホスティングサービスを利用しています。

Netlifyの設定では、デプロイ時のコマンドと、サーバー側で見るディレクトリ名を下記のように設定します。

  • デプロイ時のコマンド = yarn build && yarn generate
  • サーバー側で見るディレクトリ = dist

これにより、サーバーサイドレンダリングを実行し、生成されたHTMLファイルをサーバーが参照できるようになります。

Netlifyの設定ページ

2019-08-11 16-10-06

まとめ

  • サーバーサイドレンダリング = サーバー側で、静的ファイル(HTMLファイル等)を生成すること
  • レンダリングが無視される動的なルーティングは、generateプロパティに追加することで解決する
  • yarn generateコマンドはHTMLファイルを生成するためのコマンド

これがNuxt.jsのサーバーサイドレンダリングの正体です。

おしまい。

あなたの力になれること
私自身が独学でプログラミングを勉強してきたので、一人で学び続ける苦しみは痛いほど分かります。そこで、当時の私がこんなのあったら良いのにな、と思っていたサービスを立ち上げました。周りに質問できる人がいない、答えの調べ方が分からない、ここを聞きたいだけなのにスクールは高額すぎる。そんな方に向けた単発・短期間メンターサービスを行っています。
独学プログラマのサービス
独学プログラマ
独学でも、ここまでできるってよ。
CONTACT
Nuxt.js制作のご依頼は下記メールアドレスまでお送りください。