Souvik Biswasによって書かれた

ほとんどの企業は、iosとネイティブAndroidの両方の部分を処理する少数の開発者を雇わなければならないように、クロスプラットフ しかし、人々のこの考え方は、フラッターの導入により、今ゆっくりと変化しています。 いくつかの大企業(すでにネイティブのAndroidとiOSの両方の開発者がいる)でさえ、本番アプリでFlutterを使用しています。 だから、この劇的な変化はどのように来ていますか? それをより詳細に見てみましょう。

Flutterとは

flutterの公式ウェブサイトでは、Flutterは、単一のコードベースからモバイル、ウェブ、デスクトップ用の美しいネイティブコンパイルされたアプリケー

2018年12月4日、FlutterのライブイベントでFlutter1.0がリリースされ、フレームワークの最初の「安定した」バージョンを示しました。 それ以来、Flutterはパフォーマンスの面で多くのことを改善しました。

最近、2019年12月11日にFlutter Interactが行われ、Flutter1.12の導入によりフレームワークに多くの改善がもたらされました。

Flutter Interactのすべての発表の概要はここで入手できます。

Flutterを使用して作成されたアプリのいくつかは、公式のShowcase webページで見つけることができます。

Flutter vs iOSの概要

iOS開発の初期の頃、Appleが使用していたプログラミング言語はObjective-Cでしたが、当時の開発者のほとんどは嫌っていましたが、その時点でiOS開発を続けたい しかし、2014年に早送りして、タイプセーフで簡潔で表現力豊かな構文を使用したSwiftが導入され、開発者はそれを愛していました。 また、Objective-Cや既存のiOS Apiとも完全に互換性がありました。 Swiftで使用されていたApiは最初はそれほど良くありませんでしたが、現在は大幅に改善されています。

Flutterは当初、これらの四つの柱を念頭に置いてリリースされました:美しく、速く、生産的な&オープン。 そして、一年後、それはそれを保持することが証明されています。

存在するクロスプラットフォームアプリ開発フレームワークのほとんどは、パフォーマンスと安定性の問題に苦しんでいます。 これらは、ネイティブアプリの横で実行されているときに簡単に識別できます。 Flutterは、React NativeやXamarinのような他のクロスプラットフォームフレームワークと比較して、このパフォーマンスギャップを大きく橋渡ししました。

Flutterはどのようにしてネイティブアプリと同じくらいパフォーマンスになったのですか? 答えは、そのアーキテクチャとFlutterによって使用される言語、すなわちDartにあります。

iOS開発者としてFlutterを試してみたい場合は、利用可能な素敵な公式ドキュメントがあります。

Architecture

Native Apps

Native Architecture
Native Architecture

ネイティブアプリでは、AndroidでもiOSでも、ネイティブアプリコードはプラットフォームと対話してOEMウィジェットを作成したり、オーディオ、センサー、カメラなどの様々なサービスにアクセスしたりする。 ウィジェットは画面キャンバスにレンダリングされ、イベントはウィジェットに戻されます。 このアーキテクチャは、OEM固有のウィジェットをすべてのプラットフォームで再利用することを制限します。 そして、これは我々が別々に各プラットフォームのための全体のアプリを記述する必要がある理由です。

Flutterに進む前に、別の人気のあるクロスプラットフォームソリューション、React Nativeのアーキテクチャをチェックしてみましょう。

React Native Apps

React Native Architecture
React Native Architecture

REACT Native appsはJavaScriptで書かれているため、OEMウィジェットにアクセスするにはブリッジを使用してプラットフォームと通信する必要があります。 これは、このフレームワークのボトルネックがある場所です。

だから、React Native developersからの解決策:

パフォーマンスの高いReact Native appsを設計するためには、橋の上のパスを最小限に抑えなければなりません。

Flutter Apps

Flutter Architecture
Flutter Architecture

さて、Flutter appsに来ます。 Flutterは、他のクロスプラットフォームフレームワークの中で最も困難な部分、すなわちブリッジを取り除くことを解決します。 FlutterはOEMウィジェットを使用せず、独自のウィジェットを提供します。 Flutterは、ウィジェットとレンダラーをプラットフォームからアプリに移動し、カスタマイズ可能で拡張可能にします。 これはまた、フラッターが一貫した60FPSを維持するのに役立ちます。

