本文へ
upwind

upwindNext.js のデプロイ用アダプターと、それが作ったものを配信するランタイム。

アダプターはあなたの next build の中で動き、デプロイ用のバンドルを書き出します。すべてのルート、プリレンダー、静的ファイルを内容で識別し、アプリのコードを実行する Function まで含めて。ビルドはどこにも通信せず、認証情報も要りません。出てくるのは 1 つのディレクトリーで、それをアップロードするのはホスト側の仕事です。

アプリを作る

pnpm create upwind

Tailwind 4 入りの Next.js 16 アプリを upwind に配線した状態で書き出し、そのままインストールします。

GitHub で読むnpm のパッケージ

ビルドが書き出すもの

Next.js は自身の Adapter API を通じてアダプターを呼びます。ビルド前に modifyConfig、ビルド後に onBuildComplete。デプロイに必要なものはすべて 1 つのディレクトリー .arkor/ の下に書き出されます。

bundle.json
エントリーポイント、プリレンダー、ルーティング表、ヘッダー規則、キャッシュ寿命のプロファイル。何を配信するか、そして何を Function ではなくストレージから配信できるか。
内容で識別される blob
プリレンダー済みのシェルと静的ファイルを、その中身のハッシュで識別します。1 ページだけ変わったデプロイが運ぶのは 1 つの blob です。
app Function
アプリ自身のコードを、ページ、Route Handler、キャッシュとともにバンドルしたもの。
middleware Function
プロジェクトの proxy.ts を別に組み立てたもの。rewrite だけで済むリクエストがアプリを起こすことはありません。

アダプターは外部サービスと一切通信しません。バンドルを作るだけなら、どのアカウントも必要ありません。

開発中も、玄関がある

デプロイされたアプリの前にはエッジがいて、プラットフォーム自身のパスはエッジが答えます。next dev にはそのエッジがいません。upwind dev がローカルでの玄関です。ポートを持ち、自分のパスには自分で答え、それ以外のすべてをプロジェクト自身の Next.js に渡します。開発バンドラー、HMR、エラーオーバーレイは Next.js のものそのままです。

/__upwind
この実行が何であるか。各バージョン、アドレス、プロジェクトのディレクトリー、名指したアダプター。
/__upwind/health
Next.js の準備ができたら 200、起動中は 503。

答えるのはアプリではなく玄関です。だからアプリがまだコンパイル中でも、そのコンパイルが失敗している最中でも答えます。

配信できるもの

アプリが何で出来ていても、1 回のビルドから 1 つのバンドル。

App Router
Server Components とストリーミング。プリレンダー済みのシェルをストレージから配信し、その続きを Function が再開します。
Pages Router
クライアントのルーターが名前で要求する _next/data の出力も、ビルド ID の下でそのまま。
画像
/_next/image をエッジで最適化。形式とサイズはアプリの設定どおりに。
proxy.ts
プロジェクトの proxy はそれ自体が 1 つの Function になり、リクエストがアプリに届く前に動きます。
定期実行
next.config の隣で宣言した cron をビルド時に検査し、通ったものをバンドルに載せます。
静的エクスポート
output: export でも同じバンドルを、サーバー側を空にして書き出します。どの文書もストレージから。
WebAssembly
コンパイル済みモジュールは、それを読むコードの Function と一緒に運ばれます。
next/og
Open Graph 画像は、静的なルートならビルドが、そうでなければ Function が描きます。このページが共有するカードもその 1 つです。

Next.js >=16.2.0 <17

アダプターによる Next.js 自身の出力の書き換えが、この範囲のすべてのリリースと canary に対して検査されています。

1 つのリリース、1 つの世代

ここにあるパッケージのバージョンは互いに足並みを揃えて動き、1 つの署名付きタグから公開されます。プロジェクトを作るものと、それを動かすものが、つねに同じ世代です。

1.0 の前

初期のソフトウェアです。使ってから気づくのではなく、先に書いておきます。

ライセンス: MIT または Apache-2.0(受け取る側が選べます)

貢献の仕方不具合を報告する