Upgrade to Pro — share decks privately, control downloads, hide ads and more …

残高管理から台帳サービスへの進化

Avatar for kobaryo kobaryo
October 05, 2026

 残高管理から台帳サービスへの進化

2026/9/16 Merpay Tech Talk 〜メルカリグループ全体を支える決済基盤の全容[会計編]〜 で発表した内容です
https://mercari.connpass.com/event/404444/

Avatar for kobaryo

kobaryo

October 05, 2026

More Decks by kobaryo

Other Decks in Programming

Transcript

  1. これまでのメルペイの会計連携 プロダクト QRコード決済 ネット決済 メルカード 決済サービス メルカリ … 変動ごとの残高の Snapshotも記録

    残高消費 決済基盤 お客さまの残高消費 残高管理サービス 帳簿サービス 残高変動 残高 会計コード validation -1000 残高 +1000 1000 0 11
  2. これまでのメルペイの会計連携 プロダクト QRコード決済 ネット決済 メルカード メルカリ … 決済サービス 決済基盤 売上金付与

    残高管理サービス 加盟店様の売上金付与 会計帳簿サービス 残高変動 残高 会計コード +1000 1000 validation 12
  3. これまでのメルペイの会計連携 プロダクト QRコード決済 ネット決済 メルカード Product sideが会計 に何が必要か意識 する必要がある メルカリ

    … 非同期 決済サービス 会計コード 決済基盤 残高管理サービス 会計帳簿サービス 決済には直接関 係ない会計情報 16
  4. 複式簿記によって会計に必要な情報を保持 • 残高を増やす・減らすではなく 価値交換 (Exchange) という単位の endpoint → 複式簿記 ◦

    お金の流れを全てこのExchangeで表すので、抽象度が高く 拡張性も高い Sourceの口座 Targetの口座 金額 会計コード <お客さまの残高口座 ID> <加盟店様の売上金口座 ID> 1000 merpay_qr_payment 会計コード+ Source/Targetの 口座の残高種別で勘定科目が定まる 19
  5. 台帳サービスを利用した会計連携 プロダクト QRコード決済 ネット決済 メルカード メルカリ … 決済サービス 会計コード 決済基盤

    台帳サービス 会計帳簿サービスの事情を気にせず、 お金の移動のみを気にすれば良い Exchange New 会計帳簿 サービス 25
  6. 台帳サービスの利点 • 信頼性の高さ ◦ 確定した残高情報のログと会計のデータが1対1に対応するので リコンサイルが容易 ◦ お金の流れが確定したものについてのみ会計連携される ことがアーキテクチャ的に保証される •

    上流からの扱いやすさ ◦ プロダクト側が会計帳簿システムの事情を知らなくて良い ▪ 気にするのはお金の流れまで ◦ 残高種別による勘定科目の違いを台帳サービスが吸収 26
  7. Account Spec • 残高種別ごとの振る舞いを宣言的に定義 var funds = accountSpec{ UpdatePolicy: everytime

    } var flow = accountSpec{ UpdatePolicy: logOnly } var stock = accountSpec{ UpdatePolicy: async } 31
  8. Account Spec • 残高種別ごとの振る舞いを宣言的に定義 var funds = accountSpec{ UpdatePolicy: everytime

    } var flow = accountSpec{ UpdatePolicy: logOnly } var stock = accountSpec{ UpdatePolicy: async } • 変動に対して残高を毎回 更新 • たとえばお客さまの残高は 0を下回ってはならないの で、毎回同期的に更新され る必要がある 32
  9. Account Spec • 残高種別ごとの振る舞いを宣言的に定義 var funds = accountSpec{ UpdatePolicy: everytime

    } var flow = accountSpec{ UpdatePolicy: logOnly } var stock = accountSpec{ UpdatePolicy: async } • 変動に対して変動のみ記 録し、残高は更新しない • 残高のロックを取らないの で、トランザクション数が多 い状況下でも動く • 会計上のフロー情報のた めであれば残高を管理す る必要はない 33
  10. Account Spec • 残高種別ごとの振る舞いを宣言的に定義 var funds = accountSpec{ UpdatePolicy: everytime

    } var flow = accountSpec{ UpdatePolicy: logOnly } var stock = accountSpec{ UpdatePolicy: async } • 変動に対して残高を非同 期に更新 • 残高のロックを取らないの で、トランザクション数が多 い状況下でも動く • 会計上のストック情報であ れば、残高変動時のチェッ クは必要ない 34