Kotlin MultiplatformとFlutter:クロスプラットフォーム開発ソリューション
急速に進化するテクノロジーの世界において、開発者は高品質なアプリケーションを構築するために、効率的なフレームワークやツールを常に探し求めています。しかし、利用可能な選択肢の中から選ぶ際、「最高」とされる選択肢を見つけることに固執しすぎないことが重要です。そのアプローチが、必ずしも最も適切な選択につながるとは限らないからです。
各プロジェクトは独自であり、特定の要件を持っています。この記事は、選択肢を整理し、Kotlin MultiplatformやFlutterといったテクノロジーがあなたのプロジェクトにどのように適合するかをより深く理解し、情報に基づいた意思決定ができるよう支援することを目的としています。
クロスプラットフォーム開発:モダンなアプリケーション構築への統合的アプローチ
クロスプラットフォーム開発は、単一のコードベースで複数のプラットフォームで動作するアプリケーションを構築する方法を提供し、システムごとに同じ機能を書き直す必要をなくします。AndroidとiOSの両方をターゲットとするモバイル開発に関連付けられることが多いですが、このアプローチはモバイルをはるかに超え、ウェブ、デスクトップ、さらにはサーバーサイドの環境までカバーしています。
その核心となる考え方は、必要に応じてプラットフォーム固有の機能を実装できるようにしつつ、コードの再利用を最大化することにあります。これにより、開発プロセスを合理化し、メンテナンスの手間を削減できます。チームは開発サイクルを加速させ、コストを削減し、プラットフォーム間での一貫性を確保できるため、今日のますます多様化するアプリケーション環境において、クロスプラットフォーム開発は賢明な選択肢となっています。
Kotlin MultiplatformとFlutter:プラットフォーム間の開発を効率化する
FlutterとKotlin Multiplatformは、異なるプラットフォーム間でのアプリケーション開発を簡素化する、人気のある2つのクロスプラットフォームテクノロジーです。
Flutter
Flutterは、単一のコードベースからネイティブにコンパイルされたマルチプラットフォームアプリケーションを構築するためのオープンソースフレームワークです。Android、iOS、ウェブ、デスクトップ(Windows、macOS、Linux)、および組み込みシステムにおいて、すべて単一の共有アプリコードベースから豊かなアプリ体験を作成できます。FlutterアプリはDartプログラミング言語を使用して記述されます。FlutterはGoogleによってサポートおよび使用されています。
2014年に「Sky」という名称で初めて導入され、Flutter 1.0は2018年12月のFlutter Live中に正式に発表されました。
Flutterの開発者コミュニティは大規模かつ非常に活発で、継続的な改善とサポートを提供しています。Flutterでは、FlutterおよびDartのエコシステム内の開発者によって提供された共有パッケージを使用できます。
Kotlin Multiplatform
Kotlin Multiplatform (KMP) はJetBrainsによって構築されたオープンソーステクノロジーです。開発者はAndroid、iOS、ウェブ、デスクトップ(Windows、macOS、Linux)、およびサーバーサイド向けのアプリケーションを作成でき、ネイティブプログラミングの利点を維持しながら、これらのプラットフォーム間でKotlinコードを効率的に再利用できます。
Kotlin Multiplatformでは、さまざまなオプションがあります。アプリのエントリポイント以外のすべてのコードを共有することも、一部のロジック(ネットワークやデータベースモジュールなど)のみを共有することも、あるいはUIをネイティブに保ちながらビジネスロジックのみを共有することも可能です。
Kotlin Multiplatformは、2017年にKotlin 1.2の一部として初めて導入されました。2023年11月にKotlin Multiplatformは安定版(Stable)になりました。Google I/O 2024において、GoogleはAndroidとiOS間でビジネスロジックを共有するためのKotlin Multiplatformへのサポートを発表しました。
Kotlin Multiplatformの一般的な方向性について詳しく知りたい場合は、ブログ記事「What’s Next for Kotlin Multiplatform and Compose Multiplatform(Kotlin MultiplatformとCompose Multiplatformの今後の展望)」をご覧ください。
Compose Multiplatform
JetBrainsによるモダンな宣言型フレームワークであるCompose Multiplatformを使用すると、複数のプラットフォーム間で共有UIコードを記述できます。これはKotlin MultiplatformとGoogleのJetpack Composeをベースに構築されています。
Compose Multiplatformは現在、iOS、Android、デスクトップで安定版となっており、ウェブではBeta版です。
専用の記事「Compose Multiplatform and Jetpack Compose」では、両者の関係と主な違いの概要を説明しています。
Kotlin MultiplatformとFlutter:概要
| Kotlin Multiplatform | Flutter | |
| 開発元 | JetBrains | |
| 言語 | Kotlin | Dart |
| 柔軟性とコード再利用 | ビジネスロジックやUIを含め、コードベースの任意の部分(1%から100%まで)を共有できます。 | アプリケーションのすべてのピクセルを制御し、すべてのプラットフォームで100%のコード共有を行いながら、カスタマイズされたアダプティブなデザインを作成できます。 |
| パッケージ、依存関係、およびエコシステム | パッケージはMaven Centralやその他のリポジトリから入手可能です。 klibs.io(Alpha版)は、KMPライブラリの検索を簡素化するために設計されています。 このリストには、最も人気のあるKMPライブラリとツールの一部が含まれています。 | パッケージはPub.devから入手可能です。 |
| ビルドツール | Gradle(Appleデバイスをターゲットとするアプリケーションの場合はXcodeも併用)。 | Flutterコマンドラインツール(内部でGradleとXcodeを使用)。 |
| コード共有 | Android、iOS、ウェブ、デスクトップ、およびサーバーサイド。 | Android、iOS、ウェブ、デスクトップ、および組み込みデバイス。 |
| コンパイル | デスクトップとAndroid向けにはJVMバイトコードに、ウェブ向けにはJavaScriptまたはWasmに、ネイティブプラットフォーム向けにはプラットフォーム固有のバイナリにコンパイルされます。 | デバッグビルドでは、仮想マシン上でDartコードを実行します。 リリースビルドでは、ネイティブプラットフォーム向けにプラットフォーム固有のバイナリを、ウェブ向けにはJavaScript/Wasmを出力します。 |
| ネイティブAPIとの通信 | expect/actual宣言 を使用して、Kotlinコードから直接ネイティブAPIにアクセス可能です。undefined | プラットフォームチャンネルを使用して、ホストプラットフォームとの通信が可能です。 |
| UIレンダリング | GoogleのJetpack ComposeをベースにしたCompose Multiplatformを使用してプラットフォーム間でUIを共有できます。これはOpenGL、ANGLE(OpenGL ES 2または3の呼び出しをネイティブAPIに変換)、Vulkan、およびMetalと互換性のあるSkiaエンジンを使用します。 | Flutterのウィジェットは、プラットフォームやデバイスに応じてMetal、Vulkan、またはOpenGLを使用してGPUと直接通信する、カスタムのImpellerエンジンを使用して画面にレンダリングされます。 |
| UI開発のイテレーション | 共通(common)コードからでもUIプレビューが可能です。 Compose Hot Reload を使用すると、アプリを再起動したり状態を失ったりすることなく、UIの変更を即座に確認できます。undefined | VS CodeおよびAndroid Studio向けのIDEプラグインが利用可能です。 |
| このテクノロジーを採用している企業 | Forbes、Todoist、McDonald’s、Google Workspace、Philips、9gag、Baidu、Autodesk、TouchLab、Instabeeなどが挙げられます。詳細はKMPケーススタディをご覧ください。 | Xiaomi、Wolt、Universal Studios、Alibaba Group、ByteDance、Geico、eBay Motors、Google Pay、So VeganなどがFlutter Showcaseに掲載されています。 |
また、プロジェクトに適した技術スタックを選択するためのガイダンスを提供している、Googleのブログ記事「Making Development Across Platforms Easier for Developers(プラットフォームを越えた開発をより容易にする)」も併せてご覧ください。
Kotlin MultiplatformとFlutterのさらなる比較をお探しの場合は、Philipp Lackner氏によるKMP vs. Flutterのビデオも視聴することをお勧めします。このビデオでは、コード共有、UIレンダリング、パフォーマンス、そして両テクノロジーの将来性に関して、興味深い考察が共有されています。
特定のビジネスニーズ、目的、およびタスクを慎重に評価することで、要件を最もよく満たすクロスプラットフォームソリューションを特定することができます。
