Android mobile minne

minneのAndroidチームの2024年やっていきの目標達成のための知見と反省

Android mobile minne

minne事業部プロダクト開発チームのtepiです。この記事は、「GMOペパボ minne Advent Calendar 2024」、「GMOペパボ エンジニア Advent Calendar 2024」の12日目の記事です。
弊社は1月が期の始まりということで、12月で期が終わります。そこで、Androidチームで今期中を目標とした施策に対して下期の振り返りをしてみたいと思います(上期の振り返りはこちら)。

  1. 今期の目標
  2. リスク対応
  3. Jetpack Compose対応
  4. アウトプット強化
  5. ユーザー情報の取り扱いにまつわるレガシーコードの整理
  6. まとめ

今期の目標

Androidチームの今期の目標は以下のようになっています。

  1. リスク対応
  2. Jetpack Compose対応
  3. アウトプット強化
  4. ユーザー情報の取り扱いにまつわるレガシーコードの整理

では1つずつ振り返ってみたいと思います。

リスク対応

目標達成度:◯

ここでいうリスク対応とは、特に、今後アプリリリースの障害になり得る、未着手状態であったGradleやライブラリ等のアップデートを指します。全体のタスク量に対して60%が今期中に終わることを目標としていました。

すでに上期のうちに目標とする数字は達成できていたため大きな動きはなかったですが、今後のためにkaptからKSPへの移行を進めました。

Kotlin v2系への移行はしたもののkspでないと効果を発揮できなかったりするのでkspへの移行は早く終えたいところです。minneにおける移行が必要なライブラリは以下でした。

これまでライブラリのアップデートを行ってきたこともあってか、Dagger Hilt、Room、DeepLinkDispatchは切り替えるだけで大きなトラブルなく移行を終えました。Glideは一部画像が表示されなくなってしまったので移行できませんでしたが、Jetpack Composeに対応させる画面で起こっていた問題だったため、調査には時間を取らずJetpack Compose化を待って対応を進めることにしました。Epoxyの移行による影響範囲は未調査ですが、kaptに大いに依存しているライブラリかなと考えており、苦労しそうです。移行のノウハウがあれば今後ご紹介したいと思います。

Jetpack Compose対応

目標達成度:◎

今期は、機能変更が多いもしくはアプリの機能において重要な画面のうち4画面をJetpack Composeを使った実装に移行する計画をたてました。

上期は3画面でしたが下期は新たに7画面を作り終える事ができ、目標より多くの画面に対応できました!特に今後も定常的に機能の変更が加わりそうかつ、実装の重たさからするとminne全体の5指には入る、作品の詳細を表示する画面に対応できたのは大きな収穫でした。
また、いくつかの画面では今後実施される施策を見越して対応を進められました。結果、例えば8月にリリースされた動画の表示等、大きな機能リリースにも関わらずJetpack Composeの恩恵を受けつつ実装できたので、今後もメンテナンスしやすい状態にできたかなと思います。

今期により多くの画面に対応できた理由は以下の2つです。

  • チーム内で知見が集まったこと
  • 実装の計画をたてるプロダクトオーナーのメンバーにもソースの状況や対応のメリットを理解してもらえたこと

前者は考えられているアーキテクチャーから逸脱するケースが少なくなり、開発スピードが加速しました。後者は施策の実装時にJetpack Compose対応の工数を加えることができるようになり、Jetpack Composeの対応を施策の対応と一緒に終わらせることができました。例えば11月にPay-easy決済に対応した際には関連する画面をJetpack Compose対応する前提で計画し進める事ができました。

強いて課題をあげるとすると、当初対応する予定だった画面のうち2つは対応できなかった点です。限られた人員の中で施策を通してJetpack Composeにする対応を進めているため、上記にある「移行目的に沿う画面」より「施策が実施される画面」が優先されています。ただ、施策で機能変更が行われているということは機能変更が多い画面とも言えますし、重要度についても当初画面を選定する際に検討された画面ではあったので、影響度は少ないです。

