Next.js(SSG)+WP RESTAPI+AmazonS3の静的配信サイトを作ってみよう②デプロイ環境構築 | 東京都の墨田区にあるホームページ制作・Web制作・イラスト・デザイン制作会社 TenCy株式会社
2024.7.29

Next.js(SSG)+WP RESTAPI+AmazonS3の静的配信サイトを作ってみよう②デプロイ環境構築

Next.js+WP REST API + Amazon S3 の静的配信でWebメディアを作ってみたい

Next.js+WP REST API + Amazon S3で静的配信サイトを作るための環境構築についてご紹介しました。

第二回の本記事では、Amazon S3 で静的配信を行うための準備をしていきたいと思います。

第一回記事の振り返り

第一回記事では、Next.js の開発環境構築手順(といっても、node.js の環境があればそこまで難しくもないですが…)や、WP REST API で記事情報を取得するための準備を行いました。また、なぜこの環境で制作を試行錯誤してみるか、について解説しました。この点は大事なポイントなので改めて述べておきますと、WordPressのシェアが大きい中で、WordPressで蓄積したコンテンツは活かしつつ静的サイト配信によるセキュリティ向上施策が今後価値に繋がるのでは、という点があります。

AWSのアカウントを作って、Amazon S3にデプロイする準備を行う

Amazon S3 で静的ウェブサイトをホスティングする場合のチュートリアルが公開されています。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html

こちらのStep1~7(クリーンアップは不要ですね)を実施して、index.html が謎の長ったらしいURL文字列で表示されることを確認しましょう。独自ドメインで作成したindex.html を表示するには、他にも色々と設定が必要となるため、まずはhtml表示まで実施できることを確認しましょう。

※index.html のサンプルも上記チュートリアルに記載されています

このように表示されればOKです

Github Actions でNext.jsでSSG静的配信サイトをAmazon S3にデプロイ

Next.js でSSG(Static Site Generation)で生成したサイトをAmazon S3でデプロイする方式を実現したいと思います。まずは、Next.js の設定をSSGにするため、next.config.mjs で output の設定に’export’を追記します。

/** @type {import('next').NextConfig} */
const nextConfig = {
    output: 'export',
};

export default nextConfig;

これにより、next build するとSSGでの静的サイト生成モードとなります。なおこちらの記法はNext.js v13.3以降での環境となっています。デフォルトで”out”フォルダが作られ、その中に静的ウェブページ一式がビルドされて生成されます。

これらのoutフォルダの中身を、Github Actions でブランチにコミットされた時にAmazon S3へデプロイするymlファイルを生成します。参考までに、簡単なymlのサンプルを下記に紹介します。GithubやAWSの仕様変更などで、この内容がそのまま利用できるとは限りませんのでその点はご了承ください。

name: Deploy to S3

on:
  push:
    branches:
      - main  # main ブランチにプッシュされたときに実行するという定義例

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@main
      - name: Install dependencies
        run: npm install
      - name: Build the project
        run: npm run build
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Sync S3 bucket
        run: |
          aws s3 sync ./out s3://[Amazon S3のバケット] --delete
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

aws s3 sync を利用することで、./out ディレクトリとS3のバケットを同期させることができます。これにより、都度生成されたファイルの過去のものは削除されるため、バケット内のファイルが増え続けることが回避できます。

なお、ACCESSKEY については、それぞれAWS側で作成してくださいね。IAMでgithub actions 用のユーザーを登録し、S3へのアクセス権限を付与するといいでしょう。

github action 実施後に、Amazon S3 へ各種ファイルがデプロイされていれば、設定完了です。

まとめ

今回の記事では、Github Actions を使ってAmazon S3へのデプロイの自動化部分を実施しました。引き続き、サイト公開やサイトのブラッシュアップについて記事を作成していきたいと思います。


弊社ではホームページの制作について、ご要望に応じた最適な制作方式・運用管理方式をご提案いたします。お困りごとがありましたら、お気軽にお問い合わせください。

この記事を書いた人

高仲 秀寿

高仲 秀寿

TenCy株式会社 代表取締役/中小企業診断士

TenCy株式会社代表取締役。中小企業診断士として、中小企業の経営・事業課題に向き合いながら、Web制作・Webマーケティング・DX・生成AI活用など、デジタル領域を中心とした支援に携わる。

企業のWebサイト制作や運用、業務改善、ITツールの導入・活用など、実際の支援現場で得た知見をもとに、経営者やWeb担当者が実務に活かせる情報を発信。

「TenCy通信」では、Web・IT・生成AI・DXをはじめ、中小企業向けの補助金・助成金や公的支援制度などについて、公式情報や一次情報を確認しながら、できるだけわかりやすく解説している。

OTHER NEWS

一覧にもどる