Stripe APIのバージョンを2012年から5年分アップデートした話
-.icon
背景
とあるSaaS(以下「当該Webサービス」)の実装に携わるようになって早4年が経ち、いよいよ新しい課金体系を構築する運びとなりました。当該Webサービスでは、Stripeというサブスクリプションビジネスに最適な決済プラットフォームを利用しています。 今までの課金プランはシンプルに、月額・年額の2択でした。ここに更に、座席課金や従量課金といった新たな収益化の手段を追加します。
Stripeの場合、このような複雑な課金体系はProductを利用して実現できます。 しかし、当該WebサービスでいざProductを利用しようとすると、上手く動きません。調べた結果、稼働してるStripe APIバージョンは2012年末相当のもので、Productが存在しない時期のものでした。つまり古すぎるという話です。本稿では、当該Webサービスが利用していた2012年末のStripe APIを、Productが実装済みのバージョンまで順にアップデートしていった方法について解説します。
余談
Q: なぜ今まで古いStripe APIを使い続けていたのか?
A: アップデートの必要が無かったから
Stripeは素晴らしい決済プラットフォームで、APIバージョンが古いままでも動き続けてくれます。また、常に最新のセキュリティ対策が反映されているので、そのまま使い続けられます。したがって、使いたい機能が新しいAPIにしか存在しない場合を除いて、APIバージョンのアップデート作業に時間を割く必要がありません。
-.icon
お役立ちページ
アップグレードする方法についての公式の解説
具体的なStripe APIのCHANGELOG
みなさんお馴染みのStripe API リファレンス
英語が得意ではない人は補助として使うと便利です(特にAPI changelog)
-.icon
やったこと
最初に現状を把握する
まずはじめに、現状を把握するためにダッシュボード左側メニューのDevelopersをクリックします。Show card errorsのチェックを外すことで、カードエラー(与信不足やセキュアコードのエラー)を除外することで、現状のシステムが生成しているエラーの量を把握します。
https://gyazo.com/88dc777e6363464a8c30e973316dac64
今から行うAPIアップデート作業を進めることで、このあたりの数字が異常増加を示した場合は、アップデート作業に問題があったと考えられるのでAPIバージョンを戻すといった復旧策を考えます。
アップデート作業
CHANGELOGを元にコードの修正を行います。一気に最新のバージョンへ引き上げずに、ターゲットとなるバージョンを定めて分割してアップデートすると問題が発生した時の対応がしやすいです。当該Webサービスの場合は、1年単位でターゲットのバージョンを指定するとちょうど良い変更量でした。あまり複雑な機能を利用していなかったのが幸いしていたのだと思います。
実際の作業手順は以下の通りです。
コードでStripe.api_version = '2013-12-03'というように、直接ターゲットバージョンを指定する
影響が出る変更については、既存のコードを修正&動作確認
ターゲットバージョンまで全て確認したらPull Requestを投げる&リリース
しばらく本番環境でも運用してみる
問題なければ次のターゲットバージョンへのアップデート作業を始める
前述のエラー数が増えてず、ユーザーからのお問い合わせも無い場合は成功したといってもよいでしょう。しばらく運用してみて、後日作業を再開します。
丁寧に動作確認をした後のPull Requestは、意外とそっけないものになります。
https://gyazo.com/d6f9f10bb582a7ba2390ce39f3b29051
CHANGELOGの確認とコードの修正は、ScrapboxのようなWikiシステムを利用してメモをとると良いです。以下に具体的なメモのスクリーンショットを共有します。このように、変更点ごとに引用タグで抜き出して、アップデートするコードを確認した時のコメントを残すと後で問題が起きた時に参照できて便利です。 https://gyazo.com/afa571ebe6960b1f03100e2af04e4d9b
Scrapboxは弊社で企画開発運営を行っているWebサービスです。あなたがこの記事を読んでいるサイトもScrapboxです。 最後にどうなったか
このようなことを繰り返し、当該WebサービスのStripe APIバージョンは2017年末相当までアップデートできました。5年分までアップデートしたとはいえ、まだ2019年には到達できていません。しかし、当初の目的だったProductは利用できます。今後また必要な機能が見つかり次第、随時アップデートしていくのが良さそうです。 -.icon
むすびに
本稿ではStripe APIのバージョンを5年分アップデートした話をお伝えしました。この作業を通じて、どのバージョンも問題なく動くStripeという決済プラットフォームの偉大さが身にしみています。また、新しいWebサービスを作る機会があったら積極的にStripeを使おう、という気持ちになりました。
-.icon