メルカリグループでは複数のアプリやサービスを提供していますが、そのベースに決済基盤があります。それを提供するのがメルペイです。QRコードを使った決済などを提供するメルペイのバックエンドエンジニア達に、これまでの経験や開発で工夫していることをインタビューしました。
インタビューアーはEngineering Officeの@afroscriptになります。
コード決済チームについて
— まずは自己紹介からお願いします。
@upamune: upamune(うぱみゅん)と言います。2018年4月に新卒としてメルペイに入社しました。コード決済チームにて、バックエンドエンジニアのテックリードとして、PMや他のチームとコミュニケーションしながら、開発を円滑に進められるようにしています。大学在学中にはさまざまな会社でインターンをしたり、ブロックチェーン系企業でフルタイムで働いていました。
@ktr: ktr(きたろー)と言います。私は2019年4月に新卒で入社しました。メルペイのバックエンドエンジニアとして、設計や開発、運用など幅広く担当しています。最近ではテックリードの引き継ぎがあって、@upamuneと一緒に動くことが増えています。学生の頃は大学近くのIT企業でアルバイトをしたり、作ったツールをOSSとしてGitHubで公開したりしていました。インターンでメルペイのコード決済チームに所属して、現在も同じチームで働いています。
@mihoyolo: 私は2018年10月入社になります。メルペイでは半年ほどカスタマーサービス(以下CS)/Ops Planningで、CS運用チームの立ち上げを行っていました。その流れで、さらに半年ほど加盟店運用のプランニングを担当しました。その後、ロールを変更してMerchant Solutionのプロダクトマネージャ(以下PM)として働いています。以前はエンジニアとして働いていたり、金融機関向けのSIやコンサル、Business Developmentを行なってきました。
現在は、担当するプロダクトを通じてお客さまや加盟店への価値提供を実現するために、あらゆることをしています。例えば要件定義や仕様決め、効果測定、他チーム調整、ロードマップ策定など何でもです。
— コード決済チームで行なっていることを紹介してください
@upamune: メルペイのコード決済に関わる開発全般を担当してます。例えばCPM決済です。
CPM: Consumer Presented Modeの略。お客さまが加盟店に対してバーコード・QRコードを提示して、加盟店側の端末でコードを読み取って決済する方式。
CPM決済はメルペイがローンチした頃(2019年3月)から提供している思い入れのある機能です。最初は大手のコンビニエンスストアなどに導入してもらうところからスタートしました。リリース直後にコンビニへ行ってさっそく決済を試す人もいて、実際に決済ができるようになった感動でSlackが大盛りあがりだった記憶があります。
— 開発で苦労した思い出はありますか?
@upamune: 入社した当初は、認証と決済基盤以外のマイクロサービスが存在しませんでした。そしてさまざまなマイクロサービスが一気に立ち上がっていったので、チーム毎の調整が大変だったのを覚えています。自分の担当ではないマイクロサービスの開発にも積極的に関わっていく必要がありました。コード決済はバックエンドの中でも一番外向けに存在するサービスだったので、他のチームが開発しているサービスを利用する機会が多くなります。そのため、足りない機能があればチームの枠を越えてどんどん実装していく必要がありました。
@ktr: 他にはMPM決済もこのチームで担当しています。
MPM: Merchant Presented Modeの略。加盟店側がQRコードを提示して、お客さまがコードを読み取って決済する方式。
MPM決済がローンチされたのは2019年6月になります(メルペイ、店頭にQRコードを設置する 「お客さま読み取り式」コード決済対応開始)。CPMは大手向けの機能になりますが、MPM決済は中小加盟店向けの機能になります。私の配属が5月で、その時はすでに設計フェーズは終わっていました。ローンチに向けてひたすら開発していました。
— 同じように開発で苦労したことはありましたか?
@ktr: バッファーが少なかったのが大変でした。とは言え、メンバーはみんな優秀だったので、そこまで苦労せずに開発を進められたと思います。ただ、MPM決済は印刷したQRコードを伴うものなので、QRコードを加盟店に発送してしまうと決済がはじまります。そのため、スケジュールを確実に守る必要がありました。
QRコード決済は元々JPQRの規格に基づいて開発していましたが、その仕様ではメルペイのニーズすべてを満たせないとわかって、途中で仕様を変更しています。その際取り組んだ新しいQRコードの設計は、難しい課題でした。
— 他に進めているプロジェクトがあれば教えてください
@ktr: d払いアプリと連携して、相互のQRコードをそれぞれの決済アプリで読み取れるようにするプロジェクトがあります。元々はMoPA(Mobile Payment Alliance)というプロジェクトがあって、決済アプリ各社でQRコードを共通化する試みがありました。しかし、決済事業者の経営統合などがあって頓挫してしまい、改めてドコモ社と協議しながら進めているプロジェクトになります。
— こちらについて苦労している点はありますか?
@ktr: 企業間のシステム連携とあって、API仕様のすり合わせやスケジュール調整、密なコミュニケーションが必要になっています。d払いとメルペイ、2つの支払いを相互に通信しますが、すべてを同期的に行うと時間がかかってしまって可用性が下がってしまいます。そこで非同期にできる部分を取り入れて処理の高速化、高い可用性を維持しています。
高い堅牢性と可用性を保つための開発時の工夫
— メルペイの開発で気をつけていることはなんですか?
@mihoyolo: お客さまがメルペイを使ってお店で問題なく決済できるのは当たり前のことでなければなりません。そのため、堅牢で可用性の高い決済サービスをシームレスに提供するのを心がけています。その上で、事業拡大であったり、お客さまや加盟店の体験向上に向けた新規開発も少しずつ手掛けてきています。
— 高い堅牢性や可用性を保つために気をつけていることはありますか?
@upamune: カナリアリリースが1つの特徴かなと思います。これは新しい機能をリリースする際に、まず1台のサーバ(これをカナリアサーバと呼びます)にだけデプロイし、問題がないことを確認できたら、他のサーバにも適用するというリリース方式です。もし問題があったら、カナリアサーバを元の状態に戻すだけで全体もロールバックすることができ、システムの安定化に繋がります。
あとは処理の冪等性(多重処理しないための仕組み)にも気をつけています。メルペイではマイクロサービスアーキテクチャを採用しているため、さまざまな箇所で問題が起こる可能性があります。問題が起きた場合はなるべくリトライする仕組みを設けていますが、冪等性が担保されていないと、リトライ時に決済を二重で実行してしまう可能性があります。そのため、安全にリトライができるように開発しています。例えばGet or Createのような仕組みで、呼ばれた側はリソースがなければ作成した上でリソースを返すと言った具合です。
— それでも障害は避けきれないと思いますが、何か取り組んでいることはありますか?
@upamune: 例えば、決済に関わるマイクロサービスの一部で障害を検知し決済ができなくなった場合は、加盟店様からの要望も踏まえ、自動でアプリ上に決済コードを表示しないようにし、そもそも決済できなくする仕様にしています。これは、コード決済のシステムからコアシステムへリクエストするところにサーキットブレーカーという仕組みを導入することで実現しています。サーキットブレーカーでは、例えば5回連続で決済が失敗してタイムアウトすると、それ以上はリクエストを飛ばさないようにするといった設定が可能です。さらに、そのサーキットブレーカーの状態(決済可能か不可能か)を取得するAPIを提供していて、それにより決済コードの表示/非表示を自動で切り替えられます。
あとは障害が発生した際に、専用フォームに入力することでBig Queryから関連するマイクロサービスのデータを取得してレポートを出力するシステムを用意しています。これにより加盟店への影響範囲をすぐにセールスの方々に提供することができます。
— 開発でよく使っているサービスやツールがあれば教えてください
@ktr: 私たちのチームでは、次のようなサービスや技術を使っています。これはメルペイバックエンド共通の技術です。
コード決済チーム特有としては、Microservices Platformが開発している仕組みも多く使っています。たとえば、チームでのマイクロサービス開発を効率化する仕組みや、Kubernetes のマニフェストの記述・メンテナンスを劇的に改善するツールです。
また、merpay-codepayment-toolsという運用を半自動化するためのツール群も使用しています。例えば、リリース自動化であったり、影響反映の抽出、QRコード生成、プロセッサー登録などを行うのに使っています。merpay-codepayment-toolsは大事なツールなので、定期的にメンテナンスしています。
誰も想像できないような、なめらかな決済体験をつくりたい
— 今後の展望を聞かせてください
@mihoyolo: 決済をもっと、想像もしていないような体験に変えていきたいですね。サービスを提供するお店とそれを受けるお客さまが、そのサービスだけにフォーカスできる体験を実現して、その上で安心・快適な形で決済できるようにしたいです。おそらく皆さん、お金のやり取りは不要であれば行いたくないはずで、操作の手間や決済にかかる手間を極力減らしたいと考えています。これはメルペイの考える”なめらかな社会”と通じるかなと思います。
メルペイもそれを実現するためにもっと便利にしていきたいです。ちょっとした使い勝手やUXで、その摩擦を取り除いている段階です。
@upamune: CPMをローンチした時には、決済の習慣や仕組みを把握しきれていない部分がありました。今から考えると、外向けのAPIをこうしておけば良かったと考えることもあります。外部企業側での開発にも関わるのでおいそれとはできませんが、中長期的に改善に取り組んでいきたいです。
@ktr: お客さまが決済する上で困ることがない体験を実現していきたいですね。まだエラーが出た時に、その原因が分からなくて問い合わせがきます。それを解決して、よりなめらかな決済体験を提供したいです。
コード決済チームの求める人物とは?
— メルカリのおすすめポイントはどんなところですか?
@upamune: 情報がオープンで、気になる情報にはほぼアクセスできる点です。毎週の全社定例会議では、役員に対して直接質問ができます。OKRの議論も公開されていて、透明性がある点もおすすめポイントです。
@ktr: メルカリグループのバリュー (Go Bold/All for One/Be a Pro) が社内に浸透しており、実際に体現している優秀な方と一緒に働けることです。ベネフィットが充実しており、ダウンサイドリスクを抑える仕組みが用意されているので、とても働きやすいです。
@mihoyolo: 立場に関係なく納得できるまで議論して、合意したらAll for Oneで働けるメンバーがいることです。あとは経営陣が組織を良くするための変化を怠らないことであったり、組織全体としてD&Iを推進していていることですね。
— コード決済チームにはどんな方がマッチしますか?
@upamune: 自律的に行動できて、技術が好きな人に向いていると思います。TLはいますが、大枠が決まれば実装はメンバーにお任せするので、受け身だとマッチしないかと思います。毎週、技術書輪読会と技術系雑談会が開催されているくらい技術の話をよくするので、技術好きな方にぴったりです。
@ktr: 決済システムの特徴として、外部システムへの接続が多くて、システムの信頼性や可用性、一貫性が強く求められます。そうした性質を持つシステムの開発や運用に興味がある方に向いています。
@mihoyolo: 決済の裏側の仕組みを理解しつつ、それを他の人に対してシンプルに説明できる人でしょうか。また、より良いお客さま体験や加盟店体験に対して、こだわりを持って開発にコミットできる方に向いています。
採用情報
メルペイのコード決済チームではメンバーを募集中です。 少しでも興味を持っていただいた方は、ぜひともMercari Careersの募集要項をご覧ください。