本記事では、メルカリ・メルペイのそれぞれのAndroid開発の特徴についてご紹介します。
使用している開発技術
メルカリのAndroidアプリの開発言語は、開発開始当時はJavaでしたが、現在はKotlinがメインです。そして、MVPをベースとしたアーキテクチャを採用しています。一部のメルカリの新規プロジェクトや実験的なプロジェクトでは、Jetpack Compose+MVVMメインのアーキテクチャを採用し、積極的に新しい技術を取り入れて開発しているチームもあります。
メルペイでは開発当初からKotlinを採用しており、100% Kotlinです。アーキテクチャはReduxの考え方とMVVMを組み合わせて使っています。初期設計の段階から金融システムにおける状態遷移の複雑さを考慮し、Reduxベースの状態管理フレームワークを構築しています。マルチモジュール構成を採用していて、各機能を独立性高く開発しています。また、「メルペイ」初期リリース時は非同期処理部分にRxJavaをメインに使っていましたが、Kotlin Coroutinesの方が適切な部分についてはリプレイスするなど、新しい技術を採用した改善にも取り組んでいます。
プロダクト開発の特徴
メルカリのプロダクト開発の特徴は、大規模なアプリを地道に支えるための開発の土台や仕組みができていることです。大規模スクラム開発(LeSS)による週イチリリース可能な開発体制作り、CI/CD、Unitテストの着実な実施、リグレッションテストの自動化など、各分野で工夫を凝らしています。
メルカリのような大規模なアプリでは、いかに既存の機能を邪魔せずに、そして壊さずに新規機能を作るかがとても大事だと考えています。仕様や技術的な設計については、エンジニアの実装方針を明確にするためにDesignDocとしてきちんとドキュメント化をしています。
また、プロダクトを通して一貫した体験をお客さまに届け、コンポーネントの再利用により開発の効率を上げるために、Design Systemをチームで導入しています。
メルカリでは積極的に新機能を開発して日々追加をしていますが、今現在使ってくださっているお客さまの体験をより良くするといった細やかな配慮や改善に基づく機能追加がプロダクト開発の中心です。一例としては以下のような機能です。
持ち物リスト カメラで家にあるものを撮影すると、その商品を特定することでメルカリ上での価格を予測してどれくらいの資産を持っているか、どれくらいで販売できそうかをチェックできる機能
メルカリのシステム上、まず売る人がいないと売買は始まらないので、「持ち物リスト」機能では売り手にとってより便利になるように開発しています。メルカリで購入した商品は自動的に登録されるので、後に不要になった商品が再び必要な人に届くような循環を作るための仕組みとしても機能しています。
一方で、サービスの拡充を図りたいメルペイでは、新しい機能をどんどん追加してきたいと考えています。しかしメルペイのような金融分野のプロダクトは、遵守すべき法律が多くあります。そのため、QAやテストは念入りに行う体制をとっています。一つひとつの新規機能の規模感が大きく、プロジェクトのチームとしてとにかくしっかりとやりきることが大事になってきます。
組織の特徴
メルカリではエンジニアリング組織の生産性を高水準に保つために「Camp(キャンプ)」という独自の組織構造を取り入れています。Camp単位でミッションを核にした職能横断のグループチームが作られ、それぞれのCampで目的や方向性などが設定されます。AndroidエンジニアもCampに参加して、ミッションの達成に向けて開発や改善など継続的に関わっていきます。
Inside Camps
Androidエンジニアとしては、定期的なGuildと呼ばれるミーティングや、Client Platform Groupというクロスチームなグループで技術的な情報共有、改善を行っています。
- Guild:隔週開催のメルカリAndroidエンジニアミーティング(Google Play Consoleを通じたアプリリリースや、アプリ全体のコード・設計に関する相談など、Androidの話題が中心)
- Client Platform Group:メルカリグループのAndroid、iOS、Web FrontEnd、QAエンジニアが参加するミーティング(CI/CD、開発環境のインフラ、クラッシュの監視体制などクライアントアプリで共通の問題を中心に改善する)
世界中の様々な場所から働くAndroidエンジニア
メルカリには世界中から優秀なAndroidエンジニアが集まっており、英語話者の比率も高く、国境を越えて共に働いているという実感があります。世界中のAndroid関連情報が入ってくるので技術のキャッチアップも早いです。
一方で、世界中となるとタイムゾーンの問題が出てくるため、ミーティングはできるだけお互いの負担のない時間帯に設定するなど工夫をしています。また、メインのコミュニケーション言語は英語ですが、社内に日英通訳チームがいたり、英語・日本語それぞれの学習制度があったりと、母国語が日本語の方も英語の方もどちらもスムーズに働けるようサポートが充実しています。
- メルカリ、多様な働き方を尊重した 「メルカリ・ニューノーマル・ワークスタイル “YOUR CHOICE” 」の導入を開始 | 株式会社メルカリ
- 「言語と文化の架け橋に」メルカリGOTってどんなチーム? #メルカンバトン
メルペイ組織のプロダクト開発体制
メルペイプロダクト体制
メルペイのプロダクト開発体制は、プロジェクト単位と職能でマトリクス状になっており、Androidエンジニアはエンジニア組織をマネジメントする役職であるEM(Engineering Manager)によってプロジェクトにアサインされる仕組みです。
プロジェクトにおけるAndroidエンジニアの役割は、プロジェクト推進や技術的な部分でのリード、手を動かして実装することです。それと同時に、Androidチームとして、Android全体のコードベースの改善などにも取り組んでいます。プロジェクトとチームへの関わり方のバランスは人や時期によって比率が異なり、都度調整されます。
メルペイのAndroidエンジニアチームはシニアエンジニアが多く所属しているのが特徴です。単独で0→ 1でアプリを作れる力を持ったエンジニアが協力してプロダクト開発をしています。
メルカリグループ全体で進める、教育支援やインターンシップの受け入れ体制
メルカリグループでは中途採用の他に定期的にソフトウェアエンジニアポジションのインターンシップメンバーを募集しており、Androidチームもインターンシップを受け入れています。また、通常のインターン以外にハイブリッド型エンジニア育成プログラム「Build@Mercari」も実施しています。
Androidエンジニアから見た、メルカリ・メルペイという会社
メルカリグループには、世界中から集まった優秀なエンジニアがたくさん在籍しているため、様々なチャレンジができる土台が用意されている会社です。さらに、必要であればためらいなく組織構造を変える機動力もあるのでベンチャー企業の一面もまだまだ残っています。
メルカリは、大きな組織であるにもかかわらずチャレンジングなことも行う多面性のある会社です。現在のメルカリの利用規模では、いかにお客さまに不便をかけないかがとても大事なので「プロダクト開発の特徴」でも述べたとおり手堅く機能開発をする必要があります。
また、新しいビジネスを創造するというレベルでの新機能を開発するメルペイやメルコイン、ソウゾウという組織もあります。その中でも特にメルペイは、いつも大胆な目標を掲げ、それをきっちりとクリアしていく組織です。高い組織力とハイレベルなエンジニアが集まっています。このように常に挑戦することで個人も組織も成長する機会に恵まれ、周りのメンバーも惜しみなく協力します。結果的に、失敗を恐れずチャレンジングな課題を繰り返し解決していくことで全体が驚異的な成長をしていく組織になっています。
2013年の創業以降、ミッションの達成に向かって挑戦してきたメルカリは今、スタートアップから「世界に通用する企業」へと変化する挑戦の真っ只中にいます。今の成長フェーズでしか向き合えない価値ある課題を一つひとつ解決することが、必ずミッションの達成につながると信じて、メルカリグループは歩み続けています。私たちと一緒に、このミッションに挑戦してみませんか?
もっと私たちのことが知りたい方はぜひ以下をチェックしてください!
著者紹介
@mochico
新卒で入社した会社の研修でAndroidにハマり、その後Web制作会社で数々の受託・自社サービス開発を経て2018年1月にAndroid Engineerとしてメルカリに入社。最近はJetpack Composeを使った開発に携わっており、DroidKaigi2021でもCompose Previewについての発表を行う。
@hidey
2011年からAndroidアプリ開発を始め、SNSアプリやゲームなどの開発を経験。その後2018年10月にAndroid Engineerとしてメルペイに入社。DroidKaigiなどカンファレンスの運営にも携わっている。