はじめまして!バックエンドエンジニアで、主にMyReferプロダクトのバックエンド開発を担当している政家です。
MyReferプロダクトでは、従業員の方がリファラル活動を行いやすくするために、Webブラウザ版だけでなくモバイルアプリも提供しています。
〜モバイルアプリイメージ〜
そのモバイルアプリはこれまで、iOSはSwift、AndroidはKotlinで開発をしてきましたが、 昨年2023年7月、Flutterへの移植を行い、リリースしました。
今回は、Flutterに移植した背景や、どのようにFlutter移植を進めていったのか、移植後に感じているメリットやデメリットに関してご紹介したいと思います。
なぜFlutterへの移植を行なったのか?
移植前の開発体制
Flutter移植前、TalentXでは、iOS、Android共に、主に業務委託の方に入ってもらって開発を手伝ってもらっていました。 その中で、いくつかの課題を抱えていて、それらの課題を解決するために、Flutter移植という選択をとりました。
移植前の課題
大きく課題を分けるとコスト面、品質面、運用面で課題がありました。
コスト面
- アプリの特性上、常に開発が走っているわけでは無く、プロジェクトとプロジェクトの間で業務委託の方が手隙になってしまう
- 別々の言語で開発するため、開発コストが(クロスプラットフォームと比べて)倍かかる
品質面
- 別々の言語で開発するため、iOS, Android間での仕様差異が発生しやすい
運用面
- 1名での開発 / 運用で属人化されていため、業務委託の方が変わるとナレッジの共有が難しかった
- 業務委託契約の方に属人化されていたため、正社員が対応するべき、緊急時など素早い動きが取り辛かった
- 別々の言語だったため、正社員がキャッチアップしづらい状況だった
これらの課題感が徐々に大きくなってきた所で、世の中的にも実績が増えてきたFlutterアプリへの移植を検討し、移植プロジェクトがスタートしました。
どのようにFlutter移植を進めていったのか
移植開始が2022年5月から開始し、2023年7月にリリースを行ったので、移植期間は約1年2ヶ月でした。 その期間中の、具体的なチーム体制や進め方についてご紹介していきます。
チーム体制
具体的な体制は、下記のメンバー構成でした。
- 業務委託契約のエンジニア:1名
- 正社員開発エンジニア:2名
- 正社員QAエンジニア:1名
正社員に関してですが、元々Flutterの経験者がいなかったので、社内でFlutterに興味があるエンジニアを集いました。 結果、バックエンドエンジニア1名(自分)とフロントエンジニア1名が手をあげ、上記のチームが構成されたという感じになります。
上記の体制で良かった点
- バックエンドエンジニアとフロントエンジニアが1名ずついた事で、既存のバックエンド実装がどうなっているのか、Webではどのような仕様になっているかなどの確認がスムーズだった点
- Flutterに興味のあるメンバーだったため、プライベートでのキャッチアップなどがスムーズで、モチベーションを高く保てた点
上記の体制での課題点
- 移植前のアプリを開発しているエンジニアがおらず、移植前のアプリの仕様を理解するのに時間がかかってしまった点
進め方
下記のような流れで、プロジェクトが開始しました。
課題と改善点①
元々アプリの仕様書は作成されていなかったため、新たに仕様書を作成する工数を削減するために、 業務委託の方には、本番で動いているアプリの動きと、既存のコードを確認してもらいながら、移植の実装をお願いしていました。
ただ、仕様書がない事で、「UIの出し分けや細かい仕様の認識齟齬」が発生したり、既存実装の確認に工数が意外とかかっている事が途中で判明しました。
そのため、正社員2名で簡単な仕様書を一気に作り、仕様書を元に開発を行うように変更しました。
〜仕様書一部抜粋〜
その結果、認識齟齬を減らす事と、既存実装の確認工数を減らす事ができ、開発効率が向上しました!
課題と改善点②
正社員2名に関しては、冒頭記載していた通り、主な担当領域がバックエンドとフロントエンドだったので、そちらのタスクと並行する形でFlutterの開発タスクも行っていました。
ただ、Flutter未経験という事もあり、片手間でのキャッチアップだとスイッチングコストがかかり、成長スピードが遅く、開発効率が悪くなっていました。
そんな事もあり、途中から基本的にはFlutter専任として数ヶ月実装を行う形に変更しました。
その結果、スイッチングコストが減った事で、キャッチアップスピードが向上し、結果として開発効率が向上しました!
【移植後】
移植後に感じているメリット、デメリット
メリット
移植前に感じていた下記の課題は、全て改善されているのでメリットを感じています。
- コスト面:開発コストが50%削減できた
- 品質面:AndroidとiOSでの仕様差異が無くなった
- 運用面:正社員を中心とした運用体制が作る事ができた
なので、同じような悩みを持っているチームは取り組む価値があると思います。
デメリット
- パフォーマンス
これは、実装の問題もあると思いますが、性能の低い古い端末などで、旧アプリと比較して性能が落ちる現象を発生させてしまったので、唯一デメリットとして感じています。
今後のチャレンジ
いくつかありますが、正社員がアプリを開発できる体制のベースができてきたため、今後は
- 上記デメリットで挙げたパフォーマンスの問題の改善
- アプリチーム体制の強化
- CI/CDを利用した、安定かつ高速なリリース方法の確立
を行い、更に開発が行いやすい環境を整えていければと思っています。
まとめ
今回は、「モバイルアプリをSwift、Kotlinから、Flutterに移植した話」をご紹介しました。
近年、求められるプロダクトのアップデート速度が上がってきている中で、iOS,Android同時に開発できるFlutterは 1つの解決策になるのではと思っています。
まだまだ課題は多いですが、Flutter移植を目指しているチームの方々に少しでも参考になる記事になっていれば幸いです。
最後に
TalentXでは一緒に働く仲間を募集しております。
カジュアル面談も行っていますので気になる方はぜひご応募いただければ幸いです!