Communityコーディング&開発github.com

sevalla-hosting/skills

Next.js アプリケーションを Sevalla (Kinsta の PaaS) に初回で正しくデプロイします。Sevalla MCP サーバー、sevalla CLI、または Sevalla API を使用します。

skills とは?

このスキルは、Next.js アプリケーションを Sevalla (Kinsta の PaaS) に正しくデプロイするための包括的なガイドです。Next.js のホスティング製品 (Application Hosting と Static Site Hosting) の適切な選択から始め、リポジトリのコードを検査して動的機能の有無を判断します。デプロイに失敗する典型的な落とし穴 (ポート設定、ビルド時変数、ephemeral ファイルシステム、Node.js バージョンなど) を事前にチェックし、Sevalla MCP サーバー、sevalla CLI、または REST API のいずれかを使ってデプロイ手順を自動化します。デプロイ後はビルドログとランタイムログを確認し、本番 URL が正常に応答することを検証します。カスタムドメイン設定、スケーリング、ロールバックなどのオプション手順も含まれています。このスキルは Claude Code、Cursor、Codex などの AI エージェントで利用可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sevalla-hosting/skills/tree/HEAD/skills/sevalla-nextjs-deploy

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Next.js を Sevalla にデプロイする

Sevalla は Kinsta が提供する PaaS で、Next.js 向けに 2 つのホスティング製品があります。

  • Application Hosting: 実際の Node.js サーバーを実行します。SSR、ルートハンドラ (API ルート)、プロキシ (旧ミドルウェア)、ISR (revalidate)、サーバーアクション、WebSocket に必要です。
  • Static Site Hosting: 静的エクスポート (output: 'export') の出力を配信します。サーバーサイドコードは一切不要です。1 社あたり最大 100 の静的サイトに制限されています。

この判断を最初に正しく行ってください。これによって以下のすべてが決まります。

ステップ 0: 使用するホスティング製品を決定する

何よりも先にリポジトリを確認します。

  1. next.config.js / next.config.ts / next.config.mjs を読み、output: 'export' または output: 'standalone' を確認します。
  2. コードベースから以下を検索します: app/api/、pages/api/、proxy.ts または proxy.js (Next.js 16)、middleware.ts または middleware.js (Next.js 15 以前)、"use server"、getServerSideProps、revalidate (ISR)、NextResponse、またはサーバーサイドで使用されるデータベース/認証クライアント。
  3. 判断します:
    • 上記のいずれかが存在する場合: Application Hosting (サーバーが必要)。ステップ 1 に進みます。
    • 何も存在せず、純粋に静的なコンテンツ、マーケティング、ブログの場合: Static Site Hosting の方がシンプルで低コストです。references/static-hosting.md を参照してください。
    • 判断に迷う場合、または後で動的機能が必要になる可能性がある場合: デフォルトで Application Hosting を使用します。Static Hosting でできることはすべて実現できます。

本当に曖昧な場合は、ユーザーに「このアプリにはライブサーバー (API ルート、ISR、認証、データベース呼び出し) が必要ですか、それとも完全に静的なコンテンツですか?」と 1 つ質問してください。推測で判断してはいけません。間違った選択をするとデプロイ全体を作り直すことになるからです。

また、リポジトリ内にデータベースクライアント (Prisma、Drizzle、pg、mysql2、Mongoose、redis、ioredis) やファイルアップロードがないか確認してください。見つかった場合は、ステップ 3 の前に references/data-services.md を読んでください。

ステップ 1: ビルド戦略を選択する (Application Hosting)

Sevalla は Git ベースのアプリケーションを 4 つの戦略のいずれかでビルドします:

  • Nixpacks: デフォルト。標準的な Next.js アプリでは設定不要です。理由がない限りこれを使用します。
  • Railpack: Nixpacks の後継。こちらも設定不要です。新しいアプリには良い選択です。API フィールド build_type: "railpack" で設定します。
  • Dockerfile: 小さく再現可能なイメージが必要な場合、自動検出ビルダーが苦手とするモノレポの場合、またはユーザーが Docker を希望する場合に使用します。
  • Buildpacks (pack): Next.js ではほとんど必要ありません。

設定を書く前に references/app-hosting.md を読んでください。正確な package.json スクリプト、推奨 Dockerfile、nixpacks.toml オーバーライド、モノレポの Build path 設定が記載されています。一般的な Next.js の知識だけで Dockerfile や nixpacks.toml を手書きしないでください。Sevalla には一般的なガイドでは触れられていない固有の制約 (以下参照) があります。