現時点では、まだまだ未対応の画面がある中で数をこなすことが重要で、来期も施策に合わせて事前に対応を終わらせられるよう進めたいですし、思わぬ間があいた際に迷わず着手できるようAndroidチーム内でも次に対応する画面のストックを作って進めたいです。
また、未対応の画面数を把握し対応率を可視化して、チームのモチベーションにつなげたり、社内外にもアピールできるようにしたりしていく予定です。

アウトプット強化

目標達成度:☓

弊社では、「3つの大切にしていること」の1つとして、「アウトプットすること」があげられています。アウトプットはさまざまありますが、Androidチームでは採用に応募いただく方々に事前に雰囲気をわかっていただけるよう、今まであまり行われていなかったテックブログへの寄稿を強化するため、月2のブログ投稿を目標に設定しました。

上期は月1回の投稿を行い、下期も目標から下方修正し月1の投稿を継続するとしていましたが、下半期は2件の投稿に終わりました。またその2件もイベント参加や運営に関する投稿のみで、技術的な投稿ではありませんでした。

未達成だった理由の1つとして、ネタ探しがあります。なかなか筆が進まず忙しさに身を任せてしまって書けないことが多かったので、個人としては、DroidKaigi等イベントを受けてminneで実践したことを記事にするなどの実践することでサービスに寄与しつつも記事にできるようなネタづくりも来期は挑戦してみたいです。また、定期的に投稿する大変さは身にしみたので、来期に向けてはメンバーが得意なことの中でさまざまなアウトプットを実施できるよう検討しつつ、チームの成長につなげたいです。

また、ブログ投稿ではないものの、ペパボのエンジニアでpotatotipsというイベントの運営をさせていただいて社内のみならず社外の方々のアウトプットのお手伝いができたり、私事ながらそのpotatotipsでLTの登壇も行ったりすることができ、別のアウトプットをすることができました(運営レポートはこちら)。今後もイベント参加、運営を通してモバイル開発コミュニティに貢献していきたいです。

ユーザー情報の取り扱いにまつわるレガシーコードの整理

目標達成度:△

この対応は、現状のユーザー情報の管理方法が目指しているアーキテクチャとは全く違う実装で、今後Jetpack Composeでの実装をするにあたって障壁になりそうなので、改善する対応です。特に現時点では複数のクラスから情報が管理されているので統一したいです。

まだ道半ばではありますが、各機能で利用されているところが大体4割〜5割程度書き終わりました。

入れ替えには、入れ替えたいメソッドを特定した上で、ベースとなる同等の機能をもったRepository等の実装を事前に準備し、Android Studioの利用箇所を検索する機能を利用して利用箇所に対して実装を入れ替えていくような手法をとっています。 基本的には入れ替えだけなのですが、古の実装によりDIが簡単にはできないクラスであったりすると使いたいクラスを引き渡していく必要があったり、新しい実装にあった不要な変数の削除などのリファクタリングをしながら進めているので、なかなか進んでいないような状況です。

それでも、そういうところだからこそ先にやっておかなければいざとなった時に身動きがとれなくなって、アプリのリリースに支障をきたすと思いますので地道に書き換えています。実際に書き換わっていくことで徐々に古いコードが引き剥がせているので、引き続き対応を進めていきたいです。

まとめ

必ずやりたいと考えていたリスク対応やJetpack Compose対応はきちんと進められましたが、残りは達成できませんでした。

常に忙しさはあり、なかなかAndroidチームだけの目標のために動く難しさはあります。ただ、上記のような目標を決めてみたことで見えた課題であったり対応できる限界値がわかったので、まずはやってみるという中で知見が得られて良かったです。

また、目標を設定したからこそ進められたこともありますので、来期も達成できそうな目標かつチャレンジングな目標を掲げられるよう考えたいと思います。

まだまだminneではやりたいことがたくさんあります。Jetpack Compose対応にご興味がある方はもちろん、既存の課題解決をお手伝いしていただける方の採用へのご応募お待ちしております!