Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Serverlessしかなかったので、ブラウザに働いてもらいました
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tanahiro2010
July 22, 2026
Programming
73
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Serverlessしかなかったので、ブラウザに働いてもらいました
https://serverlesslt.connpass.com/event/397581/
ここで登壇したやつ
tanahiro2010
July 22, 2026
More Decks by tanahiro2010
See All by tanahiro2010
Terraformで素数をマイニングしたら、ブロックチェーンが生まれた 〜 Infrastructure as Code。つまりCode。なら何でもできますよね? 〜
tanahiro2010
0
15
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
250
Serverlessのすゝめ
tanahiro2010
0
43
東京で唐揚げを食べたら北海道の地理にたどり着いた件
tanahiro2010
0
31
Googleが発表した新Web標準ドラフト――WebMCP。実際どうなの? IO Extendedで実装・登壇して分かったこと
tanahiro2010
0
110
PHPの命名規則、結局camelCaseとsnake_caseどっちなんだ
tanahiro2010
0
34
Q. 底辺作家でも流行に乗れば舞えますか? A. はい。分析ランキング分析AIを使えば
tanahiro2010
1
77
OSSコミュニティがくれた「人との繋がり」
tanahiro2010
2
470
React Hooksを使いこなせ! ――初心者でも簡単。ポートフォリオ開発で実践するReact講座.pdf
tanahiro2010
0
30
Other Decks in Programming
See All in Programming
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
240
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
110
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Are APIs Still Relevant in the AI Era?
soyuka
0
460
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
970
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
SREの越境 / SRE Collaboration
y0hgi
2
300
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
480
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
160
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
180
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
380
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
Building Flexible Design Systems
yeseniaperezcruz
330
41k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
We Have a Design System, Now What?
morganepeng
55
8.4k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
Optimizing for Happiness
mojombo
378
71k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
Believing is Seeing
oripsolob
1
240
Transcript
Serverlessしかなかったので、ブラウザに働いても らいました PoWでランキングを守ってみた話 Serverless LT 1
自己紹介 田中博悠 / tanahiro2010 三田学園高等学校 1年生 TypeScript / Ruby Web
/ CLI 個人開発 OSSに少し貢献 小説も書く 2
皆さん 自分の謎のこだわりと 環境制限のせいで 暴走したこと、ありますか? 3
僕はあります ランキングを作りたかっただけなんです 4
作ったもの 「なんでも問題集」 匿名で問題を投げるサイト 技術 採用 Frontend Next.js Database Neon(PostgreSQL) Hosting
Vercel 全部サーバーレス 5
機能は素朴 誰でも匿名で 問題を作って投げる場所 問題の作成 公開 解く ランキング 力を入れたのは、解く場所とランキング つまり今回の本題。 6
問題 解かれた数ランキングを作りたい ぶっちゃけ、素直に増やすと死ぬ POST /solve 解いた扱い → while(true) fetch連打 →
ランキング終了 数字が壊れる APIだけだと弱い 7
どうする? ログイン? CAPTCHA? Turnstile? Rate Limit? どれも重い 8
サーバーレスの縛り 重い処理は無理 CPU時間が怖い DB直撃も怖い 課金も怖い でもログインは嫌 9
現実はもっと泥 起動待ちに怯える 権限設定で詰む ログ追跡がつらい 課金グラフを見る 夜中に眉間が寄る 10
結論 ブラウザに働かせる 11
以前Discord Botで PoWを書いた記憶が蘇った。 PoWで殴る 12
全体の流れ Browser お題を取る → PoW計算 nonce探し → Verify 結果を投げる →
Server検証 一瞬で見る → ランキング更 新 通れば加算 13
Challenge取得 GET /api/works/:id/challenges 返すもの prefix token(JWT) 端末で難易度を変える PC スマホ 14
検証 POST /api/works/:id/challenges/:challengeId 送信 nonce / token → サーバーで検証 条件だけ見る
→ ランキング更新 成功だけ反映 15
完璧? UA偽装 Bot突破 端末判定は雑 本気の攻撃は無理 でも、今回の狙いは 大量送信のコストを上げる ここだけ。 もちろん穴はある 16
PoWを書きたかった 実は…… これが理由の半分くらい。 個人開発だからこそ 「面白そう」 で突っ込めるのが最高。 17
サーバーレスだから 「できない」 ではなく どう実現する? 18
ご清聴ありがとうございました GitHub・質問などぜひ 19