Dart

開発者がFlutterを愛するもう一つの理由は、Dart言語のためです。

Dartは、オブジェクト指向、クラス定義、ガベージコレクトされた言語で、Cスタイルの構文を使用して、必要に応じてJavaScriptにトランスコンパイルします。

Swiftも非常に優れた現代的な言語ですが、Dartには他の言語から分離するいくつかの機能があります:

  • Dartは、高速起動と完全にカスタマイズ可能なフラッターウィジェットを与えるAOT(事前に)コンパイルを使用しています。

  • DartはJit(Just In Time)コンパイルも使用していますが、これがHot Reloadが存在する主な理由です。 私はそれについて少し話します。

  • Dartには、この言語で構築されたガベージコレクタがあります。 これはFlutterが60fpsで動く転移および滑らかな生気を達成することを可能にする。

  • Dartは、Dartの宣言的でプログラム的なレイアウトが読みやすく視覚化しやすいため、Flutterは、iOSのStoryboardのような、独立した宣言的なレイアウト言語や視覚的なインターフェースビルダーの必要性を回避することができます。

  • Dartは、他のさまざまな言語と類似しているため、簡単な学習曲線を持っています。 Dartを非常に強力にするのは、これらの言語の機能の組み合わせです。

Flutter Interactでは、Dartは拡張メソッド、文字パッケージ、null安全プレビューをサポートしてバージョン2.7に更新されました。 この記事からより多くの情報を得ることができます。

Hot Reload

ネイティブのiOSアプリ開発では、コンポーネントの色を変更するような非常に簡単な変更を加えると、変更を画面に表示するのに少なくとも10秒

Hot Reload Demo
Hot Reload Demo

FlutterのHot Reloadでは、開発者は各変更後にコード全体を実行するのではなく、ソースコードの増分変更のみを実行中のDart VMに送信できます。 これにより、ほぼ瞬時に変更を行うことができ、アプリの状態も保持されます。

Flutterのホットリロード機能を使用すると、迅速かつ簡単に実験、Uiの構築、機能の追加、バグの修正を行うことができます。

Flutterをまだ試していない場合は、少なくともHot Reloadの名の下に一度だけチェックしてください。 あなたはそれを信じるためにそれを見なければなりません。

宣言型UIコード

Flutterのすべてのコンポーネントはウィジェットとして知られています。 Flutterアプリは、これらのウィジェット(building blocksなど)を組み合わせてウィジェットツリーを形成することで作成されます。 私たちが得るも、最終的なアプリはまた、ウィジェットです。

Flutterは宣言型UIを使用します。

プログラミングの宣言型スタイルでは、私たちは答えとして欲しいものに最も関心を持っています。 ここでは、開発者としての私たちは、私たちがそこに着く方法に関係していない、単に受信された答えに関係しています。

これは、Flutterが状態の関数としてUIを使用することを意味します。

これにより、Dartコードを単一の分離で実行することもできます。

一方、Swiftを使用したiOS開発は、命令型プログラミングパラダイムに従います。

プログラミングの命令型スタイルでは、私たちは答えにどのように到達するかを段階的に気にします。 最終的には同じ結果が必要ですが、私たちが探している正しい答えを達成するために、コンパイラに特定の方法で物事を行うように指示しています。

これは、Swiftコードが複数のスレッド間で実行されることを意味し、iOSのコンポーネント間の通信を維持するためには、クロージャ(コールバック)、デリゲート、通知、target-selectors、key-value observationなどを使用する必要があることを意味します。

Swiftは、Storyboardと呼ばれる別のインターフェイスビルダーを使用して、アプリのUIを設計します。

これにより、コードを理解するのが非常に複雑になり、生産性が低下することがよくあります。

Flutterは宣言型コードを使用するため、命令型スタイルのSwiftコードよりもはるかにクリーンでリファクタリングが簡単です。 また、宣言型コードは、命令型コードと比較してはるかに高い抽象レベルで推論していることを意味します。

デザインガイドライン

