エンジニアと立ち話。Vol.19 @foghost(メルペイBackend)ちょっとお話いいですか?

f:id:mercarihr:20181023170935j:plain

メルカリで働くソフトウェアエンジニアにちょこっとお話を聞いていくインタビューシリーズ「エンジニアと立ち話」。第19回目の今回は、メルペイのバックエンドエンジニアである梁軍偉さん(以下、@foghost)に話を聞きました。聞き手はメルペイのVP of Engineeringである木村秀夫(以下、@hidek)です。

メルカリに入社以来、ずっとプラットフォーム開発をし続けているという@foghostさん。実はそのプラットフォーム開発こそ、のちのメルペイ構想につながるものだった……?

「リアルで価値を出せる開発に関わりたい」

@hidek:@foghostさん、ちょっとお話いいですか?

f:id:mercarihr:20181022173711j:plain
写真左:@foghost、写真右:@hidek

@foghost:でも、これから会議室へ行くところなので……。

@hidek:よし、じゃあ歩きながら話しましょう! さっそく、職種と入社日を教えてください。

@foghost:(会議室はすぐそこなんだけれど……)あ、はい。僕がメルカリに入社したのは、2016年11月。それまではグリーでバックエンドエンジニアとしてプラットフォーム開発をしたり、友人と起業してゲーム開発をしたりしていました。

@hidek:グリーで開発していたのは、ソーシャルゲームのプラットフォームですか?

@foghost:はい。学生時代からソーシャルゲームの開発会社でアルバイトをしていて、プラットフォーム開発のような大規模プロジェクトに興味がありました。そして、入社したのがグリーだったんです。その後、「人生で一度くらいはゲームをつくってみたい」と思い、友人と起業してゲーム開発をしていました。グリーではずっとバックエンドエンジニアでしたが、起業してからはUnityというゲームエンジンを使ってクライアント側のプログラミングを書きながら、データ分析もしていましたね。

f:id:mercarihr:20181022173715j:plain

@hidek:プラットフォーム開発は楽しいですよね! そこからなぜメルカリへ?

@foghost:ひと通り経験したタイミングで「リアルで価値を出せる開発に関わりたい」と思い始めたんです。メルカリはサービスも成長し続けているし、グローバル展開もしている。それに、新たな技術挑戦にも注力し続けていますよね。その環境下だといろいろなチャレンジができそうだと感じたので選考を受けました。メルカリ入社後はグループ会社であるソウゾウを経て、現在のメルペイに至ります。

メルペイ構想のスタートは「メンバー3名でひっそり始めたプロジェクト」

@hidek:@foghostさんは今、メルペイで決済プラットフォーム開発をしていますが、入社当初は何を?

@foghost:僕が入社する前から、1つのIDでメルカリグループ内のサービスを利用できる「共通ID」の開発が始まっていました。そのため、メルカリに入社してすぐプラットフォーム開発チームに入り、現在の決済プラットフォーム開発に至ります。

@hidek:なんと、入社してからずっとプラットフォーム開発をしているのですか! 当時のメルカリには「個人情報などを入れる手間がない」「メルカリでの評価情報を他のサービスでも適応される」という体験を最大化するためのプラットフォーム構想がありました。共通IDは、その第一歩でしたよね?

f:id:mercarihr:20181022173719j:plain

@foghost:そうですね。当時の僕はソウゾウで共通IDの開発を手伝いながら、新規事業(メルカリ カウル、メルカリ メゾンズなど)に必要な商品連携機能などの開発していました。新規事業の立ち上げでは常に決済機能が必要と言われていたのですが、プロダクト開発に注力していたフェーズだったこともあり、開発に着手できない日々が続いていました。

@hidek:なるほど。

@foghost:しかし、メルカリグループ内で新サービスを立ち上げるたびに決済機能をつくるわけにはいかない。ならば、グループ内のサービスで共通して使える決済システムの基盤をつくれないだろうかと考え始めたんです。そこで、上長の承認を得た後、僕を含む3人のエンジニアが集まり、チーム内でひっそりと決済システムの開発をスタートしました。

@hidek:そのときにつくられていた決済システムが、今のメルペイがつくろうとしている決済プラットフォーム構想につながっています。そんな@foghostは、今ではメルペイの要。なんだか感慨深いですね。

@foghost:スタート時点ではあくまでも「メルカリの決済機能を共通化し、他のサービスでも使える決済プラットフォームをつくる」でした。その後、曾川さん(メルペイCTO)が入社し、メルペイという構想が本格的に動き始めたのです。それからは、加盟店でも使える決済プラットフォームにするため、提供すべき機能やAPIなどを議論しながら、今のメルペイが描く決済プラットフォーム構想のイメージが出来上がっていきました。

マイクロサービスとして切り出す基準

