Skip to content

ADR-007: 決済基盤に Stripe を採用

  • ステータス: Accepted
  • 日付: 2026-03-09
  • 決定者: アーキテクトチーム

コンテキスト

TASHIKAはB2B SaaSとして月額サブスクリプション請求を行う。決済基盤の選定にあたり、以下の要件がある:

  • サブスクリプション請求: 月次バッチで請求を生成し、クレジットカードに自動課金する
  • 従量課金との組み合わせ: 基本料金+アクティブ従業員数による従量料金+オプション料金を1つの請求にまとめる
  • Webhook による入金通知: 支払い成功・失敗をリアルタイムにシステムへ連携する
  • カード情報の非保持: PCI DSS 準拠のため、カード情報はシステム内に保存せずトークン化する
  • インボイス制度対応: 適格請求書(登録番号、税率ごとの消費税額等)を発行できること

日本の B2B SaaS 決済の現状

日本のB2B SaaSでは以下の決済手段が一般的:

  • クレジットカード決済: SaaS の標準的な決済手段。即時課金・自動更新が可能
  • 請求書払い(銀行振込): 日本のB2Bでは依然として需要が高い。特に中小の税理士事務所や会計事務所では「クレジットカードNG、請求書払いのみ」のケースがある
  • 掛け払いサービス: NP掛け払い、Paid、マネーフォワード ケッサイ等。請求書発行・入金管理・督促・未回収リスクを代行する。B2B SaaSでは決済サービス+掛け払いサービスの併用パターンが増えている

MVP ではクレジットカード決済のみをサポートし、請求書払い(銀行振込)は顧客層の需要を見て将来対応を判断する。

決定

決済基盤に Stripe を採用する。

  • Stripe Billing: サブスクリプション・従量課金の請求管理
  • Stripe.net SDK: バックエンド連携
  • Stripe Webhook: 入金通知・支払い失敗通知
  • Stripe Elements / Checkout: フロントエンドのカード情報入力(PCI DSS SAQ-A 準拠)

理由

  1. サブスクリプション+従量課金の組み合わせ: Stripe Billing が従量課金(metered billing)をネイティブサポートしており、基本料金+従業員数ベースの従量料金を1つのサブスクリプションで管理できる
  2. .NET SDK の品質: 公式 .NET SDK が提供されており、ASP.NET Core との統合が容易
  3. Webhook の信頼性: 署名検証、リトライ、イベント順序保証が組み込まれている
  4. インボイス制度対応: Stripe の請求書機能が日本のインボイス制度(適格請求書)に対応済み
  5. 開発者体験: ドキュメント・テストモード・CLI ツールが充実しており、開発効率が高い
  6. 将来の拡張性: 請求書払い対応時に Stripe Invoicing + 掛け払いサービスとの併用が可能

却下した代替案

代替案却下理由
PAY.JP国産で日本語サポートが手厚いが、サブスクリプション+従量課金の組み合わせ機能が Stripe より弱い。Webhook の柔軟性も劣る
GMOペイメントゲートウェイ銀行振込・コンビニ払い等の決済手段が豊富だが、API設計が旧世代で開発コストが高い。大企業向けの契約形態
Square対面決済に強いがB2B SaaSのサブスクリプション請求には機能不足

トレードオフ・リスク

  • 決済手数料: Stripe の手数料は 3.6%。PAY.JP(3.0%〜)やGMO(2.8%〜)と比較するとやや高い。ただし開発コストの削減で相殺できると判断
  • 請求書払い未対応(MVP時点): 銀行振込を要求する顧客を取りこぼすリスクがある。顧客獲得状況を見て掛け払いサービスとの併用を検討する
  • Stripe への依存: 決済基盤を Stripe に依存する。ただし、ユースケース設計は「外部決済サービス」として抽象化しており、移行は可能

カード情報の非保持方針

TASHIKAのサーバーはカード情報を一切受け取らない。利用者は Stripe が提供する UI を通じて直接 Stripe と支払い情報をやり取りする。TASHIKAが保持するのは Stripe の顧客ID(Customer ID)のみ。

Stripe は以下の2つの UI 統合方式を提供しており、具体的な画面設計時にUX要件や実装コストを考慮して選定する:

Stripe Checkout(リダイレクト型)

Stripe がホストする決済ページにリダイレクトし、完了後に TASHIKA に戻る方式。PayPal と同様のフロー。

  • TASHIKA 側のフロントエンド実装が最小限で済む
  • Stripe 側で入力バリデーション・3Dセキュア・多通貨対応等を自動処理
  • UIのカスタマイズ性は限定的(ロゴ・カラー程度)

Stripe Elements(埋め込み型)

TASHIKA の画面内に Stripe の UI コンポーネント(カード番号入力欄等)を埋め込む方式。カード情報はブラウザから Stripe のサーバーに直接送信される。

  • TASHIKA の画面内で完結するため、UX の一貫性が高い
  • UIのカスタマイズ性が高い(フォントやスタイルを自社デザインに合わせられる)
  • フロントエンド側の実装コストは Checkout より高い

Stripe Customer Portal(利用者向け管理画面)

Stripe がホストするポータル画面。利用者が支払い方法の変更・請求書の確認等を TASHIKA を介さずに直接行える。UC-953(支払い方法を変更する)の実装候補。

共通

いずれの方式でも PCI DSS SAQ-A 準拠となり、TASHIKAに対する PCI DSS の監査負担は最小化される。

結果

  • docs/design/tech-stack.md のバックエンドライブラリに Stripe .NET SDK を記載
  • ユースケース(UC-951〜956)では「外部決済サービス」として抽象化し、Stripe 固有の実装詳細には依存しない
  • カード情報は TASHIKA のサーバーを経由しない。利用者と Stripe の直接のやり取りで完結する