Announcing Dart 3.12【日本語訳】

訳者 はじめに

Connie Ooiさんによる「Announcing Dart 3.12」(原文)の日本語訳です。勝手に訳して、後から許可をとる
以前はMediumにありましたが、dart.dev に配置するようになったみたいです。

はじめに

Google I/O 2026 で開発者の生産性を飛躍的に向上

Dart 3.12 リリースバナー(Dart ロゴとブルズアイアイコン付き)
Dart 3.12 の発表

今年の Google I/O 2026 において、Flutter および Dart チームは、「あらゆる場所で、毎日、誰もが、みんなのために」という力強いテーマを掲げています。

Dart 3.12はこのテーマを具現化するものです。私たちは、この言語をより親しみやすく、生産性の高いものにしています。プライベートな名前付きパラメータのような簡潔な新しいプリミティブや、プライマリコンストラクタの実験的サポートにより、日々のコーディングがよりクリーンになります。しかし、私たちは構文レベルにとどまりませんでした。Agentic Hot Reloadのような新機能や、DartエコシステムへのGenkitの追加により、どこにいるユーザーにも届く、高性能でAI対応、かつエージェント機能を備えたアプリを構築できるようになります。これは、一人でコーディングする場合でも、AIエージェントとペアプログラミングする場合でも変わりません。

ぜひ Dartをアップデート するか、Flutter upgrade を実行して、Dart 3.12の新機能を一緒に探ってみましょう。ただし、Dartの機能強化は物語の半分に過ぎないことを忘れないでください。これらの機能がどのように美しいUIに反映されるかを確認したい場合は、Flutterの新機能のブログ記事をご覧ください。

言語の更新

プライベートな名前付きパラメータ

Dartの初期化形式(this. コンストラクタ構文を使用)は非常に便利です。これにより、コンストラクタパラメータをクラスフィールドに直接マッピングできます。これにより、繰り返しのコードを書く必要がなくなります。

しかし、問題がありました。初期化形式は、名前付きパラメータとプライベートフィールドを組み合わせる際に課題を抱えていました。Dart 3.12以前、この言語では名前付きパラメータの先頭にアンダースコアを付けることが許可されていませんでした:

class Hummingbird {
  final String _petName;
  final int _wingbeatsPerSecond;

  // Compile error! Can't have private named parameter. :(
  Hummingbird({required this._petName, required this._wingbeatsPerSecond});
}

その代わりに、明示的な初期化リストを記述する必要がありました:

class Hummingbird {
  final String _petName;
  final int _wingbeatsPerSecond;

  Hummingbird({required String petName, required int wingbeatsPerSecond})
    : _petName = petName,
      _wingbeatsPerSecond = wingbeatsPerSecond;
}

これは面倒でした。初期化リストがしていることは、単に _ を削除することだけです。単純なクラスに不要な定型コードを追加することになっていました。

Dart 3.12 では、言語が自動的にこれを行ってくれます。Dart では、プライベートな名前付き初期化形式を記述できるようになりました:

class Hummingbird {
  final String _petName;
  final int _wingbeatsPerSecond;

  // OK with "Private Named Parameters"! :D
  Hummingbird({required this._petName, required this._wingbeatsPerSecond});
}

このコードは、前の例とまったく同じように動作します。初期化されたフィールドはプライベートですが、コンストラクタのパラメータや呼び出し側で記述される引数名は、対応するパブリックな名前になります:

void main() {
  print(Hummingbird(petName: 'Dash', wingbeatsPerSecond: 75));
}

詳細はこちら: プライベートな名前付きパラメータのドキュメント

プライマリコンストラクタ (実験段階)

Dartで最も要望の多かった構文機能の一つを、いち早くご紹介できることを嬉しく思います。プライマリコンストラクタは、クラスの簡潔性を大幅に向上させるものです。これにより、クラス本体やパラメータリスト内でフィールド名や型を繰り返し記述する必要がなくなります。

