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
後付けで 従量課金プランの 提供を開始した話 / 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
710
コミュニティ運営から 中の人に変わって感じたこと
hideokamoto
0
140
Developerが Developer Advocateになった話 / dev-rel-meetup-tokyo-71
hideokamoto
0
380
Jamstack開発者のための App Runner入門
hideokamoto
1
550
WordPressでの webサイト制作2022 / ngk2022s
hideokamoto
0
490
JavaScript(TypeScript)で メディアサイトを インフラから構築する方法 / jsconf-jp-2021
hideokamoto
2
4.4k
AWS上でStripeを利用したアプリをより安全にデプロイする方法 /jaws-pankration-2021
hideokamoto
1
250
Shifter Headlessと Headless WordPressの紹介
hideokamoto
0
2.2k
Stripe & Next.js + AWS Amplify で会員 + 定期課金機能 / JP_Stripes20210903
hideokamoto
7
3.3k
Other Decks in Technology
See All in Technology
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
8
2.2k
『モンスターストライク』 の運営に伴走する! データ民主化への 解析グループの3つのアプローチ
mixi_engineers
PRO
0
220
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
個人OSSが、机の上から世界に広がるまでの話
shinyasaita
1
330
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
5
930
AIが自社のTableauを操作する世界へ:Tableau MCP超入門
tbtykk
0
110
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
280
QAタスクをスキル化したいときに考えること
aomoriringo
0
160
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
210
サイバー捜査員研修(前半)
nomizone
1
1.4k
MIRU 2026 チュートリアル
keisuke198619
0
740
変化の早いClaude Codeを 書籍に落とし込む
oikon48
6
1.2k
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
3
3.5k
Are puppies a ranking factor?
jonoalderson
1
3.7k
Mind Mapping
helmedeiros
PRO
1
300
Automating Front-end Workflow
addyosmani
1370
210k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
How STYLIGHT went responsive
nonsquared
100
6.2k
Navigating Team Friction
lara
192
16k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
370
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
680
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