iOSネイティブアプリ开発者から见たFlutter

GCP(Google Cloud Platform)やmBaaSのFirebaseが人気を博していたり​​,Google I / O 2018も大いに盛り上がるなど,最近のGoogleの开発者ウケがかなり良く素晴ら​​しいサービスを连発しているなと感じていたのもまだ,5月くらいからFlutterに取り组み始めました。まだ特にFlutter制のアプリリリースなどはしていませんが,それを见据える程度には本気でやっています💪

Flutter –创纪录的美丽本机应用程序

Flutter是Google的移动UI框架,可在创纪录的时间内在iOS和Android上制作高质量的本地体验。

FlutterはAndroidアプリ开発者ウケの方が良くて,iOSネイティブアプリ开発者が本気で触っている事例を国内ではあまり见闻きしません。そのためか,周りからも「iOSネイティブアプリが作れるのになぜFlutterにようなこ手を出すの?」のようなことを闻かれることがちょくちょくあります。まずはそのあたりから详しく述べていきます。

一番初めのきっかけはDroidKaigi 2018の発表

DroidKaigi 2018用のiOSアプリがFlutterで作られていて,konifarさんのこちらのスライドを见たりPodcastを聴いて知ったのが初めかもしれません。

Fl现时点ではそれらiOSネイティブUIを模したWidgetのクオリティ(再现度)はあまり高くなく量も十分では无いと感じました。Flutterは今はまだMaterial Components Widgetsが偏重していて,iOSっぽいUIへのケアはまだ軽视されている段阶なためだと解釈しています。

逆に言うと,どうしてもまだパッケージ提供されていないネイティブAPIを使いたい时は自分でプラグイン自作をがんばれば大抵抗何とかなるということでもあります。

えばイティブAPIを扱う时は以下の前者のようにするものが多い(例えばFirebaseプラグインは大体そうなっている)ですが,例えばimage_pickerプラグインのようにネイティブビュー(iOSではUIImagePickerController)を表示してその结果を受け取るということもできます。

  • ネイティブAPIを呼んで结果を受け取ってそれを元にFlutterのビューで表示
  • ネイティブのビューに丸投げ

ネと,App Extensions対応がやや厳しい気がしますが,まだきちんと検证できていません。iOSネイティブ実装を组み合わせれば大体対応できそうな気がするものの,Dartで记述したロジックを流用できずネイティブコードとの二重実装になりそうなイメージです。

将来的にはiOSネイティブアプリっぽいUIの実现も可能かもしれない

将来的には,Cupertino(iOS样式)小部件开発にもっと开発リソースが割かれて质・量ともに十分になってくる可能もまあまああると思っています。前)で,将来の期待値込みで考えるべきだと思っています。

质,仮に将来Cupertino(iOS风格)小部件の质・量が十分になってきたとしても,iOSネイティブアプリに见纷うようなUIを组めるようになるかはかなり微妙だと思っています。ネイティブUIのただ,「iOSネイティブ开発者なら多少気になるけど一般ユーザーはほとんど违和感无い」程度のものは组めるようになるかもしれないとも思っています。もしそうなったら,マテリアルデザインで妥协するか,iOSネイティブアプリっぽいUIを目指すか,けっこう迷う気がします。この场合でも,前者にすると,Androidアプリとの分岐実装や确认の手间が省けるなどのメリットは大きいですね。

ネイティブUIの振る舞いを100%再现するのは难しい作业だからです。

Fl,FlutterによるAndroidアプリではこれは问题にならないのかというと,同じGoogleが开発しているという理由であまり苦労なくほぼ100%近い再现が可能だと思っています。

メのあたりは,GoogleのiOSメインエンジニジニアの方が书かれた以下の记事でも触れられていて,とても同意できました。

这是Flutter的缺点之一:我认为,如果是为iOS打造的,则这种传真是不完善的。 用户界面看起来有点差 。 涡旋物理并不十分正确。 动画的移动并不完全符合我的预期。 它正在攀登奇异山谷另一侧的悬崖,但还没有完全脱离悬崖。 我对Android的经验较少,因此很难在其中进行比较。 但是我被告知它做得更好[4]。

[4]。 这并不是对Android或Flutter本身的打击。 可以肯定的是,与iOS外观相比,Google团队可以更轻松地重现Android外观。 是否需要量化Android使用的滚动物理特性? 只看代码。 这并不是iOS的真正选择。

iOS开发人员对Flutter的看法

安卓アプリ开発

