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

Next.js Web アプリで「pnpm build 実行後に成果物が見つからない」問題の原因・解決策を、静的サイト出力(output: 'export')対応&手動 ZIP デプロイまでの記録

2025年11月7日

はじめに

Webアプリを Next.js で構築し、 pnpm build を実行しても “出力ファイルが見当たらない”という状況に遭遇していませんか? 本稿では、App Router を使った Next.js プロジェクトにおいて、Amplify での手動 ZIP デプロイや静的出力 (output: 'export')を前提に、「成果物がどこに行ったのか分からない」 原因から、設定変更、確認手順、最終的には ZIP アップロードまでをステップごとにまとめました。

想定環境


なぜ「出力ファイルが見当たらない」のか?

ビルドが成功してもファイルが見つからない理由として、以下のようなケースがあります:

出力ログのヒント

Next.js 16.0.0 (Turbopack)
 - Environments: .env

 Creating an optimized production build …
 ✓ Compiled successfully in 2.0s
 ✓ Finished TypeScript in 1552.6ms
 ✓ Collecting page data in 211.4ms
 ✓ Generating static pages (5/5) in 242.0ms
 ✓ Finalizing page optimization in 6.8ms

 Route (app)
 ┌ ○ /
 ├ ○ /_not-found
 └ ○ /login

このログでは「Generating static pages」とあり静的出力傾向ですが、 output: 'export' が未設定であれば .next/ フォルダ内に出力されており、 手動アップ用の out/ フォルダが生成されていません。


解決手順:静的出力+手動Zipデプロイまで

1. next.config.ts に output: 'export' を追加

// next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  output: 'export',
  images: {
    unoptimized: true
  },
  // 必要に応じて basePath/trailingSlash も
};

export default nextConfig;

この設定により、pnpm build 実行後に out/ フォルダが作成され、 静的 HTML/アセットがそこに出力されます。

2. ビルドと確認

rm -rf .next out
pnpm build

→ 成功後、プロジェクト直下に out/ フォルダが生成されていることを確認します。

ls -la out

例:

index.html
login/index.html
_assets/
_next/

3. 手動 ZIP 作成と AWS Amplify Hosting へのアップロード

cd out && zip -r ../deploy.zip . && cd ..

AWS コンソール → AWS Amplify → 新しいアプリを作成 → Gitなしでデプロイ → ドラッグアンドドロップ → deploy.zip をアップロード。
Static Hostingモードであればこのまま公開されます。

4. CORS/ルーティング設定の確認

Source:   /*  
Target:   /index.html  
Type:     200 (Rewrite)

を設定しておくとページ直リンク時の404を防げます。


SSRが混ざっている場合の注意点

もしアプリ内に Route Handler(route.tsServer Actions、または getServerSideProps(旧方式)相当の機能があると、 output: 'export' はエラーになるか正しく動きません。その場合は:

を検討したほうがいいです


よくあるトラブルとその対処

トラブル 原因 対処
out/ フォルダができない output: 'export' の設定漏れ next.config.ts を修正して再ビルド
login/ などルート以外で404 Rewrite設定なし Amplify Console で /* → /index.html を設定
GraphQL 呼び出しがブラウザで CORSエラー Allowed Origins にドメイン未登録 AppSync 設定で公開ドメインを追加
モバイルSafariでエラーが出る 画像最適化が静的出力に非対応 images.unoptimized: true を設定
環境変数が反映されない ビルド前に env ファイル認識がなかった .env.production に追加/再ビルド

まとめ

Next.js と AWS Amplify の組み合わせで「ビルド後の出力ファイルが見当たらない」状況は、 ほとんどの場合 静的出力の設定漏れ出力先の見落としです。 next.config.tsoutput: 'export' を加え、ビルド後に out/ フォルダを生成、 さらに AWS Amplify Hosting に正しくアップロードすれば、静的ホスティングがスムーズに動きます。
また、ルーティングや CORS の設定を併せて整えることで、SPAとしても機能的にも安定公開できるようになります。


関連リンク

.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から手動デプロイ【実行コマンド付き】

Next.jsで複数サイズのPNGファビコンを指定する方法【layout.tsx対応】

Next.jsでのtypeとinterfaceの違いと使い分け方

Next.js useState と useRef の違いは?最適な使い分け

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

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

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