『OSの垣根を超える』アプリ開発チームの実践事例

こんにちは、maKunugiです。グロービスのアプリ開発チームでスクラムマスター兼モバイルエンジニアをしています。

グロービスでは、「グロービス学び放題」というビジネスナレッジを動画で学べるアプリ(iOS, Android)を内製しているのですが、今回は、グロービスの行っているアプリ開発の様子を紹介しつつ、いくつかの課題を乗り越えながら培った「OSの垣根を超えた開発」についてのノウハウを取り上げたいと思います。

アプリ開発において、長年の業界の悩みが「iOSとAndroidの開発を別々に行わなければならない」ことです。OSごとに開発をしなければならないことは、様々な課題をチームにもたらします。Flutterの採用などでこの問題を乗り越えようとする現場も増えてきてはいると思いますが、まだまだネイティブ開発の需要は少なからずあります。そんなお悩みをお持ちの方々にとって、本記事が少しでも参考になれば幸いです。

対象読者

・ネイティブアプリ開発を行っているチームの方々
・iOS, Androidで開発が別れることに起因する悩みを抱えている方々

グロービスにおけるアプリ開発の紹介

先ほども少し紹介しましたが、グロービスでは「グロービス学び放題」というアプリを内製しています。

画像1

グロービス学び放題は、ビジネスに欠かせない汎用的な知識を動画を見ながら体系的に網羅することができます。アプリは、動画のダウンロードやオフライン再生にも対応しており、スキマ時間を活用して効率的に学習を進めることができます。

無料で一部の動画を見ることができるので、ご興味のある方はぜひお試しください!

App Store / Google Play / Web

開発体制

アプリの開発は「スクラム」のフレームワークに則って行っています。

- プロダクトオーナー (1名)
- モバイルエンジニア (3名)
- デザイナー (2名)
- スクラムマスター (1名 ※エンジニア兼業)

特徴

スクラムのフレームワークに則ったアジャイル開発を行っています。
グロービスのアプリ開発チームの大きな特徴は、「iOS, Androidの2つのOSを跨がる開発が非常にし易くなっている」点です。少し前まではOS間の実装の差異や開発ペースの違いなど、OSを跨いだ開発に問題を抱えていましたが、アーキテクチャやドメイン用語の統一等を行いながら改善を行い、今では複数人のエンジニアが両OSの開発に取り組める状況が作れています。

本記事では、OSを跨いだ開発がしやすくなる経緯を、アプリ開発チームの変遷を交えてご紹介しようと思います。

変遷

アプリ開発チームの変遷を下記の5つのフェーズに分けて紹介します。

1. アプリのリリース
2. 内製開始
3. 機能追加およびUI刷新
4. フルスクラッチ
5. 現在

1. アプリのリリース

リリースにあたり、アプリの開発をiOS, Androidをそれぞれ1名ずつ、社外のエンジニアの方々に開発の依頼をしていました。幸運にもご経験豊富な方々に依頼ができたため、順調にアプリ開発が進む中、グロービスでは内製化を進めるべくアプリエンジニアの採用も開始します。その結果、iOS, Android、デザイナーが1名ずつ社内初のアプリエンジニアがジョインし、内製体制に移行しつつ晴れてリリースを迎えます。

2. 内製開始


アプリのリリース後、外部に依頼していた方々のサポートも受けながら内製開発を進めます。プロダクトオーナーや追加のエンジニアも加わり、アプリ開発のためのスクラムチームが組成されます。
※筆者もこの時期にジョインしました。

3. 機能追加およびUI刷新


スクラム開発を始め、徐々にアプリの改善施策を打つスピードが上がっていきました。
その一方、iOSとAndroidのエンジニアの開発リソースが異なっていたことや、※OS間のドメインが統一されないといった課題も表面化し始めます。

※開発当初、OS毎に別々の社外の方に開発を依頼させていただいていたため、ソースコード内のドメイン用語がOS間で統一することができていませんでした (外注したので自然と起き得ることです。)

4. フルスクラッチ

OS間の開発リソースの差や、ドメインが揃わない課題が浮き彫りになる中、機能差分や品質の差分も出始めます。無理やり開発スピードを上げようとしても負債が溜まり、長期的に見た生産性の向上が望めない状況に陥ってしまいました。