仆はAndroidネイティブアティブリプス発ス発ルが无い(iOSアプリ开発への习熟度向上・サーバーサイドなど违う方面に学习リソースを充てていた)ので,FlutterでAndroidネイティブアプリプ逊色无いものが作れそうというのが魅力Android开発者だと,Java ・ Kotlinでネイティブ开発かFlutterでの开発かでけっこう迷いそうな気がしていますが,仆の场合はAndroidネイティブ开発スキルがまだ无かったからこそFlutterに全振りしやすく感じています。

,,,、、、、、、、、、、、、

iOSアプリエンジニアとしてFlutterでAndroidアプリ开発をするには,Flutter习得に加えて,以下のスキル程度で済むと思っています。

  • 设定ロジェクト设定・ビルド周りの诸々
  • マテリアルデザイン
  • (できればAndroid端末を普段使いしてAndroidっぽいアプリに惯れ亲しむ)
  • (プラグインを自作する场合はもちろんそのネイティブコードを书くだけのスキルは必要だが,既存ので済めば不要)

逆にAndroidアプリ开発者がiOSアプリをFlutterで作る场合は,同じくビルド周ドと人机接口指南(iOSもマテリアルデザインベースにする偶尔不要かも)の理解程度で良いと思います。

Fl,ある程度の规模のアプリを作っているとネイティブ知识が无いと解决が难しいようなこともあり得る気もします。ませんし,むしろ逆にFlutterを良い机会に必要に応じてAndroidネイティブ开発に多少惯れ亲しめると良いなと思っています。

クロスプラットフォーム开発

ここまで述べてきた通り,FLutterます。

で,1人でAndoird ・ iOSアプリの両开発する场合はリソースも限られるので,よほどFlutterとの相性が悪く无い限りはFlutterでiOSアプリも作る选択を取る気がします。

また,iOSアプリはネイティブで作る选択を取った场合,惯れればFlutterの方がサクサク作れるはずなので,FlutterによるAndroidファーストでiOSネイティブは后追い実装が良さそうと思っています。

デザインツール

iOSネイティブアプリ开発では,个人开発の场合でも头の中によほどしっかりとデザインイメージが固まっていない限定りはSketchなどのデザインツールを使って予めデザインを调整してから実装に取り​​组むべきと考えていて,実います。実装しながらデザイン调整すると细かい调整の度にリビルドが必要になったりして结局余计に时间がかかってしまうことが多いからです。

ただ,正直Sketchで等级立ったデザイン管理をするのもけっこう大変で个人的にはけっこうだるい作业なので,Flutterで代用できないかな?と考えました。ただ,Flutterでは现状デザインプレビューが无いので后から见返しまた,やはりさすがにデザインツールよりレイアウト整えるコストが高いかなとも思いました(惯れればSketchでキレイに管理するコストとと) Flutterで书くコストが同等程度になるかも?とも思いつつ)。

ただ,Flutterではデザイン调整の试行错误コストが低いので,特に个人开発の场合は别途デザイン用意せずに直接実装で良い気はします。チーム开発では普通にSketchなどのデザインツール使わないとやはり厳しいとは思いました。

Flutterでは现状デザインプレビューが无い

[追记]仆が知らなかっただけで,实验な机能として対応済みだったことに気付きました。なかなか良い感じですが,まだ不安定です。また,デザインというよりレイアウトプレビューといった感じで,「デザインチェック」目的には今のところ使えないと思いました。

プロトタイピングツール

初プのFlutter习熟コストは决して低くはないですが,それを乘り越えればサクサクと何のもの无も好きな画面・机能を作って试用することができます。

いては公式のFAQでも触れています。

对于设计师而言,Flutter有助于提供原始的设计构想,而不会失去保真度或折衷。 它也可以作为生产原型工具。

Flutter做什么?


最后に,Tsukamoto Takeshiさんの书かれたAndroidネイティブ开発者目线の同様な记事も绍介します💁‍♀️こちらの方が9ヶ月新しい内容になっています。

Androidネイティブアプリ开発者から见たFlutter

先日行われたGoogle I / O 2019でWeb的颤振utter表されたこともあって,自分の周りにもFlutterに兴味を持つ人が増えてきていると感じます。

medium.com

今回は実际のコードがほとんど出てきませんでしたが,少しずつそういう记事も増やしていく予定です。今のところ,こういったものを予定しています。

  • Flutterの效率良い学び方(书きました)
  • 范围模型・ BLoC(业务逻辑组件)パターンなど,まだ体系的な说明が不足している事柄についての解说

[追记]关连记事书きました。

FlutterのBLoC(业务逻辑组件)のライフサイクルを正确に管理して提供するProviderするッケージの解说

FlutterのBLoC(业务逻辑组件)をBLoC提供商…

medium.com