SlideShare a Scribd company logo
1 of 26
Download to read offline
stripe-rubyで
サブスクリプションを
実装して得た知見
2019/04/26(金) JP_Stripes (Stripe ユーザーグループ)
Tokyo Vol.12 -- プレミアムキャッシュレスフライデーナイト
@isao_x
概要(1/3)
直近の案件でstripe-rubyを使って定期支払いを実
装してみました。
概要(2/3)
ググって出てくる実装例は簡易的なものが多く、商
用利用に耐えうるものはあまり見当たらなかった
ので、そのへんを考えて設計・実装したお話しま
す。
概要(3/3)
※この会場に来ているStripe経験者の方は既にご
存知の内容かもしれません。
もっといい方法を知っている方は教えていただける
と嬉しいです。
話すこと⭕
・サブスクリプション仕様
・どこにデータを持つか?
・DBで保持するデータ
・モデルの構造
話さないこと❌
・なぜStripeを選んだか
・Stripeでサブスクリプションを実装する際の前提
知識
・処理の流れ
話す人
いさお @isao_x
フリーランスエンジニア
ネットワーク→Web→アプリ
Kotlin, Vue.js, Rails, Laravel...
プロダクト要件
・toC会員制iOS/Androidアプリケーション * 3
・無料会員/有料会員がある(無料会員は機能が
制限され、有料会員はすべての機能が使える)
・訳あってWebで課金できるようにした
技術スタック
・Ruby 2.5.0
・Ruby on Rails 5.2.0
・stripe/stripe-ruby 4.12.0
・.erbテンプレート / checkout.js
サブスクリプション仕様(1/3)
・商品:月額有料会員
・プラン:[通常の月額有料会員, キャンペーンによ
る初月無料の月額有料会員]
・定期支払い:1購入につき1プラン1商品
サブスクリプション仕様(2/3)
・プランおよび商品はアプリケーションの管理画面
から管理者が作成する
(ユーザーの操作によってアプリケーション側で新
たに作成されることはない、Stripe管理画面からも
作成しない)
サブスクリプション仕様(3/3)
・1ユーザーにつき、顧客は1件しか作成されない
・顧客は購入済み且つ有効期限内の商品を再度
購入することはできない(異なるプランであっても)
どこにデータを持つか?(1/3)
・基本方針として、すべての実データ(Value)を
Stripeで保持する
・アプリケーション側ではStripeにリクエストする際
に必要なID(Key)のみをRDBに保持する
どこにデータを持つか?(2/3)
・基本方針として、すべての実データ(Value)を
Stripeで保持する
-> セキュリティリスクを自社で負わない
どこにデータを持つか?(3/3)
・アプリケーション側ではStripeにリクエストする際
に必要なID(Key)のみをRDBに保持する
-> Stripe APIの仕様上、IDで指定する必要がある
ため(全件取得もできるが、)
Stripe APIの仕様
・各リソースをID指定で1件取得
・各リソースを全件取得(リソースごとに絞り込みの
オプションが用意されている)
DBで保持するデータ(1/5)
・顧客:stripe_customers
・定期支払い商品:stripe_products
・定期支払い:stripe_subscriptions
・定期支払いアイテム:stripe_subscription_items
Stripe顧客テーブル
DBで保持するデータ(2/5)
Stripe商品テーブル
DBで保持するデータ(3/5)
Stripe定期支払いテーブル
DBで保持するデータ(4/5)
Stripe定期支払いアイテムテーブル
DBで保持するデータ(5/5)
モデルクラス
・顧客:StripeCustomer
・定期支払い商品:StripeProduct
・定期支払い:StripeSubscription
・定期支払いアイテム:StripeSubscriptionItem
モデルクラス > インナークラス
・StripeCustomer > StripeSideCustomer
・StripeProduct > StripeSideProduct
・StripeSubscription > StripeSideSubscription
さいごに..(1/3)
はじめてのStripeの実装で私が悩んだところは主にこ
の辺です。
LTの枠では伝えきれなかったことなどたくさんあるの
で、この後の懇親会やSNSでお話できたら良いなと思
います。
さいごに..(2/3)
Stripeは開発体験がとても良く、また使いたいし、他の
開発者にもおすすめしたいです!!
さいごに..(3/3)
ご静聴ありがとうございました!!!!

More Related Content

What's hot

ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
Moriharu Ohzu
 

What's hot (20)

20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
クラウドにおける Zero Trust の考え方 PALO ALTO NETWORKS DAY 2019 | TOKYO
クラウドにおける Zero Trust の考え方 PALO ALTO NETWORKS DAY 2019 | TOKYOクラウドにおける Zero Trust の考え方 PALO ALTO NETWORKS DAY 2019 | TOKYO
クラウドにおける Zero Trust の考え方 PALO ALTO NETWORKS DAY 2019 | TOKYO
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す DDDをScrumで廻す あるいは ScrumをDDDで廻す
DDDをScrumで廻す あるいは ScrumをDDDで廻す
 
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 
システムアーキテクト~My batis編~
システムアーキテクト~My batis編~システムアーキテクト~My batis編~
システムアーキテクト~My batis編~
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
 
おすすめVimプラグインまとめ
おすすめVimプラグインまとめおすすめVimプラグインまとめ
おすすめVimプラグインまとめ
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 

Similar to stripe-rubyで サブスクリプションを 実装して得た知見

Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-
Jun Saeki
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
Mie Mori
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
guest17bfe2
 

Similar to stripe-rubyで サブスクリプションを 実装して得た知見 (20)

Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
 
Java script testing framework for around html5 studies-
Java script testing framework for  around html5 studies-Java script testing framework for  around html5 studies-
Java script testing framework for around html5 studies-
 
HAZOP, Safety and Security, SWEST at Gero Gifu pref. Japan
HAZOP, Safety and Security, SWEST at Gero Gifu pref. JapanHAZOP, Safety and Security, SWEST at Gero Gifu pref. Japan
HAZOP, Safety and Security, SWEST at Gero Gifu pref. Japan
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみたOpenCVとSAT4Jを使ってナンプレに挑戦してみた
OpenCVとSAT4Jを使ってナンプレに挑戦してみた
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
 
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPANSAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
 
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows AzureB 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
 
エンジニア勉強会_DECIDE
エンジニア勉強会_DECIDEエンジニア勉強会_DECIDE
エンジニア勉強会_DECIDE
 
3D Photo Tool by Ruby/Sinatra + JavaScript
3D Photo Tool by Ruby/Sinatra + JavaScript3D Photo Tool by Ruby/Sinatra + JavaScript
3D Photo Tool by Ruby/Sinatra + JavaScript
 
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオンSageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
SageMaker Neoの可能性について - 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
 
sitTokyo2022_Dev_05_Kawanabe.pptx
sitTokyo2022_Dev_05_Kawanabe.pptxsitTokyo2022_Dev_05_Kawanabe.pptx
sitTokyo2022_Dev_05_Kawanabe.pptx
 
Yasuhiko Tokunaga DevRel_meetup_201703
Yasuhiko Tokunaga DevRel_meetup_201703Yasuhiko Tokunaga DevRel_meetup_201703
Yasuhiko Tokunaga DevRel_meetup_201703
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 
マルチデバイス時代の高速化
マルチデバイス時代の高速化マルチデバイス時代の高速化
マルチデバイス時代の高速化
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介
 
吾輩はコンテンツ事業者である 楽天編
吾輩はコンテンツ事業者である 楽天編吾輩はコンテンツ事業者である 楽天編
吾輩はコンテンツ事業者である 楽天編
 
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
 

stripe-rubyで サブスクリプションを 実装して得た知見