Skip to content

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はコードの最大100%を再利用するためのテクノロジーです

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の今後の展望)」をご覧ください。

Discover Kotlin Multiplatform

Compose Multiplatform

JetBrainsによるモダンな宣言型フレームワークであるCompose Multiplatformを使用すると、複数のプラットフォーム間で共有UIコードを記述できます。これはKotlin MultiplatformとGoogleのJetpack Composeをベースに構築されています。

Compose Multiplatformは現在、iOS、Android、デスクトップで安定版となっており、ウェブではBeta版です。

Explore Compose Multiplatform

専用の記事「Compose Multiplatform and Jetpack Compose」では、両者の関係と主な違いの概要を説明しています。

Kotlin MultiplatformとFlutter:概要

Kotlin MultiplatformFlutter
開発元JetBrainsGoogle
言語KotlinDart
柔軟性とコード再利用ビジネスロジックや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との通信を使用して、Kotlinコードから直接ネイティブAPIにアクセス可能です。プラットフォームチャンネルを使用して、ホストプラットフォームとの通信が可能です。
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プレビューが可能です。

を使用すると、アプリを再起動したり状態を失ったりすることなく、UIの変更を即座に確認できます。

VS CodeおよびAndroid Studio向けのIDEプラグインが利用可能です。
このテクノロジーを採用している企業ForbesTodoistMcDonald’sGoogle WorkspacePhilips9gagBaiduAutodeskTouchLabInstabeeなどが挙げられます。詳細はKMPケーススタディをご覧ください。XiaomiWoltUniversal StudiosAlibaba GroupByteDanceGeicoeBay MotorsGoogle PaySo VeganなどがFlutter Showcaseに掲載されています。

Kotlin Multiplatformをクロスプラットフォーム開発に活用しているグローバル企業の実際のユースケースをご覧ください。

また、プロジェクトに適した技術スタックを選択するためのガイダンスを提供している、Googleのブログ記事「Making Development Across Platforms Easier for Developers(プラットフォームを越えた開発をより容易にする)」も併せてご覧ください。

Kotlin MultiplatformとFlutterのさらなる比較をお探しの場合は、Philipp Lackner氏によるKMP vs. Flutterのビデオも視聴することをお勧めします。このビデオでは、コード共有、UIレンダリング、パフォーマンス、そして両テクノロジーの将来性に関して、興味深い考察が共有されています。

特定のビジネスニーズ、目的、およびタスクを慎重に評価することで、要件を最もよく満たすクロスプラットフォームソリューションを特定することができます。