FlutterKaigi2024
Flutter Job Board
基調講演
Dart Timer cancel
Dart delayed cancel できない
Cooperative canncellation
Flutter からネイティブのコードを呼ぶ
これはバイナリデータの送受信なので、シリアライズ化できないと呼べない
シリアライズ化のために処理を分割する
- Start
- Wait
- Cancel
キャンセルのために Start と Wait を分ける
3つの Platform Method を Channel にして提供する
Riverepod での cancel
非同期処理の中だけ発生するコンテキストを扱える
Compose Multiplatform は Skiko 経由で Skia を利用してレンダリングしている
明示的に Skiko を使っていると書いてある箇所が見つからなくて、リリースノートに記載があった
The version of Skia used by Compose Multiplatform, via Skiko, has been updated to Milestone 126.
Flutter からは Android/iOS それぞれのデバイス抽象層へ命令する
Android - Vulkan
iOS - Metal
EntityPass はこの辺り?
RenderPass
Flutter がレンダリングする直前の情報
Flutter Skia レンダリング時に動的にシェーダーをコンパイルするため、動作が重くなるような現象が発生していた
Impeller のレンダリングフローは事前にコンパイルしてある、ということ?
Impellerc によって事前にビルドされるから Skia に比べて高速
Flutter GoldenTest から画面の差分をチェックしてその差分を Figma REST API で Figma にフィードバックする
Figma から出力するもの
- 画像
- レイヤー構造の Json
これらを入力とし Cursor の生成 AI を活用してコード生成する
Native からの Flutter へリプレイス
- 新規機能開発
- リファクタリング <- この枠内でリプレイスに挑戦した
- Android add to App <- 一部 Flutter
- Flutter(Android) チーム
- iOS + Android = Flutter Mobile チーム
- Flutter Mobile チームが Web の一部開発
- Flutter Mobile & Web チームに
Native アプリへの Flutter 部分適用 Add to app
- Flutter module を作成
- Flutter build aar を作成
- gradle の設定と FlutterEngine の起動を組み込む
au PAY
- RxSwift
- オフショア中心
- BLoC と相性が良いと判断
モンゴルの会社
Native から Flutter へのリプレイス経験あり
au PAY for BIZ で Flutter へのフルリプレイス
Riverpod の DI でテスタビリティを担保する
それ以上の過剰な DIP は適用しない
リプレイスに伴い OS 間の差異は Flutter での表現に合わせて統一するようにした
Flutter へのリプレイスは全面採用から検討を始める
次に部分採用を検討する。部分採用を評価して全面採用か部分採用を元に戻すことを検討する
ニッチな機能がどれくらいあるか
多いのであれば Flutter 採用のメリットは小さくなる
一定レベルの Flutter エンジニアを確保できるか
- コードレビューが適切にできるか
Flutter エンジニアの確保が困難になっているので自社メンバーの育成を視野に入れる段階では
オフショア開発の3三交代制で24時間開発が回っている状態を実現
フィードバックループの速度が三倍になる
Shorebird は Flutter を fork して update 機能を入れた
Flutter の Issue としては Open のまま残っている
Shorebird CLI は flutter コマンドをラップしている
shorebird init -> release -> preview -> patch -> rollback
Upload Artifacts
Shorebird's Google Cloud Storage
Pro plan $20/month 50,000 patch
1patch のカウントは Activeユーザ数分(実際にパッチが適用された回数)
Dart はシングルスレッド
イベントループとキューで処理
- イベントキュー
- マイクロタスクキュー
- 同期処理 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.
Isolate の生成コストは高い
そのため、不適切な利用は処理を遅くする可能性がある
Android では Don't keep activities を有効にして確認する
このスライドは Flutter Deck で作成
これかな
Flutter からのネイティブ処理は Platform Channel がある
Dart には FFI がある
FFI は Platform ごとの処理に手間がかかる
hook スクリプト
関係ある?
git コミットハッシュをビルド時に埋め込むようなこともできる
まだ experimental