@hidek:僕も前職などで、プラットフォーム開発で決済機能に関わることがありました。だからこそわかるのですが、決済システムは一度つくると手を入れにくく、技術負債がたまりがちなところもあります。そもそも「払い戻し」「キャンセル」など複雑な処理や決済ステートメントがあり、さらに決済手段自体も多種多様に増えています。@foghostさんは、決済システムに対してどんな難しさを感じていますか?

@foghost: 決済システムは難しいですよね。メルペイでは決済システムにある複雑な部分を役割分担できるよう、マイクロサービスのアーキテクチャごとに分かれて開発を進めています。僕がいる決済プラットフォームチームでは、常にサービスの拡張性と安定性の両立を目指し、サービス基盤となる部分を開発しています。決済手段の拡張性に関しては、お金による取引の動きを抽象化し、1〜2年後を見据えてフレームワークを設計するように工夫しています。

@hidek:手を入れにくくなることを見越して、あらかじめ拡張できるようにしているんですね。

@foghost:そうです。しかし、@hidekさんもおっしゃるように、お金の取引による各決済ステートメントを管理するのはとても難しい……。例えば、複数の決済手段を同時に利用している複合決済の場合、いくつものサービス、外部決済プロバイダーとやりとりする必要があります。そうなると、ローカルのトランザクション管理だけでは限界があります。エラーが発生したときには複数のサービスをまたいでロールバックしなければならない。そこで、お金の取引を細かくフェーズごとに分け、処理速度はもちろん、冪等性を担保されるように実装しました。これによってエラーや障害が発生した場合、最終的にはサービスをまたいだ状態でも整合性を担保できるようになったんです。

f:id:mercarihr:20181022173658j:plain

@hidek:マイクロサービスは、それぞれのサービスや機能を小さく切り分けて開発できる良さがあります。一方で、サービス自体が大きくなると、切り分けた部分それぞれが肥大化することもあるのではないかと考えていて。先ほど、少し先を見越して拡張性あるアーキテクチャを設計していると話していましたが、決済サービスもどこかのタイミングでさらに小さなマイクロサービスとして各セクションを切り出す可能性はあるのでしょうか?

@foghost:あり得ます。決済サービスはどんどん大きくなっていくものなので、バランスを見ながら判断していくことになる。今のシステム上にある、エスクロー用の決済API、通常決済API、入出金の決済APIなど、それぞれに必要なお金の取引をすべて管理していますが、今後、もし各セクションが肥大化した場合、エスクロー部分を切り出して他のマイクロサービスにすることもありだと考えています。そのタイミングがきたら切り出しやすいよう、普段から意識しながら開発していますね。

@hidek:もしマイクロサービスをより小さな単位に切り出すとしたら、どういった基準で判断することになるのでしょうか? 規模? コードの量? それともロジックの多さ?

@foghost:いろいろな考え方がありますが、僕としては「1チームで開発をとりまとめられるかどうか」もポイントの一つと思っています。というのも、サービスのリリースまでがスムーズでも、その後いろいろな機能が増えると、業務量が膨れ上がり、効率よく開発や運用ができなくなる可能性が高いからです。そういった状態は、サービスのスケールを妨げるので、切り出すタイミングの1つだと思いますね。

テックリードの役割は「技術課題を解決すること」

@hidek:@foghostさんはプラットフォーム開発をしていますが、同時にテックリードもしていますよね? @foghostさんはテックリードの役割をどう感じていますか?

@foghost:メルカリの開発チームには、プロダクトマネージャーとエンジニアリングマネージャーがいます。その名の通り、エンジニアリングマネージャーがエンジニアたちのピープルマネジメントなどを行います。テックリードは何をするかと言うと、エンジニアたちにとって開発の妨げになっているものを取り除くほか、全体設計や技術にある課題を解決する。そのためには、サービス全体の設計や環境整備、使用している技術を幅広くチェックする必要があります。

@hidek:よく耳にするのが、テックリードなどの役割を持つとコードなど書かなくなりがち……。@foghostさんはそのあたりどう思いますか?

@foghost:がっつり書いています。最近ではシステム内での決済手段の共通化や、より直感的に扱えるようにフレームワークのリファクタリングなどやっています。とはいえ、優秀なメンバーが多いので、一括して任せられる日はそう遠くないと思っています。

@hidek:@foghostさんはテックリードの鑑ですね! まだまだ話し足りないし、もっといろいろ聞きたくなってきましたよ!

@foghost:いや、もう会議室についたので。

@hidek:あらら。では会議室へどうぞ!

@foghost:ありがとうございました!

f:id:mercarihr:20181022173702j:plain

関連求人情報

[merpay]ソフトウェアエンジニア(DataPlatform) / メルカリ
[merpay]エンジニアリングマネージャー(Backend) / メルカリ
メルペイ / メルカリ