ステップ 2: リポジトリを準備する (Sevalla の制約)

これらはほとんどの初回デプロイで問題になります。デプロイ前にすべて確認してください:

  1. $PORT からポートを読み取り、0.0.0.0 にバインドします。 デフォルトの Web プロセスポートは 8080 で、Sevalla はそれを PORT に渡します。インターネットに対してはポート 80 と 443 のみが開放され、Sevalla はそれらを $PORT にルーティングします。Nixpacks または Railpack の場合、起動スクリプトは next start -p ${PORT:-8080} -H 0.0.0.0 でなければなりません。単純な next start はポート 3000 で待機します。
  2. NEXT_PUBLIC_* 変数はビルド時にインライン化されます。 ビルドを実行する前に、ビルド時変数 (is_buildtime: true) として作成してください。後から追加した変数は、再起動ではなく新しいデプロイが必要です。
  3. ファイルシステムは ephermeral です。 アプリが実行時にディスクに書き込むもの (アップロード、生成ファイル、オンディスクキャッシュ) は、再デプロイまたは再起動のたびに失われます。オブジェクトストレージを使用するか、アプリがローカルディスクへの書き込みを本当に必要とする場合 (SQLite やセルフホスト CMS など) は永続ディスクを使用してください。references/data-services.md を参照してください。
  4. output: 'standalone' は Dockerfile のみで使用します。 next start はスタンドアロンバンドルを使用せず、Next.js は "next start" does not work with "output: standalone" configuration と警告します。したがって、Nixpacks または Railpack の場合は output を設定しないでください。Dockerfile の場合は output: 'standalone' を設定します。
  5. node_modules や .next をコミットしないでください。 コミットされた node_modules フォルダは、Sevalla でビルドが失敗する原因として文書化されています。
  6. Node.js のバージョンを固定します。 Nixpacks はデフォルトで Node 18 を使用し、Next.js 16 には Node 20.9 以降が必要です。package.json に "engines": { "node": "22.x" } を設定するか、ビルド時変数 NIXPACKS_NODE_VERSION=22 を設定します。
  7. モノレポ: Build path (API フィールド build_path) を Next.js アプリのフォルダ (例: apps/web) に設定します。Dockerfile の場合は、docker_context と dockerfile_path も設定します。
  8. package.json の name: パッケージ名に "node" や "js" を使用しないでください。Sevalla のビルドが壊れることが文書化されています。
  9. 変数値内の二重引用符 は \" としてエスケープする必要があります。エスケープされていない引用符は削除されるか、ロールアウトを失敗させます。
  10. シークレット (データベース URL、API キー) は Sevalla の環境変数に格納します。実際のシークレットが入った .env ファイルをコミットしないでください。

ステップ 3: デプロイする

