SSGって何者?

投稿日:2020/10/19 / 最終更新日:2020/10/19

そもそもSSGってなに?

Static site generator。
静的なファイルを生成し、CDNに配置する。
動的なページではない場合に使える。(ニュースやブログ等)

なぜ静的なファイルを生成するといいの?

  1. クライアント側での初期データ(ニュースやブログで言う記事データ)を取得するAPIコールが不要になり、データの表示が早くなる
  2. 1のおかげでGoogle botなどのクローラはデータが挿入された意図通りにレンダーされたページを読み込むのでSEO的によい
  3. 静的なHTMLをCDNに配置することでWebサーバーを介す必要がなくなり、レスポンスが早い

つまりユーザー体験が向上し、さらに(ユーザー体験が向上した結果)SEOの評価向上に繋がる。

SSGが出てくるまでの経緯

React.js等DOM操作ライブラリの台頭

これまではRuby on RailsやDjangoのように、ページに掲載する情報はHTMLとしてサーバーがビルドしてクライアントに返していた。
しかし現在React.jsやVue.js等、ブラウザ上でJavascriptを使ってDOMを操作しHTMLを構築する技術が主流になっている。(そのおかげで動的なページ作成が容易になりユーザー体験や開発体験が向上した)
しかしHTMLはクライアント側で構築されるため、基本的にはサーバーが返すHTMLにデータを入れ込む事ができない。クライアント側が、HTMLやJSを取得した後に非同期でAPIコールを行いデータを取得する事になる。

1 - [Web server] <=(HTML取得)=> [Client]
2 - [Web server]                          [Client] =(データ取得)=> [API server]


クライアント側でデータを取得する弱点

クライアント側でデータを取得する分、レンダーがAPIリクエストのレスポンスが帰ってくるまでその分遅れる。
またそうしたレンダーのタイムラグのせいで、データがまだ反映されていない空白のページとしてGoogleに認識されてしまい、SEO的なデメリットが発生する場合もある。

記事中画像

SSRによる解決

そこでサーバーサイドでデータを取得して、データが挿入されたレスポンスを返すSSR(Server side rendering)が登場した。
これによりデータ取得はクライアントサイドで行う必要がなくなった。

1 - [API server] <=(データ取得)= [Web server]                                            [Client]
2 - [API server]                         [Web server] <=(データ入ったHTML取得)= [Client]


でもSSRよりSSGがベターな場合がある

SSRによってクライアント側のデータ取得が必要なくなったが、レスポンス毎にWebサーバーがAPIコールや計算をしている。
クライアントによって異なるデータを取得する必要がある場合を除いて(ログイン済みのページ等)、ニュースやブログ等の場合同じHTMLを返せばよい。
そういう場合はレスポンス時にデータを取得してHTMLを作成する必要はなく、データが更新された段階でHTMLを生成すればよい。
このブログで言えばブログ記事が投稿されたことをトリガーにHTMLを生成すればよい。

0 - [API server] <=(データ取得)= [Web server]                [CDN]               [Client]
0 - [API server]                         [Web server] =(配置)=> [CDN]               [Client]
1 - [API server]                         [Web server]                [CDN] =(取得)=> [Client]


しかもCDNに配置することでWebサーバーの計算する負担をなくせる。そしてレスポンスが早い。