通常、単純な2つのフィールドを持つクラスであっても、次のような繰り返しの定型コードが複数行必要となります:

class Point {
  final int x;
  final int y;
  Point(this.x, this.y);
}

プライマリコンストラクタはこの状況を根本から変えます。クラスヘッダー内で直接パラメータを宣言することで、定型コードをたった1行のコードに置き換えることができるようになりました。

class Point(final int x, final int y);

この機能はさらに進化しています。new または factory キーワードを使用してクラス本体内でコンストラクタを宣言するための、より簡潔な構文が導入されました。また、本体が空のクラスは、単純なセミコロンで終了できるようになりました:

class Pet {
  String name;

  new() : name = 'Fluffy';
  new withName(this.name);
}

class Dog extends Pet;

プライマリコンストラクタは、Dart 3.12で実験的なプレビューとして提供されます。これはDartクラスの定義方法における根本的な変更であるため、皆様からの実際のフィードバックが不可欠です。プロジェクトを実行する際、primary-constructors フラグ を使用してこの機能を有効にできます:

dart run --enable-experiment=primary-constructors bin/main.dart

問題が発生した場合や設計に関するフィードバックがある場合は、Dart SDK リポジトリ にイシューを登録してください(@kallentu をCCに追加しても構いません)。皆様のご意見をお待ちしております!

詳細はこちら: プライマリコンストラクタのドキュメント

エコシステムの最新情報

Genkit Dart プレビュー

あらゆるプラットフォーム上で、AIを活用したフルスタックのエージェント型DartおよびFlutterアプリを構築するためのオープンソースフレームワーク「Genkit Dart」のプレビュー版リリースを発表できることを嬉しく思います。Genkit Dartは、AIアプリに必要なすべてをすぐに利用可能な状態で提供します:

  • モデル非依存のAPI: Google、Anthropic、OpenAI、およびOpenAI互換モデルをサポートしています。
  • 型安全性: Dartの強力な型システムとschematicパッケージを組み合わせ、強型のデータ生成とワークフローを実現します。
  • どこでも実行可能: AIロジックを一度記述するだけで、バックエンドサービスやFlutterアプリ内で直接実行できます。
  • 開発者向けUI: プロンプトのテスト、トレースの表示、ワークフローのデバッグを行うためのローカルWeb UIが含まれています。
  • コアAIプリミティブ: 構造化された出力、ツールの呼び出し、マルチステップフローに対する組み込みサポートを備えています。

わずか数行のコードで複数のモデルを呼び出す:

import 'package:genkit/genkit.dart';
import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:genkit_anthropic/genkit_anthropic.dart';

void main() async {
  final ai = Genkit(plugins: [googleAI(), anthropic()]);

  // Call a Gemini model from Google.
  final geminiResponse = await ai.generate(
    model: googleAI.gemini('gemini-flash-latest'),
    prompt: 'Hello from Gemini',
  );

  // Call a Claude model from Anthropic.
  final claudeResponse = await ai.generate(
    model: anthropic.model('claude-opus-4.6'),
    prompt: 'Hello from Claude',
  );
}

Discord で Genkit チームとチャットしたり、GitHub で問題を報告したりしてください。

詳細はこちら: Dart 向け Genkit の始め方

Firebase Cloud FunctionsとDartの実験的サポート

また、Firebase Cloud FunctionsにおけるDartの実験的サポートが最近発表されたことを、大変嬉しく思います。長年にわたり、Flutterアプリをクラウドに拡張するには、他のバックエンド言語へのコンテキスト切り替えやデータ構造の複製が必要でした。

今や、真に統合されたフルスタックのDartアプリケーションを構築できます。「Shared Package」パターンを活用することで、データモデル、検証ルール、ビジネスロジックをフロントエンドとバックエンドの間で直接共有でき、「ダブルドキュメントの負担」を完全に排除できます。

DartのAOT(Ahead-of-Time)コンパイルのおかげで、サーバーレス関数は驚くほど高速なコールドスタートを実現し、Dockerfileやコンテナ設定の手間をかけずに、即座にスケーリングとパフォーマンスを得ることができます。

