NTTドコモR&Dの技術ブログです。

NativeアプリをFlutterに移行してみた!実際に感じたメリット&デメリット


はじめに

ドコモには多くのサービスやアプリがあります。特に新規サービスやアプリを立ち上げる際は、開発だけではなく社内ルールの準拠にも時間とコストがかかってしまいます。

私たちのプロジェクトは、「社員でも簡単に、早くアプリ開発!」をモットーに社内のアプリ開発に必要な決まり事やルールに沿ったベースアプリ(パッケージ)を社内向けに提供して、開発効率の向上やコスト削減に貢献しています。 このベースアプリを利用することで、社内のアプリ開発がよりスムーズになることを目指しています。 エンドユーザー向けのアプリを直接開発しているわけではありませんが、パッケージを利用する社内プロジェクトの方々へ、より早く品質の高いパッケージを提供するため、開発の効率化が特に求められる存在です。

既存のパッケージでは、それぞれのプラットフォーム(Android、iOS)ごとに個別のコードベースを持っており、メンテナンスや新機能の追加に多くの時間を要していました。同じく利用いただいているサービスの方も同様です。 そのため、より効率的かつ効果的な方法を模索していた時に出会ったのがFlutterです。

今回は、実際に既存のNativeアプリをFlutterに移行してみて分かったメリットやデメリットをシェアしたいと思います。


Flutterとは

Flutterは、Googleが開発したオープンソースのUI開発キットです。特に、iOSとAndroid向けのモバイルアプリ開発を目的とし、「Dart」というプログラミング言語を用いています。

Flutterの最大の特徴は、1つのコードベースで複数のプラットフォーム(Android、iOS、Web)に同時に対応できることです。 そのため、開発者は効率的に開発を進めつつ、Nativeアプリに近いパフォーマンスを実現することができます。

私たちのプロジェクトでは、既存のNativeアプリ開発のメンテナンスや機能追加で手間がかかっていたため、Flutterで効率的に開発できるか検証し、導入に至りました。


Flutterを使ってみて感じたメリット

UI/UXの向上

FlutterはGoogleが提供するMaterialデザインに基づいたフレームワークで、UIデザインにも大幅な自由度があり直感的で使いやすいアプリを実現できます。 私たちもこのMaterialデザインを活用し、AndroidとiOSの両方で共通デザインを提供することができました。

また、プログラムの変更を即座に画面で確認できる「Hot Reload」機能もありUIを変更した際などスムーズに変更をアプリに反映でき開発時間も短縮されました。 ※Nativeアプリ開発の場合は再度ビルドし反映させる必要があります

コードのシングルベース管理

Flutterを採用した最大の利点は、クロスプラットフォーム開発の実現です。一度のコーディングでAndroidとiOSの両方に対応可能になったため、作業効率が飛躍的に向上しました。 これに伴い、プログラムのメンテナンス性も大幅に改善され、進捗の一元管理も可能となりました。

また、私たちの提供しているパッケージを利用しているサービス担当者からも、アプリの開発が同時に進み進捗管理が一元化されたことが大きなメリットだと伺っています

豊富なパッケージ

Flutterには多くの有用なパッケージがあり、機能追加を行う際もパッケージを用いて容易に実装できました。 例えば、私たちのチームでは「InAppReview」機能(ユーザーがアプリから離れることなくアプリ内で直接ストアのレビューを投稿できる機能)を実装する際に、パッケージのメソッドを1つ呼び出すのみでiOS/AndroidのInAppReviewの表示が可能になりました。これ以外にもさまざまなパッケージが用意されており、両OS同時に反映できるためさらに開発稼働削減や品質にもつながると思います。

import 'package:in_app_review/in_app_review.dart';

final InAppReview inAppReview = InAppReview.instance;

// レビュー投稿機能が利用可能かチェック
if (await inAppReview.isAvailable()) {
    // レビュー投稿をリクエスト
    inAppReview.requestReview();
}

InAppReview機能


Flutterのデメリット

導入時の学習コスト

私たちのチーム全員が初めて触る言語ということもあり、多少学習コストがかかりました。 ただ、言語はDartでJavaScriptにも似ている点があることで親しみやすく、公式サイトにも多くの参考ドキュメントもあるため開発に役立てることができます。

単純に工数が半分にはならない

クロスプラットフォームとのことでAndroid、iOSの同時開発が可能になり、単純に工数が半分になるのではと思われるかもしれませんが、実際はそうではありません。 OS独自の機能やFlutterが対応していない場合など、OSごとに実装を行う必要があるため完全に開発稼働が半分になるわけではありませんでした。 OSに特化した機能などを多く利用する際は、FlutterよりもNative開発の方が適している可能性もあると思います。 ただ、メリット部分にも記載している通り豊富なパッケージも展開されておりクロスプラットフォーム以外での利点もありますので Flutterのみで単純なアプリを開発する場合は開発稼働が半分以下になるのではないかと予測されます。


まとめと今後の展望

Flutterを選んで良かった!

今回のプロジェクトを通じて、Flutterを選んで本当に良かったです。

開発効率が向上しただけではなくデザイン性も向上し、今後もさらにUX向上に努めていきたいと思っています。 開発はもちろん、進捗も一元管理できるようになったので、大きなメリットがあったと感じています。

Flutterだけの話ではないですが、私たちのチームでは新たなことに挑戦してみてモチベーション高く取り組むことができ、 チームのコミュニケーションもさらに上がったと実感しています。

NativeアプリからFlutterに移行するには、初期開発稼働がどうしてもかかってしまう部分はありますが、その先を見据えながらぜひ検討いただければと思います。