モブプロ会を通してAndroidエンジニアのスキル向上を図ってみた

Android, スキルアップ, モプブロ

はじめに

こんにちは。
NX開発推進部プロダクト開発第1グループでAndroidアプリを開発している休井です。
我々Androidエンジニアはグループの取り組みとして、モブプロ会を定期開催しています。
今回は、モブプロ会の経緯やそこで得られた成果を紹介したいと思います。

モブプロとは

モブプログラミング(モブプロ) は、複数人で1つの課題に取り組みながら、1台のPCを使ってコードを書いていく開発手法です。
コードを書く「ドライバー」と、方向性を示す「ナビゲーター」に役割を分け、交代しながら進めていきます。
ペアプログラミング(ペアプロ)と似ていますが、モブプロは3人以上のチームで行う点が特徴です。
チーム全員で議論しながら進めるため、ナレッジ共有や設計の理解が深まりやすいという利点があります。

モブプロ会について

背景

我々レコチョクのAndroidチームでは、次のような課題感を持っていました。

  • 多くの現行プロダクトが運用フェーズに移行している中で、0からの設計や技術の導入に関わっていないメンバーが多い
  • 未導入の技術や新しい技術に対し、プロダクトに本格採用する前にあらかじめ検証を重ねて知識を深めておきたい

元々Jetpack Compose等の新技術についてモブプロ形式で学習をした経験があり、チーム全体での学習にモブプロが有効的であるという認識がありました。
そのため、上記課題を解決しエンジニアとしてのスキルを底上げするためにモブプロ会を定期開催しよう!という運びになりました。

参加者

モブプロ会には10名程度参加しており、Android開発経験は以下のような分布になっています。

  • 経験年数
    • 1~3年:2~4名
    • 4~6年:4名
    • 7年以上:2~3名

全員参加必須というわけではないのと、多少のメンバーの入れ替えがありましたが常に8名程度は出席しています。
幅広い経験を持つエンジニアが参加することで、各メンバーが互いに知識を共有し合い、実践を通じて新たなスキルを習得する場となっています。

準備

モブプロ会を実施する前に、以下について話し合いを行いました。

  • 学びたい内容
    メンバーが興味を持っている技術や、実務で利用する可能性が高い技術をリストアップしました。
    その中で、以下のような技術を学ぶことを目指しました。

    • アーキテクチャ: MVVM、マルチモジュール
    • 通信: Retrofit、OkHttp
    • メディア再生: Media3
    • DI: Hilt
    • UI: Jetpack Compose
  • 進め方
    0からアプリを作成するにあたって、どこまで実際の業務に沿った形にするかを話し合いました。
    実務では要件定義やデザイン作成をAndroidエンジニア主体で行うことはあまりできないので、モブプロ会ではその辺りも含めて自分たちで進めてみようということになりました。
    進め方としては、以下のステップで進めることにしました。

    1. 要件定義
    2. デザイン作成
    3. 設計
    4. 実装
    5. テスト
  • 開催方法
    モブプロ会の開催頻度や対面・オンライン等をどうするかについて決めました。
    ただ、進行中に課題に直面することがあり、その都度形式を見直すこととなりました。
    これらの過程を3つのフェーズに分け、時系列で説明していきます。


フェーズ1

開催方法

  • 週に1度1時間リモートで開催
  • 8名程度
  • 要件定義、デザイン作成、設計等

課題

  • 進みが遅い
    予定が合わなかったり業務が立て込んでいたりするとキャンセルになることもあるので、週に1度の予定だと次の開催が2~3週間空くなんてことも多々ありました。
    その度に前回は何をやっていたのかの確認から入るので、それに時間が取られなかなか進まないという状態になりがちでした。

対策

  • 開催頻度を変更
    参加メンバーが多く毎度リスケするのも難しいのと、週1で1時間はそもそも少ないのでは?ということになり、開催頻度を週1回から週2回に増やすことにしました。

フェーズ2

開催方法

  • 週2で1時間ずつ、リモート(途中から1日は出社)
  • 8名程度
  • アプリの実装(UI、ネットワーク、ローカルデータの取得等)

課題

開催頻度を変更したことで、単純に開催回数が増えて進みやすくなりました。
ただ、まだ以下のような課題があり、開発効率が良くない状態でした。

  • 1度詰まると解消に何時間も掛かってしまう
    実装中、使用するAPIの呼び出しに必要なトークンが取得できないという問題が発生しました。
    なかなか解消できず、モブプロ会で集まってひたすら調査するだけの回が何回かありました。
    この問題以外にも、1度詰まるとなかなか先に進めなくなることが多く、せっかくスケジュールを合わせて集まっているのに勿体無い時間を過ごしているなと思うことがありました。
  • 喋る人が固定されがち
    ドライバー1名以外は皆ナビゲーターとしていましたが、特定のメンバーがいつも指示を出しているような状況になっていました。
    特に、リモートの時はメンバーの反応が見えないのもありコミュニケーションが取りづらく、発言が少なくなっていたと思います。

