Flutter 3.44 は2026年5月18日に公開された安定版で、Dart 3.12 を同梱しています。いちばん影響が大きいのは、iOS・macOS の依存管理が CocoaPods から Swift Package Manager(SwiftPM、SPM)に切り替わったことです。Android では Hybrid Composition++(HCPP)がオプトインで使えるようになり、Android Gradle Plugin(AGP)9 への暫定対応も入りました。
この記事では、3.44 系の最終パッチである 3.44.9 を実際に入れ、macOS(x86_64)でテンプレート生成・CLIヘルプ・静的解析・ウィジェットテストを確認した結果をまとめます。iOSビルドとAndroid実機でのHCPP描画は未検証です。3.44 の次の安定版について知りたい場合は、最新の3.47を扱ったFlutter 3.47とは?material_ui移行・iOS 15と3.47.7までの修正【2026年10月時点】を参照してください。
まとめ:Flutter 3.44で対応が必要な変更と3.44.9までの要点
- リリース:3.44.0 は2026年5月18日(Dart 3.12.0)。パッチは 3.44.9(8月6日・Dart 3.12.2)が最後で、3.47.0 の公開後は出ていません。
- SwiftPM 既定化:ビルドや実行のときに Xcode プロジェクトが自動で SwiftPM 対応に書き換わります。未対応のプラグインだけは CocoaPods にフォールバックし、警告が出ます。無効化は pubspec.yaml・グローバル設定・環境変数の3通りです。
- CocoaPods:trunk は2026年12月2日に新しい Podspec の受け付けを恒久的に止める予定です。読み取り専用化そのものでは既存の Pod のビルドは壊れませんが、trunk経由で新しく公開される更新は受け取れなくなります。独自のSpecsリポジトリなどを使う配布は対象外です。
- HCPP:Android API 34 以上、Vulkan、Impeller の3条件がそろう端末でだけ有効になります。
--enable-hcppはflutter run用で、flutter buildには渡せません。リリースビルドでは AndroidManifest.xml で有効にします。 - AGP 9:3.44 の新規テンプレートは AGP 9.0.1 で、
android.builtInKotlin=falseによって旧来の Kotlin Gradle Plugin(KGP)を一時的に使える構成です。built-in Kotlin を有効にできるのは 3.47 からです。 - 破壊的変更:
IconDataとTextDecorationが final になり、ExtendSelectionByPageIntentが削除されました。CupertinoPageTransitionsBuilderは material.dart だけを import しても使えなくなっています。 - Xcode 27 でビルドするなら 3.44.8 以上が必要です。3.44.7 以前は lipo の検証エラーでビルドに失敗します。
Flutter 3.44のリリース日とDart 3.12・パッチの一覧
3.44.0の公開日と同梱されたDart 3.12
公式の配布一覧(releases_macos.json)によると、3.44.0 の公開日は2026年5月18日(UTC。日本時間では5月19日)、同梱の Dart は 3.12.0 です。flutter-announce での告知と、Dart SDK の CHANGELOG にある 3.12.0 の公開日はどちらも5月20日なので、資料によって2日ずれます。
Dart 3.12 の言語面の変更は、アンダースコアで始まる名前付き引数(private named parameters)が書けるようになったことです。3.11 までは初期化子リストで _x = x と書き直す必要がありました。3.44.9 に同梱されている Dart 3.12.2 では、次のコードがそのまま Point(1, 2) と出力します。呼び出し側の引数名は x: のように先頭の _ を外した名前になります。
class Point {
final int _x, _y;
Point({required this._x, required this._y});
@override
String toString() => 'Point($_x, $_y)';
}
void main() => print(Point(x: 1, y: 2));
3.44.1から3.44.9までの修正履歴
パッチごとの修正は、タグ 3.44.9 の CHANGELOG.md に載っています。日付は releases_macos.json の release_date をUTCの日付で表記しています。
| 版 | 公開日 | Dart | 主な修正 |
|---|---|---|---|
| 3.44.1 | 2026-06-01 | 3.12.1 | 解析サーバー終了時のツールのクラッシュ |
| 3.44.2 | 2026-06-11 | 3.12.2 | SwiftPM のリモート依存が取得できない |
| 3.44.3 | 2026-06-22 | 3.12.2 | SwiftPM の並行ビルドでクラッシュ |
| 3.44.4 | 2026-06-24 | 3.12.2 | Linux のテキスト欄の境界チェック |
| 3.44.5 | 2026-07-06 | 3.12.2 | HCPP 使用時の終了・回転でのクラッシュ |
| 3.44.6 | 2026-07-09 | 3.12.2 | Android の計装テストでクラッシュ |
| 3.44.7 | 2026-07-20 | 3.12.2 | 外部テクスチャのリソースリーク |
| 3.44.8 | 2026-07-23 | 3.12.2 | Xcode 27 での lipo 検証エラー |
| 3.44.9 | 2026-08-06 | 3.12.2 | iOS デバッグ中のクラッシュでツールが停止 |
表に載せたのは各版の代表的な修正だけです。3.44.2 では、iOS 以外のビルドで SwiftPM の警告が出る問題も直っています。3.44.5 では、AGP 9 未満で KGP を使っているプロジェクトに、built-in Kotlin への移行を促す警告が誤って出る問題と、フレーバー付きの App Bundle に libapp.so が入らない問題も直りました。SwiftPM と HCPP を使うなら、少なくとも 3.44.5 まで上げておくべきです。
3.44系の更新が3.44.9で止まった理由
CHANGELOG の冒頭には「ホットフィックスは最新の安定版にしか出さない」と書かれています。3.47.0 が2026年8月12日に出たので、3.44 系は8月6日の 3.44.9 が最後になりました。Flutter は版ごとのサポート終了日(EOL)を公表していません。修正が届くのは最新の安定版だけなので、3.47.0 が出た時点で 3.44 系への修正は止まった、と考えるのが実態に合っています。
SwiftPM(Swift Package Manager)が既定になった変更
既定化の中身:features.dartの設定とビルド時の自動移行
SwiftPM の有効・無効は、flutter_tools の features.dart で管理されています。3.41.9 では stable チャンネルの設定が available: true だけでしたが、3.44.9 の features.dart では enabledByDefault: true が加わりました。何も設定しなければ有効になる、ということです。
公式ブログによると、アプリをビルドまたは実行したときに Flutter の CLI が Xcode プロジェクトを SwiftPM 用に書き換えるので、すべての依存プラグインをSwiftPMで解決できる場合は、Ruby や CocoaPods を自分で入れる必要がなくなります。CocoaPodsへのフォールバックが必要な場合は、引き続きその実行環境が必要です。3.44.9 で flutter create した新規プロジェクトでは、ios/ に Podfile が作られず、project.pbxproj には FlutterGeneratedPluginSwiftPackage への参照が10か所ありました。既存プロジェクトでは Podfile と Pods/ が残るので、SwiftPM に対応したプラグインから順に Pods の管理を外れていく、二重管理の状態から始まります。
CocoaPodsにフォールバックする条件と出る警告
SwiftPM に対応していないプラグインがあると、そのプラグインだけ CocoaPods で解決されます。3.44.9 の darwin_dependency_management.dart では、このとき次の警告を出すことになっています。
The following plugins do not support Swift Package Manager for ios:
- (プラグイン名)
This will become an error in a future version of Flutter. Please contact the plugin maintainers to request Swift Package Manager adoption.
警告文のとおり、将来はエラーに変わる予定です。CI のログでこの警告を検知したら、そのプラグインの更新予定を確認してください。ほかにも、次の2つの場合は SwiftPM が使われません。
- Xcode 15 未満を使っている。
- 既存の iOS アプリに Flutter を組み込む add-to-app のモジュールである(ソースのコメントでは issue #146957 が残っています)。
add-to-app 向けには、3.44 で flutter build swift-package が追加されました。ヘルプには「既存のネイティブ iOS・macOS の Xcode プロジェクトに組み込むための Swift パッケージとスクリプトを作る」と書かれていて、macOS でしか実行できません。出力先は -o で指定します。
SwiftPMを無効化する3つの方法
SwiftPM で問題が出て一時的に CocoaPods に戻すときは、範囲に応じて次のいずれかを使います(Swift Package Manager for app developers)。
# プロジェクト単位(pubspec.yaml)
flutter:
config:
enable-swift-package-manager: false
# このマシンの全プロジェクト
flutter config --no-enable-swift-package-manager
# CI のジョブ単位(pubspec.yaml・グローバル設定で同項目が未指定の場合)
FLUTTER_SWIFT_PACKAGE_MANAGER=false flutter build ios
以前の版の書き方である flutter: 直下の disable-swift-package-manager: true は、3.44.9 の flutter_manifest.dart ではThe "disable-swift-package-manager" configuration has moved.という検証エラーになります。古い pubspec.yaml を流用している場合は、上の config: の形に書き換えてください。
公式ブログは、無効化した場合は Xcode のプロジェクトファイルを添えて GitHub に不具合を報告するよう求めており、この無効化の手段もいずれ削除するとしています。無効化を使うのは、移行の期限を延ばすためではなく、原因を切り分けるあいだの一時的な措置と考えてください。SwiftPM 自体の使い方はSwift Package Manager入門|使い方とPackage.swift、CocoaPods移行をSwift 6世代で解説で解説しています。
CocoaPods trunkの読み取り専用化の日程
CocoaPods 公式ブログの計画では、2026年11月1〜7日に読み取り専用化の試験運用を行い、12月2日に trunk が新しい Podspec を恒久的に受け付けなくなります。同じ記事は「2026年以降も CocoaPods を使うビルドは壊れないが、trunk 経由の依存の更新は届かなくなる」と書いています。
そのため、12月以降も CocoaPods のままのプラグインには、セキュリティ修正が届かない可能性があります。SwiftPM 未対応のプラグインを使っているなら、乗り換え先を11月中に決めておくべきです。CocoaPods 側の手順はCocoaPodsとは?1.17.0の使い方とpod install、2026年12月の読み取り専用化への備えにまとめています。
Hybrid Composition++(HCPP)を有効にする手順と条件
HCPPが有効になる端末の条件
HCPP は、WebView や地図などの Android ネイティブビューを Flutter 画面に埋め込む「プラットフォームビュー」の新しい描画方式です。公式ブログによると、合成を Android OS に任せ、Vulkan のハードウェアバッファのスワップチェーンと SurfaceControl のトランザクションで Flutter の描画とネイティブビューを同期させます。スクロール時の描画のずれや、SurfaceView の表示が改善されます。
Platform Views のドキュメントには、HCPP が使える条件として次の3つが挙がっています。
- Android API 34 以上
- Vulkan で描画できる端末(Vulkan が使えない端末では Impeller が OpenGLES に切り替わり、その構成では HCPP は使えません)
- 描画エンジンが Impeller であること
条件を満たさない端末では、アプリに設定済みの従来の方式に自動で戻ります。オプトインしても、Android 13 以下の端末の挙動は変わりません。
flutter runのフラグとAndroidManifest.xmlの設定
HCPP を有効にする方法は2つあり、用途で使い分けます。手元で試すときは flutter run --enable-hcpp を使います。3.44.9 では、このフラグは flutter run -h には表示されず、flutter run -h -v で初めて「Whether to enable the HCPP platform view mode on the Impeller rendering backend.」と表示されました。flutter build apk --enable-hcpp は Could not find an option named "--enable-hcpp". で止まるので、リリースビルドでは AndroidManifest.xml の <application> 内に次の設定を書きます。
<meta-data
android:name="io.flutter.embedding.android.EnableHcpp"
android:value="true" />
Dart 側で新しく使う API はありません。既存のプラットフォームビューは、この設定だけで HCPP に切り替わります。ただし、HCPP 使用時に終了や回転でクラッシュする問題は 3.44.5 で直ったばかりです。3.44.4 以前のまま HCPP を本番で有効にするのは避けてください。将来は既定の方式になる予定ですが、3.44 の時点ではまだ実験的な機能です。
AGP 9とbuilt-in Kotlin:3.44の暫定対応
新規テンプレートのGradle設定
3.44.9 で flutter create したプロジェクトの Android 側の設定値は次のとおりです。値は settings.gradle.kts、gradle-wrapper.properties、gradle.properties と、gradle_utils.dart で確認しました。
| 項目 | 3.44.9 の値 |
|---|---|
| Gradle | 9.1.0 |
| Android Gradle Plugin | 9.0.1 |
| Kotlin Gradle Plugin | 2.3.20 |
| compileSdk・targetSdk | 36 |
| minSdk | 24 |
| Java | 17 |
| android.builtInKotlin | false |
| android.newDsl | false |
iOS 側は IPHONEOS_DEPLOYMENT_TARGET が 13.0 で、Runner には SceneDelegate.swift が最初から入っています。
builtInKotlin=falseが意味する移行の段階
AGP 9 からは Kotlin のコンパイルが AGP に組み込まれ、別途 KGP(kotlin-android)を適用すると衝突してビルドに失敗します。移行ガイドによると、Flutter は段階を分けて対応しています。
- 3.44:
android.builtInKotlin=falseを指定すれば、AGP 9 以降でも旧来の KGP を使ってビルドできるようにした(一時的な措置)。 - 3.47:アプリとすべてのプラグインが移行し終えたら、
android.builtInKotlin=trueを有効にできるようにした。 - 将来:KGP を適用する方式のサポートを削除する予定(issue #184837)。
実際、3.44.9 のテンプレートは gradle.properties に android.builtInKotlin=false と android.newDsl=false を書き、アプリモジュールでは kotlin-android を適用していません。Flutter 3.47以降で built-in Kotlin を有効にするときは、アプリだけでなく、依存するすべてのプラグインも移行済みである必要があります。3.44の暫定構成では、built-in Kotlin を無効にして旧来の KGP を利用できます。built-in Kotlin に移行したアプリで KGP を適用したままのプラグインがあるとビルドは失敗し、公式ブログは、修正できるのはプラグインの作者だけなので報告してほしい、としています。プラグインの作者には、Gradle ファイルの修正に加えて、pubspec.yaml の Flutter の最小バージョンを 3.44 にするよう求めています。
3.44の破壊的変更と書き換えコード
Flutter 3.44の破壊的変更:公式一覧9項目と追加の2項目
破壊的変更の一覧は、3.44 の欄に9項目を挙げています。3.44.0 のリリースノートには、一覧には載っていないものの、コンパイルが通らなくなる変更がさらに2つあります(PR 182642 と 183070)。3.44.9 で flutter analyze を実行した結果も表に入れました。
| 変更 | 3.44.9 での挙動 |
|---|---|
| IconData が final | 継承すると error |
| TextDecoration が final | 継承すると error(一覧外) |
| ExtendSelectionByPageIntent 削除 | undefined で error(一覧外) |
| ページ遷移ビルダーの再編 | material.dart のみでは error |
| onReorder の非推奨 | info(deprecated_member_use) |
| ListTile と色付きウィジェット | デバッグ時に FlutterError |
| cacheExtent・cacheExtentStyle | 非推奨 |
| TextInputConnection.setStyle | 非推奨 |
| RawMenuAnchor の close 順 | コールバックの順序変更 |
| Android 17以降をターゲットとするアプリ | 幅600dp以上で向き固定などの制限を無視 |
| built-in Kotlin への移行 | 前章を参照 |
IconData・TextDecorationのfinal化と削除されたIntent
IconData を extends や implements しているコードは、「The class ‘IconData’ can’t be extended outside of its library because it’s a final class」というエラーになります。TextDecoration も同様です。アイコンの tree shaking を一般的な仕組みに移すための変更なので、IconData の移行ガイドどおり、enum AppIcons implements IconData のような型は static const を並べたクラスに書き換えます。
class AppIcons {
AppIcons._();
static const IconData arrowUpward = IconData(0xe0a0, fontFamily: 'MaterialIcons');
static const IconData arrowDownward = IconData(0xe097, fontFamily: 'MaterialIcons');
}
アイコンパッケージの中には IconData を継承した型を公開しているものがあるので、自分のコードに該当箇所がなくても、依存パッケージのコンパイルエラーで気付くことがあります。ExtendSelectionByPageIntent の参照は修正が必要です。不要な定義は削除し、ページ単位の選択移動が必要なら ExtendSelectionVerticallyToAdjacentPageIntent など、目的に合う Intent と Action への置き換えを検討してください。
CupertinoPageTransitionsBuilderはcupertino.dartのimportが必要
CupertinoPageTransitionsBuilder は Material ライブラリから Cupertino ライブラリへ移りました。3.44.9 では、package:flutter/material.dart だけを import したコードで使うと、「The function ‘CupertinoPageTransitionsBuilder’ isn’t defined」というエラーになります。次のように Cupertino も import すれば解決します。
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
const theme = PageTransitionsTheme(
builders: {TargetPlatform.iOS: CupertinoPageTransitionsBuilder()},
);
onReorderItemへの置き換えとnewIndexの違い
ReorderableListView などの onReorder は非推奨になり、onReorderItem に置き換わりました。違いは第2引数の newIndex です。3.44.9 で、3件のリストの先頭の項目を末尾までドラッグするテストを書いて比べたところ、旧 onReorder は 0->3、onReorderItem は 0->2 を渡しました。旧コードにある「oldIndex < newIndex なら newIndex -= 1」という補正をそのまま残して onReorderItem に移すと、移動先が1つずれます。置き換えるときは補正を必ず消してください。
ListTileのエラーが出る条件と直し方
ListTile と最も近い Material の間に背景色を持つウィジェットがあると、デバッグ時に「ListTile background color or ink splashes may be invisible.」というエラーが出ます。3.44.9 の list_tile.dart を読むと、この判定が動くのは onTap か onLongPress のどちらかが指定されている場合、または通常時・選択時の背景色のいずれかのアルファ値が0より大きい場合でした。背景色が半透明でも判定対象です。対象になるのは ColoredBox と、色を持つ DecoratedBox です。テストでも、onTap のない ListTile を白い ColoredBox で包んだだけではエラーにならず、Container(color: ...) に onTap 付きの ListTile を入れるとエラーになりました。Container は内部で ColoredBox を使うので、エラー文には ColoredBox と表示されます。直し方は、ListTile を Material(type: MaterialType.transparency) で包み直すか、間のウィジェットの背景色を外すことです。
Material・Cupertinoの凍結とUIScene対応の扱い
公式ブログによると、Material と Cupertino のライブラリは 3.44 で凍結され、フレームワーク本体での更新はこれが最後になりました。今後は pub.dev の material_ui と cupertino_ui に移ります。pub.dev の API が返す公開日時(published)では、両パッケージの 1.0.0 は2026年8月12日に公開されていて、どちらも flutter: >=3.44.0 を要求しています。3.44 のうちに import を書き換える必要はありません。本格的な移行(dart fix による書き換えと互換ブリッジ)は 3.47 の話なので、3.47 の記事で確認してください。
iOS の UIScene ライフサイクルについて、公式ブログは「3.44 で新しい変更はない」と書いています。ただし、3.44.0 のリリースノートには、起動ログから UIScene 関連の問題を検知して案内を出す変更(PR 181515)と、UIScene に移行していないプラグインを警告する変更(PR 182826)が入っています。移行の手順と、自動移行が効かない条件はFlutter UIScene移行手順|SceneDelegate対応と自動移行が効かない条件【2027年4月必須・Xcode 27】で扱っています。
開発環境の変更:DevTools・Widget Previews・Apple Silicon・Agentic Hot Reload
- DevTools:WASM 版が既定になりました。3.44.9 に同梱されているのは DevTools 2.57.0 です。
- Widget Previews(実験的):プレビューの検出を Dart Analysis Server で行うようになり、公式ブログによると IDE 全体のメモリ使用量が最大50%減ります。グループ・名前・URI で絞り込むこともできるようになりました。
- Apple Silicon:iOS 端末と通信するバイナリを含め、macOS 向けのコマンドラインツールがすべて ARM ネイティブになり、Rosetta が不要になりました。公式ブログは、将来の版で Intel Mac のサポートを終えると予告しています。
- Agentic Hot Reload:Dart と Flutter の MCP サーバーが、実行中のアプリを自動で見つけて接続します。コーディングエージェントがコードを編集したあと、ホットリロードまで実行できます。仕組みと既定値はFlutter MCPサーバー(Dart MCP Server)とは?24ツールの内訳と既定オフの落とし穴【2026年8月時点】を参照してください。
Flutter 3.44に留める案件と3.47へ上げる案件の判断
3.44 系にパッチはもう出ないので、3.44 に留めるならば 3.44.9 に固定するのが前提です。3.44.9 に留めてよいのは次のような案件です。
- 契約上、iOS 13・14 をサポートし続ける必要がある(3.47 の新規テンプレートは iOS 15.0 が最低です)。
- ストアへの申請直前で、依存関係の変更を増やしたくない。
Material・Cupertino の UI 資産が大きいことは、3.44 に留まる理由になりません。3.47 でも material_ui への移行は任意で、フレームワーク内の Material のまま上げられます。
それ以外の案件は、3.47 系へ上げることを勧めます。理由は2つあります。3.44 系に新たなホットフィックスが提供されないことと、3.47で追加された変更・修正を取り込めることです。CocoaPods trunkの読み取り専用化への対応は別途必要で、Flutter SDKを更新するだけではプラグインのSwiftPM移行は完了しません。複数の案件で版が分かれるなら、FVMとは?Flutter SDKをプロジェクト単位で固定する運用とCI設定【2026年8月時点】の方法で、プロジェクトごとに 3.44.9 と 3.47 系を固定すると切り替えの事故を防げます。3.41 から上げる場合は、Flutter 3.41の変更点|Dart 3.11・UIScene既定化と3.41.9までの修正履歴で 3.41 の差分を確認してから、3.44、3.47 の順に読み進めてください。版の移行やプラグインの SwiftPM 対応を外部に任せる場合は、Flutter / React Native開発の支援内容をご覧ください。
よくある質問|Flutter 3.44のバージョン・SPM・HCPP
Flutter 3.44はいつリリースされ、Dartのバージョンはいくつですか?
3.44.0 は2026年5月18日に公開され、Dart 3.12.0 を同梱しています。最後のパッチの 3.44.9(2026年8月6日)は Dart 3.12.2 です。flutter --version の Tools 行で確認できます。
Flutter 3.44.8と3.44.9では何が直りましたか?
3.44.8 は、Xcode 27 のツールチェーンで macOS・iOS 向けにビルドすると lipo の検証エラーで失敗する問題と、一部のメーカー製 Android 11 端末でのアクセシビリティの不具合を直しました。3.44.9 は、iOS アプリのデバッグ中にアプリがクラッシュすると Flutter の CLI とテストが止まったままになる問題を直しています。
Flutter 3.44のサポート期限(EOL)はいつですか?
Flutter は版ごとの EOL を公表していません。CHANGELOG によると、ホットフィックスは最新の安定版にしか出ません。3.47.0 が出た2026年8月12日以降、3.44 系には修正が出ておらず、3.44.9 が最後です。
Flutter 3.44でSPMを無効にしてCocoaPodsに戻すにはどうしますか?
プロジェクト単位なら、pubspec.yaml の flutter: config: に enable-swift-package-manager: false を書きます。マシン全体なら flutter config --no-enable-swift-package-manager、CI のジョブ単位なら環境変数 FLUTTER_SWIFT_PACKAGE_MANAGER=false を設定できます。ただし、同項目がpubspec.yamlやグローバル設定で指定されている場合は、そちらが優先されます。公式は、この無効化の手段をいずれ削除するとしています。
HCPPはflutter buildで有効にできますか?
できません。--enable-hcpp は flutter run と flutter test 用のフラグで、3.44.9 の flutter build apk に渡すと「Could not find an option named」で止まります。リリースビルドでは、AndroidManifest.xml に io.flutter.embedding.android.EnableHcpp の meta-data を追加します。
関連記事
- Flutter 3.47とは?material_ui移行・iOS 15と3.47.7までの修正【2026年10月時点】
- Flutter 3.41の変更点|Dart 3.11・UIScene既定化と3.41.9までの修正履歴
- Flutter UIScene移行手順|SceneDelegate対応と自動移行が効かない条件【2027年4月必須・Xcode 27】
- CocoaPodsとは?1.17.0の使い方とpod install、2026年12月の読み取り専用化への備え
- Swift Package Manager入門|使い方とPackage.swift、CocoaPods移行をSwift 6世代で解説