Next.jsで basePath/homepage2 にして S3 へ静的デプロイする

2025-10-15

要約(TL;DR)next.config.mjsbasePath:'/homepage2' を指定し、静的出力向けのオプション(assetPrefixoutput:'export'trailingSlashimages.unoptimized)をセット。pnpm build && pnpm exec next exportout/ を生成し、aws s3 syncs3://{bucket}/homepage2/ へアップロード。S3静的ホスティングで Index/404 を設定すればOK。画像や fetch の絶対パスは basePath に合わせて修正。


1. 前提とゴール

2. next.config.mjs の設定

/** @type {import('next').NextConfig} */
export default {
  basePath: '/homepage2',
  assetPrefix: '/homepage2/',        // サブディレクトリ配信の静的サイトでは実質必須
  output: 'export',                // 静的エクスポート
  trailingSlash: true,             // S3 では末尾スラッシュ運用が安全
  images: { unoptimized: true },   // next/image を静的化
};

ポイント: basePath はアプリのルートを /homepage2 にシフトします。assetPrefix を合わせて指定すると、ビルド済み静的アセット(_next/static など)も /homepage2 配下で参照され、S3のサブディレクトリ運用と噛み合います。

3. コード側の注意(リンク・画像・fetch)

4. ビルド & 静的エクスポート

pnpm build
pnpm exec next export -o out

生成物は out/ 直下に index.html(および各ページの /path/index.html)が並び、参照パスは /homepage2 前提で吐き出されます。

5. S3 に配置(homepage2/ プレフィックス)

バケット例:my-site-bucket。S3 上では homepage2/ フォルダに静的ファイルを置きます。

aws s3 sync ./out/ s3://my-site-bucket/homepage2/ --delete

6. S3 静的ウェブサイトホスティング設定

  1. バケットの「静的ウェブサイトホスティング」を有効化
  2. インデックスドキュメント:index.html
  3. エラードキュメント:index.html(SPAルーティングを維持したい場合)

公開URL例:http://<bucket>.s3-website-<region>.amazonaws.com/homepage2/

補足: サブディレクトリ単位で 404 => /homepage2/index.html にリダイレクトしたい場合は、S3の「ルーティングルール」で /homepage2/*/homepage2/index.html に流すルールを追加すると堅牢です。

7. 公開(パブリックアクセス)とキャッシュ

S3直公開ならオブジェクトのパブリックリードが必要です(バケットポリシー or ACL)。継続運用では、_next/static は長めのキャッシュ、それ以外は短め/無効化などの使い分けが有効です:

# ビルド済み静的アセットは長めに
aws s3 cp out/_next/ s3://my-site-bucket/homepage2/_next/   --recursive --cache-control "public,max-age=31536000,immutable"

# HTMLは即時反映を優先
aws s3 cp out/ s3://my-site-bucket/homepage2/   --recursive --exclude "_next/*" --cache-control "no-store"

8. SEO のポイント(サブディレクトリ運用時)

9. よくある落とし穴チェックリスト

10. 検証手順(ローカル & 本番)

  1. ローカル:pnpm devhttp://localhost:3000/homepage2 を確認(devサーバ再起動を忘れない)。
  2. 本番:pnpm build && pnpm exec next export -o outaws s3 sync → S3ウェブサイトURLで /homepage2/ を確認。
  3. 画像・リンク・動的遷移・404動作・OGカードを確認。

11. 運用を楽にする package.json スクリプト例

{
  "scripts": {
    "build:static": "next build && next export -o out",
    "deploy:s3": "aws s3 sync ./out/ s3://my-site-bucket/homepage2/ --delete",
    "deploy:s3:fast": "pnpm build:static && pnpm deploy:s3"
  }
}

12. まとめ

basePath/homepage2 に設定し、静的エクスポート + S3 配置の基本を押さえれば、サブディレクトリ運用でもシンプルに公開できます。

関連リンク

.htaccessは階層で引き継がれる?Apacheの挙動を徹底解説

MBTI診断

SEO対策に必須!検索上位を狙うsitemap.xmlの完全ガイド

Google Search Consoleの「代替ページ(適切なcanonicalタグあり)」とは?原因と解決法を徹底解説!

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法

Googleサイト確認のTXTレコードをnslookupで確認する方法【SEO対策】

Googleサーチコンソールに反映されるための最低限のSEO構造とは

PHPで複数ファイルを順番に削除する方法

MBTI診断 | あなたの性格タイプを分析

PDFファイル結合|パスワード設定ツール

【Anker Soundcore Liberty 4】イヤーピース紛失!代替品はAmazonで購入

JavaScriptでタイムゾーン変換!UTCとJST(日本時間)の変換方法

pnpmとは?npmとの違いとインストール方法

git switchの使い方とgit checkoutとの違い

HTMLとJavaScriptモジュールでクラスを定義し、ボタンから呼び出す方法

JavaScriptでTensorFlow.jsを動的に読み込む方法|HTMLに直接書かずに機械学習を実行する

ChatGPT風リンクバッジをCSSで作成する

ffmpegでMOVファイルを逆再生する方法【音声付き対応】

Windows 11でタスクマネージャー以外からアプリを終了させる方法【PowerShell・コマンドプロンプト】

macOSでドメイン名から情報を取得する方法【初心者向け】

JavaScriptでPCの空き容量やメモリ量を取得できる?Chromeの制限と代替手法

PowerShellでNode.jsの最新バージョン一覧を確認する方法【Volta/Windows対応】

Next.jsでbasePathを/homepage2にしてS3へ静的デプロイする完全手順

NextAuthなし・APIルートなしで実装:Next.js + AWS Amplify だけでメール/パスワード認証を完結する方法

「Next.js pnpm build (ビルド)後の出力ファイルが見当たらない」トラブルシュート&静的デプロイ

AWS Amplify CLIでS3やZIPから手動デプロイ【実行コマンド付き】

GraphQL接続の落とし穴:Amplify Hosting(amplifyapp.com) vs S3+Next.js(静的書き出し)比較

Homebrewの「update」と「upgrade」の違い+バージョン確認方法|Macのパッケージ管理

.DS_StoreをGitでアップしない方法|macユーザー向け