Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WorkersでCMSを作ってみないか / Wanna build a CMS with W...
Search
Taiyu Yoshizawa
September 04, 2025
Technology
4
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WorkersでCMSを作ってみないか / Wanna build a CMS with Workers?
Cloudflare Workers Tech Talks in Hokkaido #1 での発表資料
Taiyu Yoshizawa
September 04, 2025
More Decks by Taiyu Yoshizawa
See All by Taiyu Yoshizawa
Flagship という素晴らしいもの / This awesome thing called Flagship
nekoya3
0
2
10分で完全に理解出来る Cloudflare Workers + HyperDrive / Cloudflare Workers + HyperDrive: You Might Understand It in Just 10 Minutes
nekoya3
0
7
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
1
1.9k
北海道新型コロナウイルスまとめサイトでのいろいろなこと
nekoya3
0
460
Other Decks in Technology
See All in Technology
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
450
モダンフロントエンド 開発研修
recruitengineers
PRO
4
800
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
Apache Icebergインフラストラクチャ:ストレージ・カタログ・エンジンの選択肢とClouderaプラットフォームでの実装
tsugiyama
0
120
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
290
強化学習「理論」入門
enakai00
3
3.6k
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
540
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
100
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
150
Reference-Free Image Quality Assessment for Virtual Try-On via Human Feedback
zozotech
PRO
0
640
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
270
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
650
Facilitating Awesome Meetings
lara
57
7.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
490
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
390
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
620
How GitHub (no longer) Works
holman
316
150k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Transcript
WorkersでCMSを作ってみないか ɴᴇᴋᴏʏᴀsᴀɴ
Who are you? ɴᴇᴋᴏʏᴀsᴀɴ Software Engineer @MIERUNE Inc. Co-founder &
Software Engineer @ ReMotive GitHub: @NEKOYASAN Web: nekoyasan.me ←最近更新忘れて、メッチャ焦りました
What is ReMotive? エンタメ系の受託やら、Web制作やら、コンサルやらをして るちっさい2人会社 Workers使っていろいろやってたり、WebRTC x Live2D とか、Streaming Platformを作ってたり
おことわり まだ全然開発途中・サービスインの目処もまだしばらく先です 動くものを見せたかったんですが壊したので見せれません...ごめ んなさい.... 若干初心者向け(かも)
Motivation
None
None
Motivation Newtがサービス終了しちゃう microCMSはそれはそれで若干のつらみがある 金額的なところ 課金対象的なところ 仕様上のところ(画像・iframeまわりとか) Strapiとかを立てるのもそれはそれで辛みが... https://github.com/cloudflare/workerd/pull/4591 もしかしたらなんとかなったのかも...?
Motivation Newtがサービス終了しちゃう microCMSはそれはそれで若干のつらみがある 金額的なところ 課金対象的なところ 仕様上のところ(画像・iframeまわりとか) Strapiとかを立てるのもそれはそれで辛みが... https://github.com/cloudflare/workerd/pull/4591 もしかしたらなんとかなったのかも...? やっぱ自分で作るしかなくない?
Features
必ず欲しい セルフホストできる でもサーバーは持ちたくない... 安価に使える リッチエディタがあるか、Markdownで書ける モデルが自分で設定できる APIでアクセスできたり、画像上げれたり ログインとかメンバー管理とか
あったらいいな 画像最適化 予約投稿 Webhook 補助的なAI アクセス数解析
None
None
Cloudflare Developer platform AI Gateway Analytics Engine Assets Browser Rendering
D1 Durable Objects Hyperdrive Images KV Queues R2 Service Bindings Vectorize Workers for Platforms Workers AI Cache API
Cloudflare Developer platform AI Gateway Analytics Engine Assets Browser Rendering
D1 Durable Objects Hyperdrive Images KV Queues R2 Service Bindings Vectorize Workers for Platforms Workers AI Workflows こんだけあれば Workersでなんとかなるんじゃね
何が嬉しい? インフラを深く考える必要がない それなりに早い 色々周辺ツールが多い 帯域がタダ!!!!!! Cache操作系がやりやすい
Cloudflare Developer platform AI Gateway Analytics Engine Assets Browser Rendering
D1 Durable Objects Hyperdrive Images KV Queues R2 Service Bindings Vectorize Workers for Platforms Workers AI Cache API
Cloudflare Developer platform AI Gateway Analytics Engine Assets Browser Rendering
D1 Durable Objects Hyperdrive Images KV Queues R2 Service Bindings Vectorize Workers for Platforms Workers AI Cache API
構成図
Images Image R2 Master Data Cache D1 Worker Cache Durable
Object KV
Images Image R2 Master Data Cache D1 Worker Cache Durable
Object KV
R2 S3互換のオブジェクトストレージ 今回は画像・動画の保存用 Image 画像の変換とか軽量化ができるやつ 今回は画像最適化用
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 app.get("/*", async (c) => { const object = await c.env.TEST_BUCKET.get(key); if (object === null || !("body" in object)) { return c.text("Object Not Found", 404); } const format = c.req.query("format") || "image/avif"; const width = c.req.query("w") ? Number(c.req.query("w")) : undefined; const response = ( await c.env.IMAGES.input(object.body) .transform({ width: width, }) .output({ format: format as any }) ).response(); return response; })
めっちゃ簡単に画像最適化ができる
Images Image R2 Master Data Cache D1 Worker Cache Durable
Object KV
D1 サーバーレスのSQLデータベース SQLiteベースなので同じクエリが使える KV グローバルに一貫性のあるKey-Valueストア 高速アクセス・低レイテンシが魅力
なぜ使い分けるか? D1 は filter / sortに強いが若干遅い (KV比) KV は 早いが
filter / sort に弱い なので 初回取得時はD1から取得し、条件等と共にTTLをつけてKV に保管する 2回目以降はKVから取得する 書き換えが発生した場合はKVの 中身をclearする 管理画面からはD1をみれるAPIを使う
Images Image R2 Master Data Cache D1 Worker Cache Durable
Object KV
Durable Object 強整合性のあるデータストア WebSocketのコネクション持てたりするおもろいやつ SQLite in Durable Objectとかもある D1 も
Durable Object 上で動いてる(らしい) Alermっていうおもろい産物がある
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 import { DurableObject } from "cloudflare:workers"; export class AlarmExample extends DurableObject { constructor(ctx, env) { this.ctx = ctx; this.storage = ctx.storage; } async fetch(request) { const { seconds } = JSON.parse(request.body) let currentAlarm = await this.storage.getAlarm(); if (currentAlarm == null) { this.storage.setAlarm(Date.now() + 10 * SECONDS); } } async alarm() { // Alerm } }
めっちゃ簡単に予約投稿ができる
つらみ
つらみ D1にTransactionが存在しない KVのデータ変更タイミングでのリセット時にレスポンスが遅 くなる (D1に行くため) マルチテナントどうする問題
つらみ D1にTransactionが存在しない KVのデータ変更タイミングでのリセット時にレスポンスが遅 くなる (D1に行くため) マルチテナントどうする問題 → 何か良い案お持ちの方いたら懇親会とかで...
おまけ
Workers Analytics Engine テレメトリデータをStore / Getすることができるツール Cloudflareの内部で使われてる分析機能とおんなじ 1行につきindexとしての1つの値と、blob(string)が20個、 doubleが20個保管できるテーブルが用意されているイメージ Usage-based
Billingや不正利用検知に使える
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 export default { async fetch(request, env, ctx) { env.ANALYTICS.writeDataPoint({ 'blobs': [ request.headers["CF-Connection-IP"] ], 'doubles': [ 1, 2, 4 ], 'indexes': [ userId, ] }); return new Response("Stored!"); }, };
まとめ 色んなサービスあります CMSつくってます!!! 画像最適化めっちゃ簡単なんでぜひ