---
title: コスパいいと思ってCloudflareでIaC化したら大変だった話
tags: 
author: [ゆうと](https://www.docswell.com/user/yuuto400sf)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LJLMW35QER.jpg?width=480
description: コスパいいと思ってCloudflareでIaC化したら大変だった話 by ゆうと
published: April 24, 26
canonical: https://www.docswell.com/s/yuuto400sf/ZL3GR9-2026-04-24-221131
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LJLMW35QER.jpg)

×
×
N
コスパいいと思って
Cloudflare で IaC 化したら
大変だった話
Yokohama North Meetup #15


# Page. 2

![Page Image](https://bcdn.docswell.com/page/47MY9DRK7W.jpg)

自己紹介
ゆうと
株式会社ゼンビット 所属
Webエンジニアなんでも屋
フロント、バック、インフラを担当してます。
趣味で IoT も触ってます
🎣 釣りとキャンプが好きです
最近ハマっているもの
Hono / vinext など


# Page. 3

![Page Image](https://bcdn.docswell.com/page/P7R9G4R6E9.jpg)

まず聞いてください、CF こんなに安い＆激アツ
他社と比較したざっくり料金感（2026年時点・概算）
項目
Cloudflare
その他インフラ
サーバーレス
無料 10万 req/日
従量課金
ストレージ
R2: $0.015/GB + エグレス無料
S3: $0.023/GB + 通信費
LLM推論
有料最低ライン
Workers AI (Llama 3.3 70B):
$0.29 / $2.25 per 1M tok (in / out)
$5/月 (Paid)
エコシステム＆vinext が神
Bedrock (Claude Sonnet 4.5):
$3 / $15 per 1M tok
≒ 約 10 倍差
青天井
新Webプラットフォーム「Void」
Workers, R2, KV, Workers AI... 全部一箇所で完結。さらに Next.js (App Router)
最近発表された Void との親和性も抜群。Cloudflare のエッジインフラと組み合わせる
すら Workers 上で動かせる神ツール vinext も登場。全部乗せ不可避な激アツ状
ことで、これまでにないゼロレイテンシの体験が作れる。まさに今がアツい！🚀


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PJXQX2RD7X.jpg)

これだけあると、IaCで管理したくなる
今回のスタックは基本的にぜんぶ Cloudflare
Workers (Next.js / Hono)
R2 (画像・PDF)
KV (セッション)
DNS / カスタムドメイン
Workers AI
+ Neon (DBだけ外)
管理対象のリソースがいっぱい…
ダッシュボードでポチポチ設定するのはツライ！
だから Pulumi (IaC) を導入
TypeScript で宣言的にインフラを書けば、
いい感じに依存関係を解決してデプロイしてくれる。


# Page. 5

![Page Image](https://bcdn.docswell.com/page/3JK9WMRDJD.jpg)

IaC 化の理想と、無情な現実
もちろん Pulumi で一元管理したい
new cloudflare.WorkersScript(&quot;api-worker&quot;, {
name: &quot;nippou-api&quot;, content: fs.readFileSync(&quot;dist/worker.js&quot;),
bindings: [{ name: &quot;SESSION_KV&quot;, type: &quot;kv&quot;, namespaceId: kv.id }],
});
しかしデプロイすると…
error: 400 Bad Request
Uncaught Error:
No such module &quot;node:os&quot;
そもそも Workers は Node.js じゃない（V8 isolates）
node:os
/ node:fs みたいな Node 組み込みモジュールは動かない
Pulumi (API 直叩き)
Wrangler CLI


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LE3W1Y8PE5.jpg)

苦渋の解決策: Pulumi から Wrangler CLI を呼ぶ
A. IaC を諦める → 依存関係が追えなくなるので却下
B. Pulumi から Wrangler を呼び出す ← こっち
@pulumi/command の local.Command (ローカルシェルを Pulumi リソースとして実行)
これを使って、Pulumi のデプロイパイプラインから シェル経由で npx wrangler deploy を叩く。 Wrangler 呼び出しも IaC グラフに
組み込めるので、一元管理は保てる。
ただし Pulumi の Output 値（KV ID / シークレット等）は非同期解決、一方 Wrangler CLI は --config &lt;ファイル&gt; しか受け取らない
→ 中間ファイルを毎回書き出して渡すしかない
Pulumi
wrangler.generated.json
Wrangler CLI
(非同期 Output)
毎回書き出す物理ファイル
(ファイル入力)


# Page. 7

![Page Image](https://bcdn.docswell.com/page/8EDKX5M37G.jpg)

さらなる混沌: vinext の登場
フロントの Next.js も Workers に載せたい。
vinext
Next.js App Router を Cloudflare Workers で SSR できる神ツール
これを導入したら…
vinext が wrangler.jsonc を
ビルド時に勝手に生成してくる


# Page. 8

![Page Image](https://bcdn.docswell.com/page/V7PKPGRPJ8.jpg)

同じ 1 枚の設定ファイルを、代わる代わる触る
1
vinext build が
wrangler.jsonc
を書く
2
Pulumi がそのファイルを
&quot;上書き&quot;
(Pulumi 管理の KV ID や 環境変数等を追記)
3
vinext deploy --skip-build がそれを読む


# Page. 9

![Page Image](https://bcdn.docswell.com/page/2JVV26RVJQ.jpg)

違和感の正体
IaC の境界
リソースと
依存関係
一致しない隙間
wrangler.jsonc
CLI の境界
設定ファイルと
実行コマンド
気持ち悪さ ＝ 悪い設計
気持ち悪さ ＝ レイヤー境界の具現化


# Page. 10

![Page Image](https://bcdn.docswell.com/page/5EGLRNM1JL.jpg)

学び: &quot;コスパ&quot; は 2 軸ある
1. 料金のコスパ (インフラ費用)
= Cloudflare、圧倒的に良い
2. 実装のコスパ (開発・運用工数)
= エコシステムの 隙間 で減点されがち
IaC 化のコストは &quot;IaC 側の言語&quot; じゃなく
&quot;ツール境界の摩擦&quot; に現れる
分かった上でやれば、それでも Cloudflare + IaC は強い。


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JQYVQRN7P.jpg)

まとめ
■ Cloudflare は料金で圧勝（エグレス無料）
■ だが IaC で覆うと境界が現れる
■ 境界は「中間設定ファイル」として具現化
■ vinext を挟むと3人の手を経由する奇妙な構成に
それでも採用し続ける価値はある！
ご清聴ありがとうございま
した
質問どうぞ！