対策

  • チーム分け
    メンバー全員で一つのエラーと向き合うのは非効率だと感じたので、チーム分けをして複数の機能開発を同時並行で行うようにしました。
  • 対面実施に変更
    途中から別のミーティングが対面実施になったことで、同日に開催していたモブプロ会も出社して行うようになりました。
    週2回のうち1回を出社して開催するようになったことで、リモートで行うより出社した方が会話が活発化し進みも早いと気づきました。
    そこで、週2回の両方を出社して行うよう変更しました。

フェーズ3(現在)

開催方法

  • 週2で1時間ずつ、原則対面
  • 3〜5人のチームを作り、それぞれのチームでドライバー1名を順番に回していく
  • アプリの実装(UI、検索機能、楽曲プレイヤー等)

週2回の両方を出社して行うようになり、コミュニケーションが取りやすくなりました。
リモートでは話すタイミングを見計らう必要があったり、メンバーの反応が見えずに萎縮しがちでした。
しかし、対面ではそのような問題が起きづらく、和気あいあいと進めることができました。
また、少人数のチームに分けたことで、実装スピードも向上しました。
同じ時間帯に近い場所で行なっていたため、お互いのチームの進行を確認し合い、着手する部分を相談しつつ進められたことで、開発効率が大幅に上がったと思います。


モブプロ会を開催した成果

色々と試行錯誤しながら進めたモブプロ会ですが、その中でどのような成果が得られたのかご紹介します。

完成したアプリについて

最終的に実装したアプリの主な機能がこちらです。

  • ホーム
    • APIからアルバム、楽曲、再生履歴を取得して表示
  • 検索
    • 入力された文字を元に楽曲とアルバムを検索しその結果を表示
  • ライブラリ
    • 端末に保存された楽曲を一覧表示
  • プレイヤー
    • 楽曲情報の表示、再生、一時停止、曲送り、曲戻し等

UIは以下のようになりました。

技術面

  • 技術の導入を学べた
    普段業務では使っているけれど、使うようになるまでに何をすべきかは知らないという状況から、全員で導入部分を実践することができ知見が広まりました。
  • 業務で使用したことのない技術の検証ができた
    マルチモジュールやシングルアクティビティ等のアーキテクチャや、Jetpack Compose NavigationやMedia3等の一部プロダクトで未導入のライブラリについて検証することができました。
    モブプロ会で実装方法を学ぶことで、実際の業務で導入する際にコストを下げることができるようになったと思います。
  • 他メンバーの作業方法を知ることができた
    普段はあまり他のメンバーがどのように作業をしているのか見る機会が少ないと思います。
    モブプロを行うことで、メンバーが普段使っている便利なショートカットキーや使いやすいCLIツールなど、各々が作業効率を上げるために何気なく使っていた技術を共有することができました。

コミュニケーション面

  • 共通のナレッジができた
    モブプロ会で共通の知識基盤を築けたことで、実際の業務でタスクに取り組む際の具体的な方法や使用する技術に関する説明を省略できるようになりました。
    事前に共有された知識を活用することで、コミュニケーションコストを削り、効率的に作業を進めることができています。
  • 普段業務であまり関わらないメンバーとの会話の機会が増えた
    弊社にはAndroidエンジニアが10名程度在籍してますが、各々担当プロダクトが決まっているため、同じプロダクト担当でなければ普段業務で関わることはあまり多くないです。
    ですが、モブプロ会を始めて今は週2回対面で一緒にコードを書く機会ができたので、担当プロダクトに関係なくコミュニケーションをとることができています。

気をつけるべきポイント

モブプロ会全体を通して、特に気をつけるべきだと思ったポイントが2点あります。
1. 経験の多いエンジニアの発言が多くなりがちなので、若手エンジニアが発言しやすい空気を作ったり疑問点がないか適宜確認すること
2. 何かに詰まったときに停滞感が生まれがちなので、ある程度で区切りをつけて後回しにすることも大事

1については、メンバー間のスキルに差がある場合は特に気をつけた方が良いです。
中堅以上のメンバー同士が中心になって話を進めると、作業の進みは早くなるかもしれませんが、若手のメンバーが理解できず会話の参加もできないという状況になりがちです。
ドライバーを若手のメンバーに任せたり、適宜みんなが理解できているか確認したりして誰かが置いていかれることのないようにしましょう。
2については、フェーズ2でぶつかった課題と同様で、一つのエラーがなかなか解決しないときに全員で解消しようとすると逆に非効率になり、モチベーションの低下にもつながります。
ある程度で区切りをつけて後回しにしたり宿題にしたりして、作業がなるべく滞らないようにすることが大事です。

今後について

これまでは1つのアプリをじっくり時間をかけて実装していましたが、今後はインプットとアウトプットを小さい周期で回していきたいと考えています。
エンジニアとして常に最新技術にアンテナを張っておくことは非常に重要ですが、業務に追われて難しいこともあると思います。
モブプロ会を行うことでチーム全体で学習する場を作り、最新技術のキャッチアップやメンバーのスキルの底上げを目指していきたいです。

まとめ

Androidエンジニアチームで行なっているモブプロ会について紹介しました。
モブプロはチーム全体での学習に非常に有効な手段ですので、皆さんもぜひやってみてください!