KotlinのFlutterについて

採用はこちら

「KotlinのFlutter」という言い方は、技術的にはやや曖昧です。

Flutterは Dartを主言語とするUIフレームワークであり、Kotlinは Flutterそのものを書くための言語ではありません

ただし、Flutterを実務で使うと Androidネイティブ領域との連携が必ず出てきます。

そのときに Kotlinが重要な役割を担うため、現場では慣用的に「Kotlin × Flutter」という言い方がされます。

本記事では、この関係を正確に整理します。

目次

大前提:FlutterとKotlinは役割が違う

Flutterとは

  • Googleが提供するクロスプラットフォームUIフレームワーク
  • アプリケーションコードは Dart で記述する
  • 単一コードベースで iOS / Android / Web / Desktop を対象にできる

Kotlinとは

  • Android公式の主要プログラミング言語
  • Android OSのAPIや既存Android SDKを扱うための言語
  • Flutterプロジェクト内では Android側の実装言語として登場する

つまり、

Flutter = UI / アプリロジック(Dart)
Kotlin = Androidネイティブ側(プラットフォーム実装)

という分業構造になります。

KotlinがFlutterで使われる代表的な3パターン

Platform ChannelでFlutter(Dart)からKotlinを呼び出す

Flutterだけでは扱えない、または扱いにくいAndroid固有機能を使う場合、Platform Channel を通して Flutter と Android(Kotlin)を接続します。

仕組みの概要

  • Dart側から「このメソッドを呼びたい」と要求
  • Android側(Kotlin)がそれを受け取り、処理して結果を返す

主なチャンネルの種類

  • MethodChannel
    • リクエスト → レスポンス型の呼び出し
    • 「この処理をして、結果を返してほしい」という用途
  • EventChannel
    • イベントストリーム型
    • センサー値や状態変化など、継続的に流れるデータ向け

※「MethodChannelは単発、EventChannelは継続」という説明は簡略表現であり、正確には 呼び出しモデル(request/responseか、streamか) の違いです。

使われる場面

  • Bluetooth / NFC / USB などの低レベル制御
  • Android限定SDK(決済、広告、独自ハードウェア)
  • 既存のKotlin資産をFlutterから使いたい場合

Flutterプラグイン開発でKotlinを書く

Flutterには「プラグイン」という仕組みがあり、Dart API + 各プラットフォームのネイティブ実装を1つのパッケージとして提供できます。

構成イメージ

  • Dart側:Flutter向けのAPI
  • Android側:KotlinでAndroid APIを実装
  • iOS側:Swift / Objective-C(必要に応じて)

この形が向いているケース

  • 複数アプリで再利用したい機能
  • pub.devで公開・共有したいライブラリ
  • Platform Channelをアプリ内に直書きしたくない場合

実務では、「最初はアプリ内のMethodChannel → 成熟したらプラグイン化」という流れもよくあります。

Add-to-app:既存KotlinアプリにFlutterを組み込む

Flutterは「ゼロからFlutterで作る」だけでなく、既存のAndroidアプリ(Kotlin)に部分的に組み込むこともできます。

これを Add-to-app と呼びます。

典型的な用途

  • 既存Kotlinアプリの一部画面だけFlutter化
  • 新機能だけFlutterで先行開発
  • 段階的にFlutterへ移行したい場合

技術的ポイント

  • ホストアプリはKotlin / Javaどちらでも可
  • Flutterは「モジュール」として組み込まれる
  • ナビゲーションやライフサイクル連携を設計する必要あり

この構成では、Kotlinがアプリの土台、FlutterがUIの一部という関係になります。

よくある誤解と注意点

誤解①「FlutterはKotlinでも書ける」

誤り
FlutterのアプリコードはDartで書きます。
KotlinはあくまでAndroidネイティブ側の実装言語です。

誤解②「EventChannelは一方通行」

半分正解・半分誤解
EventChannelは「イベントをStreamとして公開する」仕組みで、
命令を双方向に投げ合う用途には向きません。
そのため、実質的に ネイティブ → Flutter のデータ配信で使われることが多い、というのが正確です。

注意点:Kotlin / Gradle のバージョン問題

FlutterのAndroidビルドには 最低限必要なKotlin Gradle Pluginのバージョンがあります。

  • 要件を満たさないとビルドエラーになる
  • 既存AndroidアプリにAdd-to-appする場合、特に衝突しやすい
  • 「Flutterを入れたら突然ビルドが壊れた」という原因になりがち

これは経験則ではなく、公式に要件が定義されています。

結論:正確に言い換えるとこうなる

「KotlinのFlutter」という言葉を、技術的に正確に言い換えるなら、

Flutter(Dart)で作ったアプリが、Androidネイティブ領域(Kotlin)と連携する構成

を指しているケースがほとんどです。

その連携方法には、

  1. Platform Channel
  2. Flutterプラグイン
  3. Add-to-app

という明確なパターンがあります。

補足:もし本当に聞きたかったのが別物だった場合

まれに「KotlinのFlutter」という言葉で、

  • KotlinでマルチプラットフォームUIを書く仕組み
  • FlutterとKotlin系(Compose Multiplatform / KMP)の比較

を指しているケースもあります。

その場合は 完全に別の技術領域になるため、Flutter vs Kotlin系クロスプラットフォームという切り口で整理し直す必要があります。

以上、KotlinのFlutterについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次