Nubank社エンジニアチームから学ぶ、Flutterによるチームのスケールアップ術

ラテンアメリカ最大のネオバンクであるNubank社のエンジニアの方たちへの追跡調査を行い、急成長中であるフィンテック企業でFlutterがどのようにアプリのスケールアップに貢献したのか、その概要を皆様にお届けいいたします。


1年以上前に、Nubank社のエンジニアリング・ディレクターであるAlexandre Freire氏が、Flutterを使用し始めた初期の経験と、なぜクロスプラットフォーム・アプリの主要技術としてFlutterを使うことにしたのかについて
記事を執筆されました。

彼と、FlutterコアチームのエンジニアリングマネージャーであるNoe Branagan氏、そしてNubank社の他のエンジニアの方たちを追跡調査した結果、急成長中であるフィンテック企業でFlutterがどのようにアプリのスケールアップに貢献したのか、その概要を皆様にお伝えすることにしました。

なぜFlutter?

Nubank社はブラジルのネオバンク(インターネット専業銀行)で、ラテンアメリカ最大のフィンテック企業です。同社が成長し(アジア圏を除く)最大の独立系デジタルバンクとなったことにより、クレジットカードを超越した新たなプロダクトの開発が優先されるようになります。そして新規に立ち上がったチームは、高品質なアプリを迅速に出荷する方法について考える必要がありました。

新たなテクノロジーの導入を決定する前に、チームは以下の5つの要素に基づいて、明確な優先順位を決めました。

  1. デベロッパー・エクスペリエンス:
    開発者が価値を生み出し、生産性を高めることができるか?
  2. 長期的な実行可能性:
    そのプラットフォームは、長期的にクリエイターに支持されるのか?
  3. プラットフォームに特化していないこと:
    AndroidとiOSの両方においてコードの見た目や動作が同様で、OS固有の問題の発生が少ないか?
  4. 増加的抽象コスト:
    プラットフォームを拡張して新しいコンポーネントを追加するのがどれだけ大変であるか?
  5. 非線形抽象化のリスク:
    新しいコンポーネントをサポートするために、コードベース全体に大規模な変更を加える必要があるだろうか?

確証を得た後、画面へのレンダリングを必要としないユニットテスト、統合テスト、エンドツーエンドテスト用に内蔵されたテストインフラストラクチャなどの優れたテスト機能を提供するFlutterがチームを納得させました。また、他の選択肢と比較しても、hot reload 機能や公式ドキュメントの充実性、APIの安定性など、全体的にFlutterの開発環境が優れていることがわかりました。

Screenshot 2021-01-28 at 12.52.42.png

1年が経過した今 ― Flutterの拡張性は?

今でもFlutterに満足していますか?

Nubankの皆がFlutterが大好きです。アプリ開発について語る上で、Flutterは私たちの文化の一部になっていることは確かです。また、デベロッパーエクスペリエンスを向上させる上で多くの利点が得られるため、Flutter Webも活用しています。製品チームでは多くの戦略的な決定を行いましたが、それはチーム全体の速度と効率性に影響を与えているほか、より多くのエンジニアが1つの言語を共有することでコードベースで協力する機会を与えくれています。チームは、この技術を簡単に採用できたことやFlutterを利用して開発されたすべての新機能に感動しています。そして当社ではDartの経験値が増えており、アプリ開発者がmonorepoで作業する際に使用するCLIのように、モバイル開発用の新しいツールを作成する武器の一部となっています。(Alexandre Freire氏)


Flutterを導入してから、アプリ開発のプロセスで変化したことはありますか?

Flutterの採用を決めてから、開発スピードをさらに上げるために、Flutter Desktopを使った実験的な社内開発者ツールを採用しました。このツールは、エミュレータをスキップすることでラップトップのバッテリー使用量を削減し、さまざまなサイズのデバイスでの迅速なテストに役立っています。私たちのモバイルインフラと開発効率は、FlutterとDart、そしてこの1年で導入された多くの新しい開発者専用の機能によって、常に改善されています。(Noe Branagan氏)

当時、知っていればよかったと思うことはありますか?

4つの異なる製品を完全にサポートするような、大きくて複雑なアプリを移行するキャパシティについては少し甘かったと思います。我々はまだ発展途上です―当社のアプリはまだ100%Flutter製ではないのです。私たちは最近、モジュールの所有権をチームに割り当てる完全なマップを作成し、移行を完了するための計画の追跡を開始しました。移行を完了させるという技術的な目標に向けて、社内で調整を行っています。特に、現在の状態で非常によく機能しているフローや画面(ネイティブのObjective-C、Swift、Java、Kotlin、React Native)で、近い将来アップデート計画がないものについては、優先順位の決定の難しさに直面しています。

