Gatsby のブログを AWS Amplify でホスティングする

Gatsby のブログを AWS Amplify でホスティングする

**Gatsby は React で作られた静的サイトジェネレーター (Static Site Generator)**です。ここ数年でとても人気のある SSG フレームワークです。

要するに WordPress のようにサーバー側で動的に HTML を組み立ててブラウザに返すのではなく、ビルド時に HTML を吐き出しておき、それを返すようにすることで高速な Web サイトを提供しようというものです。

それだけ聞くと、昔から Web をやっている人間には先祖返りにも感じられますが Git や Netlify/Amplify のようなサーバーレスホスティング、 Contentful のようなヘッドレス CMS などが充実してきた今だからこそ有効になったのだと思います。

さて今回はそんな Gatsby の入門として、スターター(テンプレート)を使ってサイト作成と AWS Amplify でのホスティングまでをやってみます。

前提条件

開発環境は下記の通りです。

  • Ubuntu 20.04
  • WSL 2
  • Windows 10 20H2
  • Visual Studio Code

Gatsby

Gatsby CLI のインストール

サイトを作成するため、 npm で gatsby コマンドをインストールします。ただ npx gatsby でも代用できますので必須ではありません。

$ npm install -g gatsby-cli

サイトの作成

gatsby コマンドの newディレクトリ名スターター(テンプレート)の URL を渡すと、そのテンプレートからサイトを作成してくれます。

とりあえずはサンプルから作成したほうがわかりやすいと思いますので、今回は公式のブログ向けスターターである gatsby-starter-blog を使います。

$ gatsby new gatsby-blog https://github.com/gatsbyjs/gatsby-starter-blog

ちなみに npx の場合は

$ npx gatsby new gatsby-blog https://github.com/gatsbyjs/gatsby-starter-blog

とするだけです。

インストールが完了すると下記のように表示されます。

info Initialising git in gatsby-blog

info Create initial git commit in gatsby-blog
info
Your new Gatsby site has been successfully bootstrapped. Start developing it by running:

  cd gatsby-blog
  gatsby develop

この時点で git はすで初期化され、初期状態がコミットされています。

なお、スターターは下記のライブラリーページから選ぶことができます。

開発環境の起動

さっそく開発環境を起動してみます。

$ cd gatsby-blog
$ npm run develop

開発環境が http://localhost:8000/ で起動します。

blog hosting with gatsbyjs and aws amplify 1

起動しました🤘 簡単でした😋

コンテンツの編集

ディレクトリ構成は下記のようになっています。試しに content/blog/hello-world/index.md を書き換えてみましょう。

blog hosting with gatsbyjs and aws amplify 2

ファイル先頭にある Frontmatter の title や description を書き換えました。

---
title: Hello MSEN
date: "2015-05-01T22:12:03.284Z"
description: "Hello MSEN"
---

ファイルを保存するとブラウザー側もライブリロードされて即表示されます。

blog hosting with gatsbyjs and aws amplify 3

この執筆体験はいいですね❗

リポジトリを作成してプッシュ

このサイト用の Git リポジトリを作成してください。今回は GitHub でリポジトリが https://github.com/mseninc/gatsby-demo として進めます。

とりあえずそのままプッシュします。

なおデフォルトブランチが master だったため、 main に変更しています。

$ git branch --move master main
$ git remote add origin https://github.com/mseninc/gatsby-demo.git
$ git push -u origin main

blog hosting with gatsbyjs and aws amplify 4

初期状態がプッシュされれば 🆗 です。

Amplify でのホスティング

基本的には公式ページに従えば大丈夫です。

Deploying to AWS Amplify | Gatsby

Amplify にアプリを追加

早速 Amplify でホスティングしてみます。 Amplify コンソールの “Host your web app” から “Get started” を選びましょう。

blog hosting with gatsbyjs and aws amplify 5

GitHub → Continue を選択します。

blog hosting with gatsbyjs and aws amplify 6

GitHub の認証が入りますので、確認の上、権限を与えてください。

リポジトリ・ブランチ選択画面でさきほどのリポジトリを選び、[次へ] をクリックします。

blog hosting with gatsbyjs and aws amplify 7

ビルド設定は変更する必要がありませんでしたので、そのまま [次へ] をクリックします。

blog hosting with gatsbyjs and aws amplify 8

設定を確認し、 [保存してデプロイ] をクリックします。

blog hosting with gatsbyjs and aws amplify 9

ビルドがはじまり…

blog hosting with gatsbyjs and aws amplify 10

検証まで完了すれば 🆗 です。赤で示したデプロイ先の URL を開きましょう。

blog hosting with gatsbyjs and aws amplify 11

無事表示されました😃

blog hosting with gatsbyjs and aws amplify 12

下層ページがリダイレクトされる

しかし、よく見るとなにかがおかしいことに気づきます。そう、トップページのアバターが表示されていません。

しかも、 /my-second-post/ のような下層ページでページをリロードすると、トップページにリダイレクトされてしまいます。

まぁ、 Amplify あるあるです。

Amplify コンソールの “書き換えて、リダイレクト” を確認すると下図のようになっているはずです。(「追いかけて ヨコハマ」みたいですね)

初期状態でこの 2 つ目のリライト設定が入っているため、下層が index.html に飛ばされています。

[編集] をクリックし、

blog hosting with gatsbyjs and aws amplify 13

2 件目を [ロールの削除] で削除し、 [保存] します。

blog hosting with gatsbyjs and aws amplify 14

最初の 1 つだけになれば 🆗 です。

blog hosting with gatsbyjs and aws amplify 15

無事 Kyle Mathews のアバターが表示されました🙌下層ページでリロードしても大丈夫です👍

blog hosting with gatsbyjs and aws amplify 16

試しに Chrome で JavaScript を向こうにしてアクセスしてみましたが、無事コンテンツが表示されていました。

画像最適化

ちなみにこの gatsby-starter-blog テンプレートにはデフォルトで gatsby-plugin-image プラグインが入っており、ビルドした時点でファイル解像度ごとに最適化された画像が生成されています。

/hello-world/ ページを開くと卵の画像があるので、これのソースを見てみるとたしかに srcset が記述され、各サイズの画像が生成されていることがわかります。

blog hosting with gatsbyjs and aws amplify 17

記事側はただの Markdown としてしか書いていないのにすごいですね。

blog hosting with gatsbyjs and aws amplify 18

まとめ

今回は静的サイトジェネレーターである Gatsby を Amplify でホストしてみました。

よくある “やってみた” 系の記事でしたが、詰まるところがなく、 Gatsby の出来のよさには驚きました。

プラグインによってかなりいろいろなことができること、 GraphQL でコンテンツを取得できることが魅力ですね。 React に慣れていればカスタマイズ等も容易ですね。今後もいろいろ試してみたいと思います。

ちなみに公式に AMP 対応ができないことが難点のように思われましたが、そもそも Google が AMP を重視しない方針に転換したようなので、デメリットとは呼べなくなりそうです。

日本人が Gatsby を検索すると「男のカッコイイをサポート」してくれる商品しか出てこないのが玉にキズです。うーん、マンダム😏

kenzauros