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
9
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
The Present and Future of CJK Rendering in MapLibre
nekoya3
0
7
Kartore: A Style Editor and Toolkit for MapLibre
nekoya3
0
9
Kartore: Maplibre のための Style Editor とその Toolkit
nekoya3
0
26
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
12
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
1
1.9k
北海道新型コロナウイルスまとめサイトでのいろいろなこと
nekoya3
0
470
Other Decks in Technology
See All in Technology
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
240
Bet AI Day 2026丨AIを「使う」から、AIが「働く」へ ― LayerXが進める「組織AI」の社会実装
layerx
PRO
3
2.3k
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
110
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
230
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
320
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
6
7.2k
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
130
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
250
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
130
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
250
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
270
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
290
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
Git: the NoSQL Database
bkeepers
PRO
432
67k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
260
A Soul's Torment
seathinner
7
3.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
The Invisible Side of Design
smashingmag
301
52k
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つくってます!!! 画像最適化めっちゃ簡単なんでぜひ