Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

あなたの知らないStudyplusモバイルクライアントグループの世界

こんにちは、モバイルクライアントグループのリーダー大石です。
春から息子が就活を始めたので親としては期待と不安が入り混じる季節です。
今回はモバイルクライアントグループで何をどのような体勢で開発しているか、どのような取り組みをしていたか昨年度を例にご紹介します。

開発しているプロダクト

学ぶ喜びをすべての人へという弊社のミッションのもとに、以下のプロダクトを開発しています。

Studyplus Porto
プラットフォーム Android/iOS Android/iOS
開発環境 Kotlin/Swift Flutter
概要 勉強記録・学習管理アプリ 参考書読み放題サービス
URL https://www.studyplus.jp/about https://porto-book.jp

メンバー構成

現在のモバイルクライアントグループにはエンジニアが7名おり、メンバー構成は以下のとおりです。

  • リーダー * 1
    iOSエンジニアとリーダー業務・プロダクト推進を兼任
  • テックリード * 1
    iOS, Android, Flutter, サーバーサイドを横断
  • Studyplus
    • iOSエンジニア * 2
    • Androidエンジニア * 2
  • Porto
    • Flutter(兼サーバーサイド)エンジニア * 1

メンバーの働き方

約1年前から基本的にはリモート勤務になっています。(私が昨年3月以降にオフィスに出社した回数は3, 4回でした)
基本的な勤務時間は10時~19時ですが、早朝から稼働するメンバーもいたり、日によっては12時くらいから稼働するメンバーもいて様々です。
個人的な話ではありますが、有志による自作キーボード部の活動が1年以上できていないので寂しいです。

開発の進め方

四半期ごとに企画チームや広告チームなど事業のグループ、サーバーやモバイルなど開発のグループから起案された機能追加や技術的な改善をロードマップに落とし込んでプロダクトの開発を行っています。
毎週開催しているProduct Planningというミーティングにてグループをまたがるタスクの進捗や優先度の確認、各グループから持ち込まれたタスクをメンバーにアサインします。
開発タスクの種類としては主に事業に関わるタスクと技術的な取り組みの2つです。 事業サイドからのタスクに関しては無理のないスケジュールで開発ができるようエンジニアからの意見を踏まえて計画しています。

技術的な取り組み

エンジニアサイドからの技術的な観点による新機能の開発や改善を行っています。
最近の取り組みをプロダクトごとにご紹介します。

Studyplus iOS

  • iOS 14 Widget対応
    • エンジニア主導で技術調査を行い、事業サイドのグループによるデザインを元に開発、リリースしました tech.studyplus.co.jp
  • Siriショートカット対応
    • こちらもWidget対応と同様にエンジニア主導で開発しました tech.studyplus.co.jp
  • Objective-C → Swift移行
    • 2021年4月現在Objective-Cのソースコードが残り1%となり、もう少しでSwiftへの移行が完了しそうなところまで来ています。
先月 今月

Studyplus Android

  • アーキテクチャの刷新
    • JavaからKotlinへの完全移行
    • MVCアーキテクチャからJetpack MVVMアーキテクチャへの移行
    • マルチモジュール構成への移行
    • Dagger, Dagger AssistedInjectによるDIの整備
  • 最新ライブラリの導入
    • Navigation, DataStore, PagingなどのJetpackライブラリ
    • Retrofit, CoilなどのKotlin Coroutines活用ライブラリ
  • タブレットやChrombookなどのマルチデバイス対応

MAD Scoreを計測した記事も参照ください tech.studyplus.co.jp

Porto

  • FlutterによるマルチOS対応アプリの開発を初期に決定 tech.studyplus.co.jp
  • freezed + StateNotifierによるViewModelアーキテクチャの採用
    今後、Riverpodに移行する予定です。
  • 課金処理も含めたバックエンドをFirebaseに統一

ミーティング

現在、メンバーが参加している定例ミーティングは以下のとおりです。
チーム内では基本的には火〜木曜日にミーティングを設定するようにして、月曜日と金曜日は開発に集中しやすく休暇も取りやすいように意識しています。
現在はほぼ全員がリモートで参加しています。

  • 毎週
    • 事業部全体定例 (30分)
    • Product Planning (30分)
    • iOS定例 (30分) ※
    • Android定例 (30分) ※
  • 隔週
    • 1on1 (30分)
    • Portoエンジニア定例 (30分) ※
    • モバイルクライアント定例 (30分)
    • スタディプラス エンジニア定例 (30分)
      サーバーサイドとSREチームのメンバーも参加する定例で、他グループへの相談や情報共有、技術的な雑談などを行っています

※関係するエンジニアが参加して各プラットフォームの開発に関する報告や技術的な情報共有を行っています

グループでの主な取り組み

開発リソースの効率化

iOS・Androidエンジニアが別プラットフォームの開発もできるようにすることで開発リソースの効率化を目指しており、強制ではありませんが手軽な実装タスクを担当することを推奨しています。
昨年度では当時在籍していたiOS 2名、Android 2名がそれぞれ別プラットフォームの実装にチャレンジすることができました。
私もAndroidの開発経験はありませんでしたが、Android Studioの使い方レベルからレクチャーを受けながら簡単な開発を経験することができました。
今後はiOS・AndroidエンジニアにもFlutter開発を経験してもらい、グループに所属するエンジニアがどのプロダクトにも携われるような体制を目指しています。

評価制度のアップデート

360度フィードバックの導入

半年ごとに期間中同じプロジェクトなどを担当したメンバーからフィードバックを受けます。
あくまでフィードバックとしているので評価には影響せず、他のメンバーからのフィードバックを参考に今後の目標設定やアクションに反映してもらうことが目的です。

キャリアラダーの導入

エンジニア向けの評価制度としてキャリアラダーの導入を予定しています。

自己学習制度

毎日の勤務時間中の30分を自由な学習に使って良いという制度です。業務に差し支えがない前提ではありますが、2時間~2時間半程度を1週間のどこかで割り当てるでも可としています。
実はこの制度は現在うまく運用できておらず、大きめの目標を立てても1日30分でできることは限られているので、計画はしたものの業務を優先したために全く自己学習できなかったというケースがありました。
その経験を踏まえて例えば、積読している技術書を業務の合間に読む、新しい開発言語のチュートリアルを実行するといった手法で有効活用できないかと考えています。

いかがでしたか?

簡単ではありますが、モバイルクライアントグループについて紹介しました。
弊社のモバイルアプリ開発について興味を持っていただけたら幸いです。
まだまだグループとしてやっていくべきことが沢山ありますので引き続きメンバーと一緒に良いプロダクトを作れるよう改善を行っていきたいと思っています。

最後までお読みいただきありがとうございました。