詳細はこちらDartとFirebaseに関するブログ記事

ツールのアップデート

Agentic Hot Reload

DartやFlutterを使用する際、AIコーディングエージェントがシームレスに動作することを望むというコミュニティの声を受けて、DartおよびFlutterアプリ向けの「Agentic Hot Reload」をリリースしました。これは、ユーザーとコーディングエージェントが作業の流れを途切れさせずに済むよう設計された新機能です。Dart MCPサーバーを利用することで、コーディングエージェントが自動的にホットリロードを行うようになり、Dart Tooling Daemon(DTD)の接続URIを手動で探してコピーする手間がなくなります。

裏側では、Dart Tooling DaemonがMCPサーバーによって実行されるCLIコマンドを通じて接続情報を自動的に公開し、コーディングエージェントがワークスペース内で実行中のアプリを即座に検出して接続できるようにします。

設定は一切不要で、この統合により日々のワークフローが効率化されます。コーディングエージェントにバグの修正、UIウィジェットの変更、クラッシュの診断などを指示するだけで済みます。エージェントは自律的にコードを修正し、実行時の診断情報を取得し、アプリをリアルタイムでホットリロードします。

Gemini CLIでテーマとスターアニメーションを変更した後、Dart MCPサーバーがFlutterのスターカウンターアプリをホットリロードする様子を示すアニメーション。分割画面のセットアップでは、左側に制御用の macOS ターミナル、右側にその結果として表示される Android エミュレーターが表示されています。
Dart MCP サーバーによる Agentic ホットリロード。

Analysis Serverのパフォーマンス診断

すべての人にとって最適なツールを構築するため、皆様のマシン上で実際に体験されている通りのDart Analysis Server (DAS)のパフォーマンスを正確に把握したいと考えています。これを実現するために、新しいdart info record-performanceコマンドを導入しました。

解析に時間がかかったり、補完が反応しなくなったりしている開発者は、このコマンドを使用して、お使いのマシン上のアクティブな DAS プロセスからの実行トレースや CPU プロファイリングデータを取得できます。GitHub で課題を報告する際にこれらのトレースを添付していただくと、複雑なパフォーマンスのボトルネックを診断・解決するために必要な、正確な実環境データがチームに提供されます。トレースを共有していただくことで、すべての開発者にとって Dart をより高速で信頼性の高いものにするために、直接的な助けとなります。

Pub の更新

pub における Git LFS のネイティブサポート

大容量ファイルを含むパッケージの使用が、これまで以上に簡単になりました。Dart 3.12 以降、dart pub は Git Large File Storage (LFS) を使用した Git 依存関係をネイティブにサポートしています。

pubspec.yaml ファイルに特別な設定を行う必要はありません。お使いのマシンに git lfs がインストールされていれば、pub クライアントがすべてを自動的に処理します:

dependencies:
      kittens:
        git: https://github.com/munificent/kittens.git

これは、大規模なメディアアセット、データモデル、またはバイナリをGitリポジトリ内で直接バージョン管理しているチームにとって、大きな改善点です。

まとめ

Dart 3.12は、開発者の負担を軽減する上で重要なマイルストーンとなります。簡潔な構文の追加から、シームレスなエージェント型AIワークフロー、そして強化されたAIエコシステムに至るまで、このリリースは皆様をサポートするために構築されています。すべての機能は、日々の開発をクリーンかつ効率的に行うことを目指して設計されています。

これらの新機能を使って皆さんがどのようなものを作り上げるのか、楽しみにしています。ぜひ今日中に Dart を更新 または Flutter をアップグレード して、これらのアップデートをお試しください。プライマリコンストラクタなどの実験的機能をテストされている場合は、ぜひフィードバックをお寄せください。私たちは共に、あらゆる場所で、毎日、すべての人に開発の喜びをもたらす言語を作り続けていきます。

詳細はこちら: Dart SDK 変更履歴