Open81

FlutterKaigi2024

ykwsykws

これはバイナリデータの送受信なので、シリアライズ化できないと呼べない

シリアライズ化のために処理を分割する

  • Start
  • Wait
  • Cancel

キャンセルのために Start と Wait を分ける

3つの Platform Method を Channel にして提供する

ykwsykws

Flutter Skia レンダリング時に動的にシェーダーをコンパイルするため、動作が重くなるような現象が発生していた

ykwsykws

Impeller のレンダリングフローは事前にコンパイルしてある、ということ?

ykwsykws

Impellerc によって事前にビルドされるから Skia に比べて高速

ykwsykws

Figma から出力するもの

  • 画像
  • レイヤー構造の Json

これらを入力とし Cursor の生成 AI を活用してコード生成する
https://www.cursor.com/

ykwsykws
  • 新規機能開発
  • リファクタリング <- この枠内でリプレイスに挑戦した
ykwsykws
  • Android add to App <- 一部 Flutter
  • Flutter(Android) チーム
  • iOS + Android = Flutter Mobile チーム
  • Flutter Mobile チームが Web の一部開発
  • Flutter Mobile & Web チームに
ykwsykws

Native アプリへの Flutter 部分適用 Add to app

ykwsykws
  • Flutter module を作成
  • Flutter build aar を作成
  • gradle の設定と FlutterEngine の起動を組み込む
ykwsykws

au PAY

  • RxSwift
  • オフショア中心
  • BLoC と相性が良いと判断
ykwsykws

Riverpod の DI でテスタビリティを担保する
それ以上の過剰な DIP は適用しない

ykwsykws

リプレイスに伴い OS 間の差異は Flutter での表現に合わせて統一するようにした

ykwsykws

Flutter へのリプレイスは全面採用から検討を始める
次に部分採用を検討する。部分採用を評価して全面採用か部分採用を元に戻すことを検討する

ニッチな機能がどれくらいあるか
多いのであれば Flutter 採用のメリットは小さくなる

一定レベルの Flutter エンジニアを確保できるか

  • コードレビューが適切にできるか

Flutter エンジニアの確保が困難になっているので自社メンバーの育成を視野に入れる段階では

ykwsykws

オフショア開発の3三交代制で24時間開発が回っている状態を実現
フィードバックループの速度が三倍になる

ykwsykws

Shorebird CLI は flutter コマンドをラップしている

ykwsykws

shorebird init -> release -> preview -> patch -> rollback

Upload Artifacts
Shorebird's Google Cloud Storage

Pro plan $20/month 50,000 patch

ykwsykws

1patch のカウントは Activeユーザ数分(実際にパッチが適用された回数)

ykwsykws

Dart はシングルスレッド
イベントループとキューで処理

  • イベントキュー
  • マイクロタスクキュー
ykwsykws
  • 同期処理 Isolate で別スレッドを作る
  • 非同期処理 マイクロタスクキュー
    • 非同期処理内でも同期処理があったら Isolate を使うべき

Isolate の利用を推奨がドキュメントに記載あり。 I/O をブロックするような処理が対象

  • Parsing and decoding exceptionally large JSON blobs.
  • Processing and compressing photos, audio and video.
  • Converting audio and video files.
  • Performing complex searching and filtering on large lists or within file systems.
  • Performing I/O, such as communicating with a database.
  • Handling a large volume of network requests.
ykwsykws

Isolate の生成コストは高い
そのため、不適切な利用は処理を遅くする可能性がある

ykwsykws

Android では Don't keep activities を有効にして確認する

ykwsykws

Flutter からのネイティブ処理は Platform Channel がある

ykwsykws

git コミットハッシュをビルド時に埋め込むようなこともできる