eaglesakuraの技術ブログ

技術的な話題とか、メモとか。

FlutterとXamarinとAndroid Nativeと

Flutter を使う機会があったので、所管をざっくりと。

個人的に思うFlutterを使う際に留意すべき点

  • FlutterのレンダリングSkia ベースの独自エンジンで動いている
  • Android的に言えば、どんな画面もView1枚である
  • Plugin実装を読むと、 TextureId を取得してカスタムレンダリングしているものも多い
  • マルチプラットフォーム対応 でありながら、 よく使われる WebView とのかみ合わせが悪い
    • WebViewの上にFlutterのViewを置くことが難しい
      • Pluginをforkして頑張るか?
    • これが を示すかは、人それぞれである
  • レンダリングOpenGLベースとは限らない ので、iOS/Android両対応と言いつつ気軽に「おっしゃーごりっとOpenGLで書くかー」みたいなことはできない
    • iOSはDeprecatedである
    • Metal Native or Vulkan on Metal で頑張る
  • ビルドが圧倒的に簡単である
    • iOS、テメーは辛い
    • Mac必須。CIもCircleCIに個別連絡 -> Mac有効化でメンドイ。CIのVM起動も遅い
    • 手軽にDockerでポンとビルド用コンテナに放り込めれば楽なのだが
    • iOS、テメーは辛い
  • flutter doctor コマンドが良く出来てる
    • 何かあったらとりあえずdoctorすれば良い
  • IDEのサポートが未熟
    • hoge.var で左辺生成とか標準にない
    • Dart の好き嫌いは置いとく
    • Widget組立時に、末尾に // Text みたいなフッターを自動的につける(表示上のみ)けど、たまにウザい
      • 個人的にはコードとレイアウトは切り離したいが、郷に入っては郷に従おう
  • Flutterが提供するWidgetやUI原則に従う限り、Flutterは強い
    • そこから外れるなら、外れる可能性があるなら、外れなければならないのなら?
    • 明日に向かってドロップキック
    • 頭を抱えて予算とろう

Xamarinとどっちを使う?

  • Flutterが便利なのは、Pluginがかなり充実していて、なおかつ各プラットフォームの事情をある程度知らなくても良いこと
    • 自作Pluginが必要になると、途端につらい
  • Android/iOSの両方に関して深い知見があるのなら、Xamarinもまた選択肢として残ると思う
    • 言語がC#で統一できるということは、言語の切替時(Dart/Kotlin/Java/Gradle/Swift...)の頭の切り替えにかかる時間が少なくなる
    • だけど開発環境辛い。はっ倒す。

Android / iOS Nativeは?

  • 大抵のことができる
  • 無理なもんは無理
  • 予算の光あれ