下の図は、すべてのアプリのフローと画面を示しており、サイズはアプリの複雑さを表しています。紫のマークはすでに移行したもの、緑のマークは今年中に移行する予定のものです。

(Alexandre氏)
Screenshot 2021-01-25 at 16.47.51.png

Flutter採用によりNubank社の規模はどれほど大きくなりましたか?

Nubankの急成長に伴い、当社のエンジニアリングチームは現在も規模を拡張しており、常に採用活動を行っています。これは、新機能をお客様に提供する頻度を高める必要があることを意味しており、そのためにはより多くのキャパシティとリソースが必要になります。Flutterをメインテクノロジーとして採用したことで、その障壁が大幅に下がり、新しいエンジニアが入社後数日でアプリに貢献できるようになりました。マージの成功率はネイティブと比較して30%向上し、全プラットフォームの平均70.45分に対し、FlutterのPRは9.9分でマージされています。(Noe氏)

Flutterのおかげで、生命保険アプリをわずか3カ月で立ち上げることができました。このフレームワークを使う前は、新製品の開発と発売には数ヶ月から1年かかることもありました。Flutterを使うことで、両方のプラットフォームの開発を加速することができています。また、モバイルプラットフォームから作られたツールも大きな違いをもたらしてくれています。Flutterを使わずこの機能を実現するというシナリオは考えられません。

(Reinaldo Moreira氏 -モバイルエンジニア-)

Screenshot 2021-01-28 at 12.56.06.png

FlutterがNubank社のユースケースに合致している主な機能は何ですか?

製品開発手法に一貫性を持たせてくれています。当社には独自のデザインシステムがあり、製品チームがUIコンポーネントを拡張・カスタマイズすることができています。また、「hot reload」機能のようなバックエンド主導のツールや、ローカリゼーション l10n のサポートも充実しています。また、新しいコンテンツをアプリに動的に配信するツールも作成できました ― アプリの新バージョンのリリースやパフォーマンスを犠牲にすることなく、ローカリゼーションを管理できるようになりました。Flutterを使用することで、観測性の高いインフラを構築し、担当チームへ直接アラートを送信したり、機能やパッケージごとにアプリのサイズを測定、他のシステムとより多くのメトリクスを関連付けることができるようになりました。(Noe氏)

主なメリットは、Flutterの学習曲線が速いため、モバイル以外のエンジニアでも数週間で生産性が向上しました。複数のプロダクトチームでFlutterが採用されたことで、私たちは皆、素晴らしく新しい慣例が生まれていることに気づき、コードベースの標準化を始めました

(Marcelo Theodoro氏 -エンジニアリングマネージャー-)

アプリをFlutterに移行する際、他に考慮すべき点はありますか?

今回の移行では、アプリのコード以外にも、多くのツールやサポートが必要になりました。当社はブラジルとメキシコで事業を展開しており、すでにコロンビアでの事業も発表しているため、アプリのコピーや翻訳をすべて処理するサービスを作りました。また、社内ソリューションの大部分を利用して、Dartで書かれたCLIのような開発ツールや、ビルド、テスト、継続的デプロイメントのパイプラインを構築しました。私たちは、ネイティブ、React Native、Flutterが混在した状態でアプリが存在するというこの現実に適応しなければなりませんでしたが、移行が完了すれば、このエコシステムを簡素化できることを期待しています。(Alexandre氏)
すべてがバラ色というわけではありません。アーリーアダプターだった所以、アプリのレガシー的なネイティブの部分との統合において問題が発生する時間はすぐに来ました。ここで学んだ重要なことは、製品チームをサポートするプラットフォームチームを持つことが、こういった類のバグや複雑なパフォーマンスの問題を解決するのに不可欠だということです。また、アプリがフランケンシュタインの怪物みたいになるのを防ぐために、すべてのチームに広くトレーニングを提供することが重要であることがわかりました。(Marcelo Theodoro氏)

翻訳元

No items found.
The Mobile DevOps Newsletter

Explore more topics

App Development

Learn how to optimize your mobile app deployment processes for iOS, Android, Flutter, ReactNative, and more

Bitrise & Community

Check out the latest from Bitrise and the community. Learn about the upcoming mobile events, employee spotlights, women in tech, and more

Mobile App Releases

Learn how to release faster, better apps on the App Store, Google Play Store, Huawei AppGallery, and other app stores

Mobile DevOps

Learn Mobile DevOps best practices such as DevOps for iOS, Android, and industry-specific DevOps tips for mobile engineers

Mobile Testing & Security

Learn how to optimize mobile testing and security — from automated security checks to robust mobile testing and more.

Product Updates

Check out the latest product updates from Bitrise — Build Insights updates, product news, and more.

The Mobile DevOps Newsletter

Join 1000s of your peers. Sign up to receive Mobile DevOps tips, news, and best practice guides once every two weeks.