そこで、一方のOSのアプリをフルスクラッチしOS間の差異を減らすことで、今後のアジャイル開発に耐え得るプロダクトにすることをチームで決断します。 (iOSアプリをAndroidに寄せることに。)

結果、AndroidエンジニアもiOSアプリのフルスクラッチ開発に加わり、4ヶ月程の期間を経てフルスクラッチを完了しました。

5. 現在


設計思想とドメインが統一されたことによって、両OS間での仕様相談のハードルがほぼ取り除かれました。また、Androidエンジニアもフルスクラッチに数ヶ月取り組んだことで、iOS開発スキルが向上したともに、設計思想やドメインの統一によってOS関係なくコードレビューを実施できるようになりました。
現在はアプリエンジニアの内2名は両OSの開発を行っており、OSの垣根を超えたアジャイル開発を行う環境が整いつつあります。

アーキテクチャ

変遷の中で触れた、フルスクラッチ後の両OSのアーキテクチャについても紹介をしたいと思います。
グロービス学び放題のアプリでは、現在「レイヤードアーキテクチャ(+DDD) ※下記図の右側」を採用しています。

MVVM_Draft - Copy of アーキテクチャ (1)

このアーキテクチャはレイヤードアーキテクチャにDDD(ドメイン駆動設計)の思想を取り込んだ設計です。
サービス立ち上げ時にAndroid版アプリを開発してくださっていた方が、このアーキテクチャをベースに開発をしてくれていました。事業規模や保守運用のしやすさ、長期的は開発スピード等を鑑みたときにメリットがあったため、フルスクラッチ時にiOS側にも取り入れ、両OS共通で採用しています。

アーキテクチャを揃えたことによって「OS間の垣根を超える」という意味でも様々なメリットがありました。例えば下記の3点です。

1. 開発時にOS間でコンテキストが揃う
2. 相互レビューがしやすくなる
3. 両OSを開発できるエンジニアが増える

フルスクラッチ時に命名規則やドメインモデルの定義などを揃えることができたため、チーム内の仕様相談や設計議論の際にコンテキストのずれが発生しづらくなりました。OS間の開発におけるコンテキストのズレは様々な場面で軋みを産むので重要です。

2、3はアーキテクチャを揃えたことにより、片方のOS(あるいは言語)の知識が乏しい場合でも、ソースコードを読めるようになったことが大きな要因としてあります。一部の機能とUIレイヤーを除き、大半のソースコードはOS間で共通しています。そのため、言語によって書き方は多少異なりますが、異なるOSのソースコードの大部分が相互に理解しやすいため、コードレビューをOS間跨いで実施できるようになりました。このようにOSを跨ぐハードルを低くすることによって、得意でないOSのアプリの開発に挑戦することも促進できます。
(最近では、Androidはあまり経験のないメンバーがiOS、Androidの両OSの開発を進めるなど、嬉しい事例も増えてきました。)

下記が、採用しているアーキテクチャの一部のサンプルです。

MVVM_Draft - Copy of アーキテクチャ

赤枠で囲ったところがOS間でほとんど共通した実装になっています。
UIレイヤーはOS固有の実装になっていますが、基本的にMVPのアーキテクチャで実装をしています。(一部MVVMに移行中)

両OS共に各レイヤーのコミュニケーションはRx(iOS: RxSwift, And: RxJava)を採用し、各レイヤーの結合度を下げるため、DI(iOS: Swinject, And: Dagger)を利用してます。

まとめ

グロービスアプリチームが行ってきた、OS間の垣根を超えた開発をするための歩みを簡単ですが紹介をさせていただきました。私自身も両OSの開発を行っており、両OSのスキルも伸ばせる楽しさを実感しながら仕事ができています。まだまだ両OSをネイティブ開発する現場は多いと思うので、少しでも今回の記事が参考になれば幸いです。

最後に、グロービスでは一緒にプロダクト開発をしてくれるエンジニア・デザイナーのみなさんを募集しています! 「社会人教育 × IT」の分野に興味がある方、ぜひお気軽にお問い合わせください!
https://recruiting-tech.globis.co.jp/entry/

この記事が気に入ったらサポートをしてみませんか?