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