現在JavaScriptの設定が無効になっています。このページを利用するにはJavaScriptの設定を有効にしてください。〜6カ月間のPayPayフリマ開発を支えた設計〜こんにちは、PayPayフリマでAndroidやBFFを開発している松田です。ShibuyaにてPayPayフリマのバックエンドとAndroidの設計や開発について話をしました。前回のバックエンド編の記事に続き、本記事ではセッション後半のAndroid開発について紹介します。PayPayフリマとはバックエンド編でも触れていましたが、改めて紹介します。https://paypayfleamarket.yahoo.co.jpPayPayフリマはフリマに特化したサービスとして10月7日にiOS版をリリースしました。PayPayの名前がつく通り、PayPayを利用してフリマの商品をかんたんに購入でき、買い手から価格の相談をできる機能などが特徴です。ヤフオク!とも連携し、ヤフオク!に出品されている固定価格商品の一部もユーザー体験に変わりなく購入できるようになっています。開発期間や体制PayPayフリマは購入者・出品者向けの画面など約60画面あるのですが、3カ月というかなり短い期間で開発を行い、リリースすることができました。Androidエンジニアはアプリの開発が始まるまで約3カ月間はKotlinで実装されているバックエンドの開発をしていました。3カ月でリリースできたのか強くてニューゲームを実現できたヤフオク!で高速&高品質な開発手法を実践していたヤフオク!に近い画面構成で作ったことがある画面が多い開発手法・基盤ペアプログラミングPayPayフリマの開発は、ペアプログラミングで進めました。実装をしながら質の高いレビューができるので、コードの品質が上がります。Requestでレビューするといったレビュー工数はほぼゼロになり、ペアで実装したコードは直接本番コードにマージしています。毎日ペアをローテーションするので、チーム全体での知識の共有が早く、新しいメンバーが追加された時などに、効果を発揮します。ローテーションにより、全体仕様にも詳しくなるので、属人化しなくなります。ヤフオク!ではXP開発を3年前から実践しており、そこでの実績をふまえてペアプログラミングを導入しました。興味ある方は以下の記事も参考に読んでみてください。Componentについて、実際に多くのライブラリを利用している検索結果画面を例に紹介します。左がヤフオク!の検索結果画面、右がPayPayフリマの検索結果画面です。検索クエリが更新されたら検索APIをたたき、無限スクロールで一覧表示する画面となっています。ヤフオク!ではPayPayフリマを作る前、検索結果画面をリニューアルし、AndroidXやJetpackを導入していました。このヤフオク!の検索結果画面の実装を参考にしたため、両者同じような実装となっています。ヤフオク!の検索結果ヤフオク!の検索結果画面はLifecycleやLiveData、ViewModel、Paging、Roomといったライブラリを利用しています。画面内にViewが表示される際にデータをバインドPayPayフリマの検索結果PayPayフリマでは、ヤフオク!のライブラリに加え、DataBindingとNavigationも活用しています。データをViewにバインドする部分や画面遷移をライブラリに任せて記述コードを減らすことで、品質を保ちつつ、実装速度の高速化を実現しました。実際にPayPayフリマの検索結果は1週間もかからずに実装を完了できました。同じような一覧表示系の画面は1日あれば正常系を作れるようになりました。Jetpackのメリット品質を保ったまま、開発を加速させることができるコード量が少なくなり、保守しやすいコードになるマルチモジュールPayPayフリマでは、約60のモジュールに分割されています。モジュールの分け方はいろいろあると思いますので、参考になればと思います。Injection:DI)は、コンポーネント間の依存関係をコード上から排除して、オブジェクトを外部から注入できるようにするという設計思想です。DIしない場合DIしていないと、RepositoryはApiClientの実装クラスに依存してしまいます。これでは、単体テストが難しく、また、仕様変更の影響が大きくなります。RepositoryはApiClientにMockを注入できるようになり、テストコードを記述しやすくなります。それぞれでオブジェクトを生成したり大変です。UseCaseやさらに上位レイヤーから注入したりと、コードも増えていきます。それぞれFactoryが必要になるなどコードが増え、オブジェクトの管理なども必要となるなど、問題はまだまだあります。注入したいところで@Injectするだけで簡単に使えるようになります。Frameworkのメリットモジュール間の結合度が下がり、柔軟性向上モジュール間で簡単に注入でき、機能の実装に集中テスト/本番環境の振る舞いを変えて効率的に動作確認まとめ本記事で紹介したような開発手法や技術は、さまざまなカンファレンスや勉強会でも紹介されています。知っていても実際に導入が難しいことが多いと思います。PayPayフリマで実際に導入してみたところ、開発速度や品質の向上につながることがわかりました。普段から最新の技術をキャッチアップしておくことは大事ですし、実際に使ってみないとわからないことも多いので、少しずつでもサービスに導入していってみましょう。AndroidリーダーPayPayフリマのAndroidやBFFの開発や管理をしてます。JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。JAPANのサービス開発を支える技術やデザイン、文化を発信しています。Reserved.このページの先頭へ。