利用可能な最初のオプションを、以下の順序で使用します:

  1. Sevalla MCP サーバー (https://mcp.sevalla.com/mcp)。search (仕様内の API エンドポイントを検索) と execute (sevalla.request({ method, path, body }) を呼び出す JavaScript を実行) の 2 つのツールがあります。以下の表の API パスを使用します。
  2. sevalla CLI。すべてのコマンドで --json を使用して ID を読み取れるようにします。npm install -g @sevalla/cli (Node 22+) または brew install sevalla-hosting/tap/sevalla でインストールします。sevalla login (ブラウザでのデバイス認可) または SEVALLA_API_TOKEN の設定でログインします。
  3. REST API。ベアラー API キーを使用して https://api.sevalla.com/v3 にアクセスします。

どれも利用できない場合は、MCP サーバーの追加方法をユーザーに伝えるか (https://docs.sevalla.com/quick-starts/coding-agents/overview のコーディングエージェントクイックスタートを参照)、references/dashboard.md のダッシュボード手順を提供してください。最初のログインだけはユーザー自身が必要です。

Application Hosting

#アクションAPI (MCP execute または REST)CLI
1ロケーションを選択GET /resources/clusterssevalla resources clusters --json
2アプリを作成POST /applications に display_name、cluster_id、source (privateGit は接続済みの GitHub/GitLab/Bitbucket リポ、publicGit は公開 URL)、git_type、repo_url、default_branch を指定sevalla apps create --name <name> --cluster <cluster-id> --source privateGit --git-type github --repository https://github.com/<owner>/<repo> --branch <branch> --json
3ビルド戦略とビルドパスを設定 (デフォルトと異なる場合)PATCH /applications/{id} に build_type (nixpacks、railpack、dockerfile、pack) と build_path を指定sevalla apps update <app-id> --build-type railpack --json。CLI にはビルドパスフラグはありません: sevalla apps update <app-id> --data '{"build_path":"apps/web"}' --json
4環境変数を追加POST /applications/{id}/env-vars に key と value を指定。is_runtime と is_buildtime はデフォルトで両方 true になり、NEXT_PUBLIC_* に適しています。sevalla apps env-vars create <app-id> --key <KEY> --value "<value>" (ビルド時と実行時の両方で利用可能)
5データベースがあれば接続references/data-services.md を参照
6デプロイPOST /applications/{id}/deployments。アプリを作成してもデプロイは開始されません。sevalla apps deployments trigger <app-id> --branch <branch> --json

privateGit リポジトリでステップ 2 が HTTP 500 で失敗する場合、最も可能性の高い原因は Sevalla の GitHub アプリがリポジトリを認識できないことです。API はそのことを通知しません。sevalla git providers --json で確認してください: settings_url で GitHub アプリのインストールページが開きます。ユーザー (または GitHub 組織のオーナー) がアプリにリポジトリへのアクセス権を付与する必要があります。ユーザーが所有していない組織内のリポジトリは、オーナーが追加する必要があります。その後、ステップ 2 を再試行してください。

新しいアプリでは自動デプロイはオフになっています。ユーザーがプッシュのたびにデプロイを希望する場合は、PATCH /applications/{id} で auto_deploy: true を設定します (privateGit のみ機能します)。

Static Site Hosting の場合は、代わりに references/static-hosting.md に従ってください。静的サイトを作成すると、最初のデプロイが自動的に開始されます。

ステップ 4: 確認する

開始されたデプロイが動作するデプロイであるとは限りません。完了したとユーザーに伝える前に、以下のすべてを実行してください:

  1. ビルドを待ちます。 GET /applications/{id}/deployments/{deployment_id} (CLI: sevalla apps deployments get <deployment-id> --app-id <app-id> --json) を 15 秒から 30 秒ごとにポーリングし、status が success または failed になるのを確認します。その他の値は waiting、inProgress、cancelled、skipped です。
  2. 失敗した場合、ビルドログを読みます。 GET /applications/{id}/deployments/{deployment_id}/logs (CLI: sevalla apps deployments logs ...)。エラーを references/app-hosting.md のトラブルシューティング表と照合し、原因を修正して再度デプロイします。ログを読まずに推測で 2 回試してはいけません。成功はデプロイの status で判断し、ログの重大度では判断しません: 通常のビルド出力が stderr に書き込まれると、成功したビルドでも "severity": "error" として表示されます。
  3. ライブ URL を見つけます。 GET /applications/{id}/domains (CLI: sevalla apps domains list --app-id <app-id> --json)。すべてのアプリは、最初の成功したデプロイ後に無料の *.sevalla.app ドメインを取得します。
  4. URL をリクエストします。 / と (アプリにある場合) 1 つのルートハンドラで HTTP 200 を期待します。502 またはタイムアウトは通常、サーバーが $PORT と 0.0.0.0 でリッスンしていないことを意味します。
  5. アプリがエラーで応答する場合、ランタイムログを読みます。 GET /applications/{id}/runtime-logs (CLI: sevalla apps logs runtime <app-id>)。

その後、ユーザーにライブ URL、設定した内容、およびユーザー自身が行う必要があること (カスタムドメインの DNS レコード追加など) を伝えます。

ステップ 5: オプションの次のステップ

  • カスタムドメイン: sevalla apps domains add <app-id> --name example.com。ユーザーは Sevalla が返す DNS レコードを追加する必要があります。SSL は含まれています。
  • スケーリング: sevalla apps processes update <process-id> --app-id <app-id> --instances <n>。複数のインスタンスがある場合は、共有状態に永続ディスクを使用しないでください。オブジェクトストレージまたはデータベースを使用します。
  • ロールバック: sevalla apps deployments rollback <app-id> --deployment-id <id>。

リファレンスファイル

  • references/app-hosting.md: package.json スクリプト、Nixpacks と Railpack の注意点、推奨 Dockerfile、モノレポ設定、トラブルシューティング表。
  • references/static-hosting.md: Static Site Hosting の静的エクスポート設定とデプロイ。
  • references/data-services.md: データベース、オブジェクトストレージ、永続ディスク、およびそれらの接続詳細がアプリに到達する方法。
  • references/dashboard.md: 人間向けの Sevalla ダッシュボードでの同じ手順。

関連スキル