dip Engineer Blog

Engineer Blog
ディップ株式会社のエンジニアによる技術ブログです。
弊社はバイトル・はたらこねっとなど様々なサービスを運営しています。

バイトルPROがFlutterを採用した理由

はじめに

こんにちは。iOSエンジニアの@satoshi-babaです。

ディップ株式会社はプロ志向人材の為の求人サイトとしてバイトルPROを2021年5月19日にリリースしました。
www.baitorupro.com

具体的な開発期間は話せないのですが、要件定義からリリースまでおよそ1年以上かかってのリリースとなり、
開発体制も50人を軽く超えていたと思います。

もちろんアプリも提供しておりまして、それがFlutterで実装されているわけですが、
弊社のような事業会社が、開発実績が当時少なかったFlutter採用に踏み切った理由を話したいと思います。

アプリの開発手法

まずアプリの開発手法ですが大きく分けて、「ネイティブアプリ」「ハイブリッドアプリ」「クロスプラットフォームアプリ」の3種類に分けられます。
(ざっくりしたまとめですので参考程度に...)

ネイティブアプリ * 一般的な開発手法でiOSはSwift、AndroidはKotlinで開発される。 * 100%ネイティブで作るので細かいカスタマイズがしやすい。 * iOSとAndroidでそれぞれ開発する為、開発コスト/運用コストが高くなりがち。

ハイブリッドアプリ * WebView上でHTML/JS/CSSを使用して実装していく。 * カメラなどのハードに関するところはネイティブのAPIを呼び出して実装する。(故にWebとアプリのいいところ取りでハイブリッド) * 言語的/構造上の特性により動作速度が遅くなりがちで、カスタマイズも効きづらい。

クロスプラットフォームアプリ * AndroidとiOS、またはWebやUWPを対象として、複数のOSで動作するアプリを1つのソースで実装する。 * ロジックの共通化がしやすいが、OSごとに特徴的な機能を実装するには不向き。 * いくつかフレームワークが登場しているが、これといって定着していない。(個人的な感想です)

Flutterの選定理由

なぜクロスプラットフォームで、かつFlutterを選択したかですが、理由をいくつかあげていきます。

1. ワンソースによる工数削減

最初に考えたのがネイティブかクロスプラットフォームかです。

当時は開発期間やリリース時期がある程度決まっており、十分なリソースの確保が難しいと感じており、
より少人数で期間内に終わらせられる可能性が高いクロスプラットフォームにしました。

ワンソースで開発することで業務ロジックの修正が入ったり、仕様の調整が発生してもなんとかなると思いました。
結果として良くも悪くも上記の事態が多く発生しましたが、スケジュールの遅延を最小限に抑えることができました。

2. プロダクトへの適性

クロスプラットフォームで開発する時に個人的に考えることは、後からiOSとAndroidで機能を分けるとか細かいカスタマイズが発生しないかです。
バイトルPROではWEBとアプリで多少変えることはありますが、iOSとAndroidは同じものを作るというのが要件としてありました。
カスタマイズすることになっても、大きくは変えないという方針が当初あったのでプロダクトに合致していました。

3. クロスプラットフォーム界隈での熱量

次にクロスプラットフォームとして何を採用するかです。
XamarinやReact Nativeも候補として上がっていましたが、最終的には界隈での熱量が半端ないFlutterを採用しました。

選定当時は入力フォームに日本語を入力するとバグったり、WebViewに不具合がありましたが、
そのようばバグもコミッターたちが大量のPRを投げつけて直していたので勝ち目があると感じました。

開発元がGoogleで同社が開発しているアプリ自体もFlutterに置き換えられているという話もあり、
向こう5年はFlutterが急速に廃れることはないと思いました。

4. バイトルアプリとの兼ね合い

バイトルPROはバイトルと似た動作をする箇所もあり、
バイトルアプリからメンバーをアサインし直すことも検討しました。

FlutterはDart言語で書かれており、javaに似た書き心地となっているので、
Androidの開発メンバーをアサインしやすかったです。

なぜか直近でバイトルにジョインしてきたメンバーにもFlutter経験者が何名かいて、
最悪こっちのリソースを使えればなんとかなるという気持ちになれたのも安心材料になりました。

結果

結果としてはスケジュールも大きく外れることはなく、開発は最後まで順調に進めることができました。
開発の途中でWebViewの不具合に悩まされることも多かったですが、issueやPRを漁ると必ずと言っていいほどすでに修正案が出ていて助けられました。

Dartがjavaに似ているからという理由でAndroid経験者を多くアサインした結果、iOS側がうまくビルドできない状況が多発するなどトラブルもありましたが、
これについてはチームに1名でもiOS経験メンバーがいればだいたいなんとかなります。

Flutterは必ずしも最適な選択肢とは言えないですが、今回のようにプロダクトに合致した場合は選択する価値ありだと思いました。
Flutterはいいぞ!

利用技術

Dart
https://dart.dev/guides

Flutter
https://flutter.dev/

著者

dippeople.dip-net.jp