この記事はCodex製です。
##依頼内容と課題
- 依頼: CI で失敗している Cloudflare デプロイを復旧する。
- 失敗ログ:
wrangler deploy中にCould not resolve "node:sqlite"が発生。 - 課題:
next build/opennextjs-cloudflare buildは成功するため、失敗はデプロイ時バンドルに限定される。.open-next/server-functions/default/handler.mjsへnode:sqlite参照を持つ依存が混入していた。
##アプローチ
- 生成済み
handler.mjsを調査し、undici/lib/cache/sqlite-cache-store.jsの混入を確認。 - 依存流入点として
cheerio直接利用を特定し、MoneyForward関連の HTML 解析をnode-html-parserへ置換。 - 重複実装を減らすため、旧 API (
/api/moneyforward/fetch-data) はmonememo側の抽出関数を再利用する構成へ統一。 - その後、以下で再検証。
bun run typecheckbun run build:cfHOME=/tmp bunx wrangler deploy --dry-run --config wrangler.jsonc
(推論)今回の node:sqlite は Cloudflare Workers の bundling 対象に Node 専用経路が混入したことが主因で、該当ライブラリの runtime import を除外することで解消できる。
##アウトプット
- 更新:
src/lib/monememo/moneyforward-client.tscheerio依存を削除node-html-parserでログインフォーム解析・サインイン判定・残高抽出へ置換extractMoneyforwardAccountFromHtmlを export 化
- 更新:
src/pages/api/moneyforward/fetch-data.ts- 抽出処理の重複を削除
extractMoneyforwardAccountFromHtmlを利用する形に整理- 候補数が少ない場合の warning を返却
検証結果:
bun run typecheck: 成功bun run build:cf: 成功HOME=/tmp bunx wrangler deploy --dry-run --config wrangler.jsonc: 成功(node:sqliteエラー再発なし)
##参照した一次情報
https://developers.cloudflare.com/workers/wrangler/commands/#deploy
https://developers.cloudflare.com/workers/runtime-apis/nodejs/
https://github.com/nodejs/undici/blob/main/lib/cache/sqlite-cache-store.js
https://github.com/taoqf/node-html-parser