id:kikuchy です。
先日開催されたStampさんのイベント PORT Firebase × Flutter を弊社Diverseオフィスで開催 & kikuchyが登壇いたしました。
PORTは主にFirebase関連の勉強会を企画されているイベントプロジェクトで、過去にも様々な企業やテクノロジとのコラボ回を実施されています。
今回はFirebaseとFlutterの組み合わせ、というテーマでした。
#PORTJP
— nori 村本章憲 (@1amageek) 2019年6月26日
Firebase x Flutter https://t.co/Hp9FavSVDx
(当日のライブストリーミング)
kikuchyは『Flutter x Firebase Crashlytics』というタイトルで、
FlutterアプリケーションにクラッシュレポートサービスのCrashlyticisを導入して運用した際に判明した問題とTipsを紹介させていただきました。
導入対象のアプリは、先日このブログでもお伝えした、婚活サービスのyoubrideです。
実務で使用する際の運用方法についてお話できたので、Flutter開発のお役にたてば、と思います。
次の登壇者のパネルディスカッションでは、アプリのアーキテクチャ、youbirdeアプリでのテスト構成、CIの構成、クロスプラットフォーム採用の是非などについてもお話させていただきました。
FlutterはFirebaseなどを使ったプロトタイピングと相性が良いので、ビジネスロジックの状態をStatefulWidgetに押し込めたりしがちです。
BLoCパターンやScopedModelパターンなどでWidget外にビジネスロジックの状態を切り出し、StatefulWidgetには表示ロジックの状態管理に徹してもらうようにすると、状態の抽象化や結合度の低下に貢献できるでしょう。
youbrideではBitriseをCIに使用していて、PR作成時にテストの実行、PRのマージ時にビルドとデプロイを自動で行うようにしています。
ビジネスロジックの単体テストを自動で行っており、実行も2〜3分程度で終わるようになっています。
プロジェクトの開始時に、まずは「ビルドが通るか」だけを確認するタスクのみでもCIを導入して、使えるようにしておくと良いでしょう。
後からCI環境を整備すると面倒になりがちであったり、リポジトリに動作しない状態のコードを混ぜる危険性を少なくできるためです。
また、FlutterはワンソースでiOS/Android両方に対応できることがウリの一つですが、結局プラットフォーム依存の機能を使用する場合やビルド周りなどでそれぞれの知識が必要になります。
そのため、慣れていないのであれば、iOS/Androidのどちらか一方に注力する選択肢を取ったほうが無難でしょう。
(youbrideチームは、クライアント開発できるエンジニアが全員iOS/Android両方ともできたのでうまく行っています)
fultterから開発すべきか?swiftUIとかもあるけど?
— gon / PRとHR (@goooongonn) 2019年6月26日
スピード重視かつチームにもよる。
日本ならユーザーの多いiOS、グローバル(中国、インド)はAndroidが良いのでは。
fultterを無理に採用する必要はない。クロスプラットフォーム専用の知識も必要になりコストも2倍になるため。#PORTJP
懇親会ではクライアントでのgRPC採用の話題で大いに盛り上がりました。
#PORTJP pic.twitter.com/9AMsToaVbQ
— nori 村本章憲 (@1amageek) 2019年6月26日
(懇親会の様子)
gRPCは共通の定義ファイルから、サーバー/クライアントのRPCに関わるコードを自動生成してくれるため、
APIの定義から実装をとても楽に行なえます。
また、やり取りするデータはProtocolBuffersでシリアライズされているため、JSONと比べると軽量で、通信時間の短縮も見込めます。
youbrideでは将来的にWebサイトもPWA化し、フロント <-> サーバの通信はgRPC Web(ブラウザ上で使用するgRPC)で行う案も出てきていたので、
gRPC Webではまだ双方向のリアルタイムストリーミングができていない、などの制限があるというお話を聞くことができて大変助かりました。
Flutterでマッチングアプリの開発をしてみたい方は @kikuchy または他の弊社エンジニアへ、お気軽にDMやリプライをください!
まずはご一緒にご飯を食べにいきましょう!!