こんにちは。ぽこです!
今回は、Flutterの利点についてお話ししたいと思います。
Flutterは、先行するマルチプラットフォームであるReactNativeに影響を受けています。後発の技術らしく、ReactNativeの利点を生かしつつ、正常な発展を遂げている技術だと言えます。
高い生産性
Flutterの大きな特徴として知られている、iOSとAndroidの両プラットフォームを1つのコードから作成できることは生産性が高いと言えますが、それだけではありません。それぞれのプラットフォームの開発に比べても、次に示すような理由で生産性が高いです。
表現力豊かな言語と宣言的なアプローチで、より少ないコードでより多くのことができる
Dart言語で宣言的にUIを記述し、言語自体に簡潔にUIが書けるように機能追加をしています。それぞれのネイティブではSwiftUIやJetpack Composeによって宣言的UIが書けるようになりましたが、Flutterの場合ははじめから宣言的UIであり、それ以外の実装方法もありません。OSのバージョンにも依存せずに記述できます。そういった意味でも、Flutterには一日の長があります。
アプリの実行中にコードを変更してリロードすることを繰り返せる
ホットリロードは1秒以内で実行でき、状態の破棄もされません。このため、気軽に実験できたり、UIや機能を追加できたり、バグをすぐに修正できたりと、些細な変更もすぐに動作確認できます。これはiOS・Androidのネイティブ開発をしている人からすると、本当に驚くべきスピードです。
エラーが起きても原因や解決策がしっかりとメッセージで表示される
デベロッパーエクスペリエンスが意識されていて、エラーメッセージをしっかりと読むことで解決の時間を短縮できます。
美しく高度でカスタマイズ可能なUI
Flutterに内蔵されているMaterial DesignとiOS風のCupertinoウィジェット、豊富なモーションAPI、スムーズで自然なスクロール、そしてそれらは柔軟で表現力豊かにカスタマイズ可能です。
スクロール、ナビゲーション、アイコン、フォントなど、独自にすべてが組み込まれており、iOS・Androidによるデザイン上の制限なしにカスタマイズできます。
これは、サードパーティ製のライブラリを使うことなく標準コンポーネントだけで最適なデザイン・実装ができることを意味し、ライブラリのバージョン依存の問題が起きる可能性を低減させます。また、それぞれのOSのバージョンの際をデザインする上で意識する必要もありません。
ネイティブパフォーマンス
Flutterでは、UIを独自にネイティブで組み込んでいます。また、プログラムの実行前にコンパイルしておくAhead-Of-Time(AOT)コンパイルをサポートしています。
このため、余計なブリッジ処理が挟まれることなく、ネイティブだけで実行可能になるので高速に動作可能です。
例えば、ReactNativeでは、動的なJavaScriptからiOS・AndroidのネイティブUIにアクセスするため、ブリッジを介して通信する必要があります。これはコストがかかります。
ReactNativeとの比較で大きな利点の1つが、「比較的に遅いブリッジ処理が不要で、ネイティブで実行できるためより高速」ということになります。