訳者はじめに
FltuterとDartの3ヶ月ごとのバージョンアップに対してブログ記事がありますので、そちらの日本語訳をさせていたただいております。誤訳・改善点があればご連絡いただけると助かります。
Mariam Hasnanyさんの「Flutter’s path towards seamless interop」の記事を訳しました。
Google I/O 2025のFlutter関連の翻訳記事
- What’s new in Flutter 3.32【日本語訳】(元記事: What’s new in Flutter 3.32)
- Announcing Dart 3.8【日本語訳】(元記事: Announcing Dart 3.8)
- GeminiがAndroid StudioでFlutterを完全にサポートしました!(元記事: Gemini in Android Studio now speaks fluent Flutter)
- Flutterのシームレスな相互運用性への道(元記事: Flutter’s path towards seamless interop)
本日、私たちはFlutterプラグイン開発者向けに、コード生成ソリューションを活用してプラグインの構築または再構築を行うための「早期アクセスプログラム」を発表します。これは、FFIgenとJNIgenを使用してFlutter開発者がネイティブプラットフォームAPIにアクセスしやすくするための取り組みの次の段階です。FFIgenとJNIgenを使用した最初の生産用プラグインの開発に直接参加いただける開発者向けに、限定数の参加枠を応募受付中です。
このブログ記事では、直接的なネイティブ相互運用性で実現を目指す目標、その実現計画、早期アクセスプログラムの詳細、および参加方法について説明します。
根本的な課題
開発者は、アプリが実行されているホストプラットフォーム(iOSやAndroidなど)のネイティブAPIを呼び出す必要がよくあります。現在、Flutter開発者はメソッドチャネルを使用してこれを行うことができます。メソッドチャネルは、Dartコードとネイティブコード(KotlinやSwiftなど)間のメッセージ送信に依存してネイティブAPIを呼び出します。つまり、Dartコードがネイティブコードにメッセージを送信し、ネイティブコードが処理を実行した後、結果をメッセージで返す仕組みです。
メソッドチャネルの根本的な課題は、実装と維持に時間がかかる点です。多くの手書きコードが必要です。メンテナンスには、最新のAPIバージョンを呼び出すために実装を手動で更新する必要があります。また、メッセージを文字列にエンコード/デコードする仕組みに依存するため、APIが変更されると実行時エラーが発生する可能性があります。最後に、メソッドチャネルは非同期呼び出しのみをサポートするため、UIの応答性を確保できますが、非同期結果の管理、エラー処理、結果待ちの潜在的な遅延対応など、コードの複雑さが増す可能性があります。
私たちは、メソッドチャネルの使用における課題を解決するために、DartとネイティブAPI用のメッセージ処理用のスケルトンコードを生成するツール「Pigeon」を開発しました。Pigeonを使用すると、メソッドのラップやDartとネイティブコード間のメッセージハンドラーの手動記述にかかる時間を削減できます。ただし、広範囲にわたるAPIの場合、依然として煩雑なコードの記述が必要です。例えば、iOSのインアプリ購入プラグインは多くのStoreKit
オブジェクトと相互作用し、これらのオブジェクトが他のネイティブオブジェクト内にネストされているため、Objective-C側でPigeonシリアライズ可能なクラスに変換し、Dart側でそのPigeonクラスをラッパークラスに変換する作業に多くの手動コーディングが必要です。
さらに、2つのプラグイン間の相互運用性は課題であり、AndroidのImage
のようなシリアライズできないオブジェクトを、互いに依存関係を持たずにDart経由で別のプラグインに渡しする方法はありません。
Flutterの相互運用性に関するビジョン
Michael Thompsonが#FlutterInProductionで述べたように、「私たちはこの問題に対して新しいアプローチに多大な投資を行っており、これを『direct native interop』と呼んでいます」
私たちの相互運用性のビジョンは、開発者がプラットフォームAPIにアクセスする作業を簡素化し、シンプルでシームレスな開発体験を提供することです。目標は、Flutter開発者が構築しようとしている体験に集中し、基盤プラットフォームの機能を活かすための時間を減らすことです。
解決策
私たちは、各プラットフォームのDartとネイティブコードのブリッジングを直接処理するコード生成ソリューションであるFFIgenとJNIgenで、根本的な相互運用性課題を解決する予定です。FFIgenはObjective-CとSwiftのAPIをラップするバインディングを生成し、同様にJNIgenはJavaとKotlinのAPIに対して同じ処理を行います。
メソッドチャネルとは異なり、FFIgenとJNIgenはAPIを同期的に呼び出すことを可能にし、コンパイル時に未使用コードを削除するツリーシェイキングをサポートし、プラットフォーム層に更多的データを保持できるようにします。
理想的なユーザー
この初期段階では、新しいダイレクトインターオペラビリティの理想的なユーザーは、ネイティブプラットフォーム(iOS、Android、またはその両方)に精通したFlutter開発者で、必要なプラットフォームAPIを直接かつ手間をかけずにアクセスしたいと考えている人です。FFIgenとJNIgenを使用することで、Dartとネイティブプラットフォームコードのブリッジングに費やす時間を大幅に削減でき、エコシステム向けのプラグインの構築と維持が容易になります。
ツールがより堅牢になっていくにつれ、ネイティブプラットフォームに精通したFlutter開発者は、Flutterでまだ利用できないAPI(pub.devのパッケージ経由でも利用できないものを含む)にアクセスし、Dartコードから直接APIを呼び出すためのコードを生成できるようになるでしょう。
私たちの目標は、現在のソリューションよりも大幅に優れたものを、開発体験の簡素化を通じて実現することです。適切な場所で魔法のような体験を提供しつつ、開発者が制御を放棄する必要のないソリューションを目指しています。
Interop Early Access Programに参加しましょう
Flutterプラグインの構築とFlutterツールの使用に精通した方を募集しています。既存のプラグインを直接的な相互運用性に対応するように再実装し、今後の開発をガイドするための詳細なフィードバックと課題を共有する早期アクセスプログラムに参加してください。プレビュープログラムであるため、必然的に未完成な部分や課題が生じる可能性がありますが、私たちはサポートと早期アクセスを提供し、直面する障害を克服するための支援を行います。
参加を希望される方は、このフォームを完了してください。この早期プログラムへの応募者全員を参加させることはできません。選考結果は2025年6月20日以降に連絡いたします。
ご応募をお待ちしています!
-
Next
記事がありません