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
後付けで 従量課金プランの 提供を開始した話 / 20210609-jp_stripes
Search
Hidetaka Okamoto
June 09, 2021
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
後付けで 従量課金プランの 提供を開始した話 / 20210609-jp_stripes
JP_Stripes Online
Hidetaka Okamoto
June 09, 2021
More Decks by Hidetaka Okamoto
See All by Hidetaka Okamoto
OpenAI APIで API Changelogを要約してみた話 / chatgpt-osaka-1
hideokamoto
0
730
コミュニティ運営から 中の人に変わって感じたこと
hideokamoto
0
150
Developerが Developer Advocateになった話 / dev-rel-meetup-tokyo-71
hideokamoto
0
400
Jamstack開発者のための App Runner入門
hideokamoto
1
560
WordPressでの webサイト制作2022 / ngk2022s
hideokamoto
0
500
JavaScript(TypeScript)で メディアサイトを インフラから構築する方法 / jsconf-jp-2021
hideokamoto
2
4.4k
AWS上でStripeを利用したアプリをより安全にデプロイする方法 /jaws-pankration-2021
hideokamoto
1
250
Shifter Headlessと Headless WordPressの紹介
hideokamoto
0
2.3k
Stripe & Next.js + AWS Amplify で会員 + 定期課金機能 / JP_Stripes20210903
hideokamoto
7
3.3k
Other Decks in Technology
See All in Technology
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
1
310
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
10
3.2k
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
310
SREでアラート疲れを 解決しよう!
kairim0
1
210
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
210
自分で立ててみるLLMサービス
y_sera15
0
130
自主式軟體工廠
philipz
0
230
Futexes the good, the bad, the ugly
ennael
PRO
0
130
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
420
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
140
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
150
Featured
See All Featured
The Language of Interfaces
destraynor
162
27k
The agentic SEO stack - context over prompts
schlessera
0
970
We Have a Design System, Now What?
morganepeng
55
8.4k
Ruling the World: When Life Gets Gamed
codingconduct
0
390
Building AI with AI
inesmontani
PRO
1
1.3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
910
Practical Orchestrator
shlominoach
192
12k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
420
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
540
A designer walks into a library…
pauljervisheath
211
25k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Transcript
ޙ͚Ͱ ैྔ՝ۚϓϥϯͷ ఏڙΛ։࢝ͨ͠ JP_Stripes Online Hidetaka Okamoto #JP_Stripes
TL;DR • StripeͰैྔ՝ۚϓϥϯͷఏڙͱͯ؆୯ • / ྉۚͷొͱɺSubscriptionͷ࡞ɺ͋ͱ༻ྔͷొ • ෳͷIntervalʢظؒʣΛఏڙ͢Δ߹ɺैྔ՝ۚͷճऩ࣌ظʹҙ •
Stripe BillingͷྉۚλΠϓ͕෯͍ͷͰɺϏδωεاըʹ͍͔ͦ͏ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
CDNసૹྔͷ ैྔ՝ۚΦϓγϣϯఏڙ։࢝ #JP_Stripes https://www.getshifter.io/ja/cdn-pay-as- you-go-option-is-available/
#JP_Stripes • ֹ݄Ͱͷٻ • 1GB͋ͨΓ0.18 USD • UIͰʮΦϯɾΦϑʯͷΈ
ͳͥैྔ՝ۚʁ • σʔλసૹྔແݶʹ૿͑ΔՄೳੑ͕͋Δ • ࠷্Ґϓϥϯͷར༻Ͱա͢ΔϢʔβʔ͕ొ • ͜Ε·ͰʮXGB = $YʯͷΑ͏ͳݸผܾࡁΛ݄ຖʹ͍ͬͯͨ •
ʮͲΕ͚ͩফඅ͢Δ͔ʯͷ༧ଌ͕Ϣʔβʔʹඞཁ • ʮ͔͑ͯΒܖʯͰαΠτμϯ͕Ұ࣌తͰൃੜ͢Δ • ʮ͚ͬͨͩٻʯͷΦϓγϣϯͰɺ ༧ଌͷखؒͱμϯϦεΫΛճආ #JP_Stripes
શ෦ैྔ՝ۚʹ͠ͳ͍ͷʁ • Shifterᴈ໌ظɺैྔ՝ۚͩͬͨ • Stripe Billing͕ैྔ՝ۚରԠલͷྗٕ࣮ • ʮͲΕ͚ͩٻ͞ΕΔ͔Θ͔Βͳ͍ʯ͕ʮબΕͳ͍ཧ༝ʯʹ • ʮ݄16υϧɺແྉϓϥϯ͋Γʯͷํ͕ΘΔࢢʹ͍ͨ
• ैྔ՝ۚ => ύοέʔδՁ֨ => ύοέʔδ + ैྔ՝ۚ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
#JP_Stripes • plan(price)Ͱొ • 1୯Ґ = 1GBʹઃఆ • ૯ܭʮ࠷େʯΛར༻
Subscriptionͷૢ࡞ී௨ͷPriceͱશ͘ಉ͡ const subscription = await stripe.subscriptions.create({ customer: 'cus_XXXXX', items: [
{price: 'price_XXXXXXXX'}, ], }); const subscription = await stripe.subscriptions.update(‘sub_xxxx’, { items: [ {price: 'price_XXXXXXXX'}, ], }); #JP_Stripes
ैྔ՝ۚ Subscription create/update ͚ͩͰ1ԁٻͰ͖ͳ͍ #JP_Stripes
createUsageRecordͰʮͬͨྔʯΛొ͢Δ const usageRecord = await stripe.subscriptionItems .createUsageRecord( ‘si_XXXXX', { quantity:
100, timestamp: 1571252444, action: ‘set’ } ); #JP_Stripes
setͩͱ૯ྔɺincrementͩͱՃࢉͰॲཧ͞ΕΔ const usageRecord = await stripe.subscriptionItems .createUsageRecord( ‘si_XXXXX', { quantity:
100, timestamp: 1571252444, action: ‘set’ } ); #JP_Stripes
༻ྔͷूܭํ๏ 1. Amazon EventBridgeͰAWS StepFunctionsΛݺͼग़͢Πϕϯτ࡞ 2. ରͷpriceΛؚΉSubscriptionΛશऔಘ 3. subscriptionຖʹฒྻͰूܭॲཧΛ࣮ࢪ 4.
ूܭ݁ՌΛAWS DynamoDBʹอଘ 5. StripeͷUsageRecords APIʹར༻ྔΛొ #JP_Stripes
Price IDΛ͑ʮରsubscriptionʯ͚ͩҾ͚Δ const subscriptions = await stripe.subscriptions .list({ price: ‘price_xxx’
}); #JP_Stripes
100݅͑ΔͷͰɺ࣮ࡍʹ࠶ؼతͳ࣮ʹ async listSubscriptionRecuecive(priceId, items = [], startingAfter) { const {data:
subscriptions} = await stripe.subscriptions .list({ starting_after: startingAfter, price: priceId, }) const mergedSubscriptions = [...items, ...subscriptions] if (subscriptions.length < 1) { return mergedSubscriptions } const lastSubscriptionId = subscriptions[subscriptions.length - 1].id return listSubscriptionRecuecive(planId, mergedSubscriptions, lastSubscriptionId) } #JP_Stripes
༻ྔGBͰϢʔβʔʹදࣔ • ʮϕʔεϓϥϯͷ༻ྔΛ͍͑ͯΔ࣌ʯ͚ͩٻ͞ΕΔੑ࣭ • ʮԿGB͍ͬͯΔ͔ʯ͕Φϓγϣϯͷٻൃੜલ͔ΒॏཁʹͳΔ • ୯Ձมߋෳྉۚͷఏڙ༧ఆͳ͍ͨΊɺ subscriptionItems.listUsageRecordSummaries͍ͬͯͳ͍ • DynamoDBʹهͨ͠༻ྔGBΛදࣔ͠ɺ
ඞཁͳΒ$0.18/GBΛϑϩϯτͰܭࢉ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
ैྔ՝ۚΦϓγϣϯɺ ϗεςΟϯάͷSubscriptionͱ ผʹSubscriptionΛ࡞ #JP_Stripes
ैྔ՝ۚͩΖ͏͕Stripe BillingͰͷѻ͍ಉ͡ const subscription = await stripe.subscriptions.create({ customer: 'cus_XXXXX', items:
[ {price: 'price_XXXXXXXX'}, ], }); const subscription = await stripe.subscriptions.update(‘sub_xxxx’, { items: [ {price: 'price_XXXXXXXX'}, ], }); #JP_Stripes
ͨͩ͠ɺ Intervalʢظؒʣͱ Currencyʢ௨՟ʣ ౷Ұ͠ͳ͍ͱμϝ #JP_Stripes
FYI: ଟ௨՟Subscription͔͢͠Δͱɾɾɾʁ https://stripe.com/docs/invoicing/additional-features/multiple-currencies
ෳͷInterval͕ొ͢ΔͨΊɺ༷ͱͯ͠ಠཱ • ຊདྷͳΒɺ1 Subscriptionʹ·ͱΊͨํָ͕ • ֹ݄ͨͩ͠ <-> ֹͷΓସ͕͑͘͠ͳΔ • ֹͷैྔ՝ۚΦϓγϣϯग़ͨ͘͠ͳ͔ͬͨ
• ಠཱͨ͠Subscriptionʹ͢Δ͜ͱͰɺInterval ( Currency )ڝ߹Λճආ • DynamoDBʹattributeΛ1͚ͭͨͩ͠Ͱղܾ #JP_Stripes
ٻλΠϛϯάΛἧ͑ΔͨΊͷ billing_cycle_anchor await stripe.subscriptions.create({ customer: customerId, items: [{ price: priceId,
}], billing_cycle_anchor: moment().add(1, ‘month’) .startOf('month').unix() }) #JP_Stripes
ࠓఏڙ͍ͯ͠ΔSubscriptionʹ ैྔ՝ۚΛՃ͢Δʹ • Currency / Interval͕1ͭͳΒͦͷ··subscriptionʹՃָ͕ • ෳ͋Δ߹ɺʮैྔ՝ۚͰग़͢currency / intervalʯΛܾΊΑ͏
• ରԠͨ͠PriceΛશͯἧ͑ͳ͍ͳΒɺಠཱͨ͠Subscription͕ແ • ٻλΠϛϯάಉ͡λΠϛϯάʹἧ͓͑ͯ͘ͷ͕ • ɾɾɾͱ͍͏͜ͱ͕͋ΔͷͰɺbilling_cycle_anchor͓ͬͯ͜͏ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑
ͯͨ #JP_Stripes
ஈ֊తͳՁ֨ઃఆ
ྔϕʔεͷՁ֨ઃఆ
ύοέʔδ୯Ґͷྉۚମܥ 10Ϣχοτ·Ͱ$10 #JP_Stripes
࡞ΕΔྉۚମܥͷ छྨ͕૿͍͑ͯΔ ↓ ఏڙͰ͖ΔϏδωεͷछྨ͕ ૿ͤΔΑ͏ʹͳΔ
ϝʔϧͰߋ৽ใΛ ͬ͟ͱݟͰ͖Δ Developer Digest #JP_Stripes
https://stripe.dev/
StripeΛཧղ͢Δ StripeΛ͍͜ͳ͢ ↓ ఏҊɾ࣮Ͱ͖Δ ΦϯϥΠϯϏδωεͷ෯͕͕Δ
[એ] 6/26 WordCamp Japan 2021ͰWP with SaaS https://japan.wordcamp.org/2021/session/autumn02/
Thanks! • StripeͰैྔ՝ۚϓϥϯͷఏڙͱͯ؆୯ • / ྉۚͷొͱɺSubscriptionͷ࡞ɺ͋ͱ༻ྔͷొ • ෳͷIntervalʢظؒʣΛఏڙ͢Δ߹ɺैྔ՝ۚͷճऩ࣌ظʹҙ •
Stripe BillingͷྉۚλΠϓ͕෯͍ͷͰɺϏδωεاըʹ͍͔ͦ͏ #JP_Stripes