20241005
2025/10/05
Vercel
登録してみた。
GitHub連携
Vercelのプロジェクト側でリポジトリをインポートすることで自動デプロイの設定も行われる。
インポート時にWebhook登録などの設定も自動で行われ、プッシュ時等にVercelに通知がいく模様。
そのため別途GitHub Actionsの設定などは不要。
リポジトリ内のブランチにプッシュしたものはプレビュー用としてデプロイされる。
master(main)以外のブランチも同様で、ブランチごとに異なる環境にデプロイされる。
プッシュごとにビルド、デプロイが自動で走るため、無料版では上限に注意が必要。
特定のブランチへのコミットのみ本番(あるいはプレビュー)デプロイするよう設定を変更することも可能。(ただしデフォルトはすべてのコミットでデプロイ)
動的API
https://nextjs.org/docs/messages/sync-dynamic-apis
Next.js15から以下のプロパティ、関数が非同期となった。
- params
- searchParams
- cookies()
- draftMode()
- headers()
以下のコードではエラーが発生する。
function Page({ params }) {
// 直接 params.id にアクセスしている
return <p>ID: {params.id}</p>
}以下の様に修正が必要
function Page({ params }) {
const { id } = await params;
return <p>ID: {id}</p>
}非同期となった理由
paramsの取得を非同期にし、取得前の段階でparamsを使用しない部分の処理を走らせるため。
TTFBが改善される、、、らしい
これはストリーミングレンダリングの技術とも関連する。
ストリームレンダリング
Next.js 15 / React 18〜
コンポーネントで分割した部分をSuspenseの機能を使って分割してクライアントに送信する仕組み。
従来もSuspenseを使って読み込みが重いコンポーネントを読み込み次第差し替える対応が可能だったが、それがサーバークライアント間でも行われているイメージ。
export default function Page() {
return (
<>
<Header />
<Suspense fallback={<Loading />}>
<Content />
</Suspense>
</>
);
}Suspenseの外は<Loading />とともにすぐに返され、Suspenseが解決次第、差分(<Content />)がクライアントに送信される。
React側
「ストリーミング前提」の仕組みが組み込まれている。
- renderToPipeableStream / renderToReadableStream
- HTML をチャンク単位で出力する API
- <Suspense> とサスペンド制御
- どのコンポーネントが「待ち状態」かを内部的に把握している。
- サスペンド中のコンポーネントはプレースホルダーを設置し、ストリームの分割ポイントを作る。
Next.js側
- ストリーミング送信
- Reactからデータを受け取りストリーミング送信する。
- <Suspense> ごとにチャンクを切って送信制御
- Suspense外を先に送り、解決次第Suspense内を送信する。