FlutterでiOSデザインガイドラインを次のようにするのは本当に簡単です。 Flutterには、Cupertino Widgetsと呼ばれる別のUIコンポーネントライブラリがあります。 これは、デフォルトではiOSの設計ガイドラインに従うすべてのウィジェットが含まれています。

Flutter1.12の導入により、Flutterアプリで使用するためにGoogleフォントライブラリから各フォントをダウンロードする必要はありません。 あなたはただ一つのパッケージ、google_fontsを含める必要があり、あなたは全体のGoogleフォントライブラリへのアクセスを取得します。

Flutter1.12では、クパチーノのウィジェットの一部が改善され、完全なダークモードのサポートが追加されました。

公式のiOS UIデザインのヒントはここにあります。

Flutterを使用してCupertinoアプリを構築するために利用可能なGoogle Codelabもあります。

依存関係管理

iOSは、CocoaPodsやCarthageのような依存関係管理システムのためのサードパーティのツールに依存しています。 そのため、iOS開発者はこれらのサードパーティの依存関係管理ツールについて学ぶ必要があります。

FlutterはPubと呼ばれる独自の依存関係管理システムを使用しています。 Pub Package managerにはFlutterが組み込まれており、アプリ開発のために必要に応じて新しい依存関係を簡単にインポートできます。

Flutterでのパッケージの使用方法についての詳細は、こちらをご覧ください。

アプリへの追加

Flutterは、ライブラリまたはモジュールとして既存のiOSアプリに統合することもできます。 そのモジュールをiOSアプリにインポートして、アプリのUIの一部をFlutterでレンダリングできます。

Flutter1.12では、アプリごとに一度に1つのフルスクリーンFlutterインスタンスを統合する基本的なシナリオでアプリへの追加がサポートされています。

既存のアプリにFlutterを追加するためのドキュメントはここにあります。

Testing

AppleはXcode5から始まるテストフレームワークとしてXCTestを使用しています。 XCTestを使用して実行できるテストの種類は次のとおりです:

  • 単体テスト
  • パフォーマンステスト
  • UIテスト

XCTestはXcodeの開発環境と緊密に統合されているため、開発環境の他のコンポーネントや機能と使いやす しかし、デバイス上でUIテストを実行している間、いくつかのパフォーマンスと安定性の問題があります。

Swiftには適切なモックフレームワークも欠けています。 したがって、模擬テストのために、iOS開発者が依存しているフレームワークのいくつかはCuckoo&MockFiveです。

iOSの簡単なテストドキュメントはここにあります。

一方、Flutterはテストの面で非常に強いです。 それにまたテストの3つのcatagoriesがあります:

  • 単体テスト
  • 統合テスト
  • ウィジェットテスト

Flutterのウィジェットテストは、他のフレームワークのコンポーネントテストやUIテストに似ています。 しかし、Flutterは単体テストと同じくらい速くウィジェットテストを実行するため、iOSで使用される通常のUIテストよりも大きな利点があります。 Flutterでmockitoパッケージを使用することで、Mockitoのような他のテストフレームワークを使用することもできます。 Flutterで統合テストを実行するには、flutter_driverと呼ばれるパッケージを含める必要があります。

Flutterアプリをテストするためのドキュメントはこちらから入手できます。

CI/CD

継続的な統合(CI)と継続的な配信(CD)は、開発者がコード変更を確実かつ迅速に行うのを助け、時間通りにアプリを配信できるようにします。 FlutterとiOSの両方が利用可能な優れたCI/CDサポートを持っています。

nevercode、BuddyBuild、Jenkins、Travis CI、CircleCI、Bitriseなど、iosプロジェクトで使用できるさまざまなクラウドベースのCI/CDサービスがあります。

これらのクラウドベースのCI/CDサービスは、テスト、コード署名、特定のサービスやiTunes connectへのアプリのデプロイなど、すべてのiOSビルドプロセスを処理します。 また、特定のニーズを達成するために独自のカスタムスクリプトを記述することもできます。

Codemagicは、Flutter専用の最初の専用CI/CDソリューションとして導入されました。 しかし、今ではcodemagicを使用して非Flutterアプリもサポートしています。ヤムル これにより、Flutterモジュールが追加されたネイティブアプリの構築、テスト、配信が可能になります。

