WindowsでWrangler Pages Deployが落ちる時は非ASCIIのcwdを疑う
Wrangler Pages deploy は、アップロード前に落ちることがあります。
Windowsでは、原因がソースコードでもCloudflare設定でもなく、Wranglerプロセスの作業ディレクトリである場合があります。作業ディレクトリに日本語などの非ASCII文字が含まれると、ネイティブ依存の処理がアップロード前にクラッシュすることがあります。
症状: バージョン表示の直後に止まる
典型的には次の形です。
npx wrangler pages deploy out --project-name my-siteを実行する- Wrangler のバージョン表示は出る
- upload progress が出ない
- Git Bashでは
Segmentation faultになる - PowerShellでは exit code
1だけになる npm run buildは成功している
通常のPagesエラーなら、ファイル読み込み後やCloudflare API応答後に説明が出ます。ここではその前に落ちます。
out/ だけ移動しても直らない理由
出力先だけをASCIIパスにコピーしても、Wrangler自体を元の非ASCIIパスから起動していると落ちることがあります。
deploy対象パスと、プロセスのcurrent working directoryは別です。確認します。
Get-Location
Test-Path out
npx wrangler pages deploy out --project-name my-site
Get-Location に日本語パスが含まれ、upload progress の前に落ちるなら、アプリコードを直す前にcwdを疑います。
ASCIIの一時フォルダから起動して確認する
手動確認はこうです。
$stage = Join-Path $env:TEMP ("wrangler-pages-" + [DateTimeOffset]::Now.ToUnixTimeMilliseconds())
New-Item -ItemType Directory -Path $stage | Out-Null
Copy-Item -Recurse out\* $stage
Push-Location $stage
npx wrangler pages deploy . --project-name my-site
Pop-Location
これで成功するなら、Cloudflareプロジェクトや静的出力ではなく、Wranglerを起動した場所が原因です。
スクリプト化する
毎回手で移動せず、build後にASCIIの一時ディレクトリへコピーし、そこをcwdにしてWranglerを起動します。
const fs = require("fs");
const os = require("os");
const path = require("path");
const { spawnSync } = require("child_process");
const outDir = path.join(process.cwd(), "out");
const stageDir = path.join(os.tmpdir(), `wrangler-pages-${Date.now()}`);
fs.cpSync(outDir, stageDir, { recursive: true });
try {
const result = spawnSync(
"npx",
["wrangler", "pages", "deploy", ".", "--project-name", "my-site"],
{ cwd: stageDir, stdio: "inherit", shell: process.platform === "win32" },
);
process.exitCode = result.status ?? 1;
} finally {
fs.rmSync(stageDir, { recursive: true, force: true });
}
重要なのは、artifactを移すだけではなく、Wrangler child process のcwdもASCIIパスにすることです。
デプロイ後に確認する
成功表示だけで終わらせず、Cloudflare側と公開URLを確認します。
npx wrangler pages deployment list --project-name my-site
Invoke-WebRequest https://my-site.pages.dev/ -UseBasicParsing
build失敗、Wrangler起動前クラッシュ、Cloudflare APIエラー、公開URLの反映待ちは別物です。まとめて「デプロイ失敗」と扱うと、不要なリトライやコード修正につながります。