Announcing Dart 3.8【日本語訳】

訳者はじめに

FltuterとDartの3ヶ月ごとのバージョンアップに対してブログ記事がありますので、そちらの日本語訳をさせていたただいております。誤訳・改善点があればご連絡いただけると助かります。
こちらはAmanda Fitch さんの「Announcing Dart 3.8」の記事を訳しました。

Google I/O 2025のFlutter関連の翻訳記事

はじめに

このリリースでは、フォーマッターのアップデート、コレクション用のNull認識要素(null-aware elements)、新しいクロスプラットフォーム開発機能、pub.devでトレンドのパッケージを簡単に探す方法の改善、ウェブでのホットリロードのサポート、およびその他の機能を追加しました!また、FFigenとJNIgenの早期アクセスプログラムに参加感兴趣の開発者がいることを期待しています。

Dart 3.8 新機能のアニメーション

Dart 3.8 のリリースを発表

フォーマッターのアップデート

前回のリリースでは、新しい「tall」スタイルをサポートする大幅に再実装されたフォーマッターが追加されました。Dart 3.8 リリースでは、追加のフィードバックを反映し、バグ修正を行い、その他の改善を加えています。
注意:Dart 3.8 SDK にアップグレードしても、パッケージの pubspec で最新の言語バージョンを選択するまでフォーマットは変更されません。

末尾のコンマとより長いコード

以前のリリースでは、末尾のコンマが周囲の構文を分割させる原因となっていました。新しいフォーマッターは、構文が分割されるかどうかを判断し、必要に応じて末尾のコンマを追加または削除します。

// フォーマッター適用前
TabBar(tabs: [Tab(text: 'A'), Tab(text: 'B')], labelColor: Colors.white70);

// フォーマッター適用後
TabBar(
  tabs: [
    Tab(text: 'A'),
    Tab(text: 'B'),
  ],
  labelColor: Colors.white70,
);

古い動作を好む場合は、設定フラグで再有効化できます。

スタイルの変更

出力の品質を向上させるためのスタイル変更が複数追加されました。以下に例を示します:

// 以前のリリースでのフォーマッタ(関数)
function(
  name:
      (param) => another(
        argument1,
        argument2,
      ),
);

// Dart 3.8 フォーマッター (関数)
function(
  name: (param) => another(
    argument1,
    argument2,
  ),
);
// 以前のリリース版フォーマッター (変数)
variable =
    target.property
        .method()
        .another();

// Dart 3.8 フォーマッター (変数)
variable = target.property
    .method()
    .another();

クロスコンパイル

Windows、macOS、および Linux 開発マシンからネイティブ Linux バイナリに コンパイルする新しいサポートが追加されました。これには、dart compile exeまたは dart compile aot-snapshotコマンドと、--target-osおよび --target-archフラグを使用します。

// exe 用のクロスコンパイル例
$ dart compile exe --target-os=linux --target-arch=arm64
// aot-snapshot 用のクロスコンパイル例
$ dart compile aot-snapshot --target-os=linux --target-arch=arm64

サンプル使用例:

  • 組み込みデバイス(例: Raspberry Pi)上で高速な開発用ノートPCからコンパイルする場合、組み込みデバイス自体の処理能力が低い場合よりもコンパイルが高速になります。
  • Linuxベースのバックエンドを非Linux開発マシン上でコンパイルする場合。

Null認識要素

新しい Null認識要素(null-aware elements) を使用すると、要素が null でない場合にリスト、セット、マップなどのコレクションに要素を追加できます。コレクションリテラル内で要素を Null認識要素にするには、要素の前に を付加します。
null-aware 要素を含まないリストで null 値を削除する例:

// null-aware 要素を含まないコード
var listWithoutNullAwareElements = [
  if (promotableNullableValue != null)
    promotableNullableValue,
  if (nullable.value != null)
    nullable.value!,
  if (nullable.value case var value?)
    value,
];

Null 値を削除する Null認識要素 を含むリスト:

// Null認識要素 を含むコード
var listWithNullAwareElements = [
  ?promotableNullableValue,
  ?nullable.value,
  ?nullable.value,
];

ドキュメントインポート

ドキュメントインポートのサポートが追加されました。これは、外部要素を実際にインポートせずにドキュメントコメント内で参照できる新しいコメントベースの構文です。このタグは、libraryディレクティブの上にあるドキュメントコメントで指定できます。
次の例では、[Future][Future.value]dart:asyncライブラリからインポートされていますが、これはドキュメントコメント内でのみ有効です:

/// @docImport 'dart:async';
library;

/// ドキュメントコメントでは、
/// [Future] と [Future.value] のような要素を
/// `dart:async` から参照できます。
/// 実際のインポートでライブラリをインポートしていなくても可能です。
class Foo {}

Docインポートは、通常のDartインポートと同じURIスタイルをサポートしています。これには、dart:スキーマ、package:スキーマ、および相対パスが含まれます。ただし、asshowhideで遅延または構成することはできません。

pub.devのトレンドパッケージ

pub.devのランディングページは、「Most Popular Packages」セクションを「Trending Packages」セクションに置き換えました。この新しいセクションでは、最近採用やコミュニティの関心で著しい成長を示したパッケージが紹介されます。

pub.devのトレンドパッケージ表示

pub.dev の「Trending Packages」セクション

ウェブでのホットリロード(実験的機能)

Dart Development Compiler(DDC)を使用する場合、ウェブ上でステートフルホットリロードが利用可能になりました。Dart コードの JS 表現の再設計により、実行中のアプリケーションでコードを交換できるようになりました。
この機能の開発は継続中ですが、Dart 3.8 で初めて試すことができます。最初は Flutter アプリから開始されます。詳細な手順は、Flutter ブログ記事をご確認ください。

ウェブでのDart状態保持ホットリロード

Dart ウェブ用の状態保持型ホットリロード

これは、ランタイムの型表現の変更、クラス階層の再設計、コードの読み込み方法のアップデートを含む複数年にわたる取り組みでした。目標は、VMの既存のホットリロード実装と完全な互換性を実現することです。ほぼすべてのケースで、この機能はVMで慣れているものと区別できないはずです。既知の問題は、イシュートラッカーでご確認いただけます。
この機能はまず Flutter アプリで利用可能になるように焦点を当てていますが、将来的には build_web_compilers にホットリロードを統合し、Flutter 以外のウェブアプリでも利用可能にする計画です。

直接ネイティブ相互運用性

FFigen と JNIgen というネイティブプラットフォーム API の統合を簡素化するコード生成ソリューションの早期アクセスプログラムを開始します。これらのソリューションを使用してプラグインの開発やリファクタリングを検討している Flutter プラグイン作者を募集しています。
詳細については、ブログ記事「Flutterのシームレスな相互運用性への道」をご確認ください。この記事では、直接的なネイティブ相互運用性に関する当社のビジョン、実現に向けたロードマップ、および早期アクセスプログラムについて説明しています。

まとめ

Dart 3.8は、開発体験の向上への継続的な取り組みを証明するリリースです。これらの新機能(インテリジェントフォーマッター、クロスコンパイルサポート、Null認識要素、ウェブホットリロード、ネイティブ相互運用性の早期アクセスなど)をぜひお試しください。皆様の洞察と貢献は、DartとFlutterの継続的な成長に不可欠です。皆様が創造するアプリを楽しみにしています。
今すぐDart 3.8にアップグレードして、開発を楽しみましょう!