今のところcodemagic.yamlはAndroidとWebのみをサポートしていますが、iOSのサポートはすぐに追加されます。

フラッターはiOSを支配することができますか?

Flutterは機能がいっぱいで、優れたパフォーマンスを約束しますが、特定のアプリケーションではまだ生産準備ができていません。

これは、特定のプラグインの可用性に欠けています。 利用可能な重要なプラグインのいくつかは、まだバグがあり、大規模な生産アプリケーションでは使用できません。 しかし、これは非常にあなたが良いプラグインを取得し、それがあなたのアプリの機能のニーズを満たしている場合は、あなたやあなたの会社が取り組ん

あなたはすでに今まで理解しているかもしれないように、Flutterは、ほぼネイティブのパフォーマンスを達成するためにそれを可能にし、Dart言語は、開発者が

この時点では、Flutterを無視してはいけません。 まだFlutterを試していない場合は、今すぐ試してみてください。

他のフレームワークからそれを分離するFlutterのいくつかの他の強みを以下に示します。

GitHubの2019年のOCTOVERSEレポートによると、Flutterは最も急速に成長しているオープンソースプロジェクトの1つであり、2位に上昇しています。

DartはGitHub上で最も急速に成長しているプログラミング言語となっています。

フクシア

Fuchsia(フクシア)は、Googleが開発しているオープンソースのオペレーティングシステムである。

FlutterはFuchsiaを念頭に置いて初期段階で開発されました。 FuchsiaはUIレンダリングエンジンとしてFlutterを使用しています。

Fuchsiaを非常にユニークなものにするのは、任意のCPUアーキテクチャで実行する機能です。 それは彼らがスマートフォン、デスクトップ、組み込みシステムなどで実行することができると主張するジルコンと呼ばれる独自のマイクロカーネ

Fuchsiaの公式webページがあり、Fuchsiaを始める方法に関するいくつかのドキュメントが含まれています。

現時点では、Fuchsia OSがいつ利用可能になり、どのようなデバイスがサポートされるかはわかりません。

リヴ

Rive(以前は2dimensions)は、設計者や開発者が簡単に自分のプラットフォームに洗練されたアニメーションを統合することができます強力なデザインとアニメーシ あなたは60fpsでスムーズに実行するあなたのフラッターアプリに直接Riveアニメーションをインポートすることができます。

詳細は公式サイトをチェックしてください。

アンビエントコンピューティング

Flutter Interact’19では、Flutterはアンビエントコンピューティング用に設計されたUIプラットフォームとして導入されました。 これにより、当初はモバイルデバイス用のクロスプラットフォームソリューションとしてFlutterが導入されましたが、現在はweb、macOS、組み込みデバイスなどにも拡大しています。 Flutterフレームワークは今、その真の力を示していると言うことができます、そして、私はそれが将来何ができるかを見るのを待つことができません。

コミュニティサポート

Flutterは完全にオープンソースプロジェクトであるため、開発者コミュニティはその成功に重要な役割を果たしています。 このコミュニティから来た素晴らしいFlutterプラグインの数があり、開発者はそれの限界を押して、毎日Flutterで新しいものを試しています。

結論

Flutterは本当に強力なフレームワークになっており、もう無視することはできません。 Flutterを愛していても嫌いであっても、iOS開発者として、FlutterとDartを試して真の力を理解する必要があります。

FlutterがネイティブiOSに取って代わるかどうかはまだ疑問です。 この答えを待っている間、Flutterは非常に明るい未来を持っていると言っても過言ではありません。 ネイティブアプリ開発に取って代わることができなくても、現時点で利用可能な最高のUI設計フレームワークであることがすでに証明されています。

Souvik Biswasは情熱的なモバイルアプリ開発者(AndroidとFlutter)です。 彼は彼の旅を通して、モバイルアプリの数に取り組んできました。 GitHub上のオープンソースの貢献が大好きです。 彼は現在、Bを追求しています。インドの情報技術Kalyani研究所からコンピュータ科学と工学の技術の学位を取得しました。 彼はまた、中FlutterコミュニティにFlutterの記事を書いています。