Announcing Dart 3.10【日本語訳】

訳者 はじめに

Amanda Fitchさんによる「Announcing Dart 3.10」(原文)の日本語訳です。勝手に訳して、後で連絡

はじめに

本日、Dart 3.10 のリリースを発表できることを嬉しく思います!

Announcing Dart 3.10

Dart 3.10 の発表

今回のリリースでは、コアとなる開発者体験の向上に引き続き注力しています。新しい ドット省略記法 (.) 機能により、より読みやすく冗長性を抑えたコードが書けるようになります。また、強力な新しい アナライザープラグインシステム を導入し、カスタムの静的解析ルールを作成して IDE に直接統合できるようになりました。さらに、ビルドフック が安定版となったことを発表できることを嬉しく思います!

さらに、pub.devとパッケージ管理にも複数の改善が加えられました。プロフィール内の 「いいね」タブ に新たな検索機能が追加され、パッケージ作成者はセキュリティ強化のため手動公開を無効化できるようになりました。最後に、APIの進化をより細かく制御できる、新たな詳細な非推奨アノテーション群を追加しました。

Dart 3.10 のその他の改善点については、以下をご覧ください。

言語の更新

ドット省略記法 🆕

Dart 3.10 では、ドット省略記法 (.) が導入されました。この新機能により、コンパイラがコンテキストから型を推測できる場合、冗長なクラス名や列挙型名を省略できるようになります。

一般的なシナリオであるロギングを例に説明します。従来は以下のように記述していました:

enum LogLevel { info, warning, error, debug }

void logMessage(String message, {LogLevel level = LogLevel.info}) {
  // ... 実装
}

// アプリケーション内の別の箇所
logMessage('Failed to connect to database', level: LogLevel.error);

levelパラメータは既にLogLevel型を期待しているため、列挙型の名前を繰り返し記述する必要はありません。ドット省略記法を使用すると、次のように記述できます:

enum LogLevel { info, warning, error, debug }

void logMessage(String message, {LogLevel level = .info}) {
  // ... 実装
}

// アプリの別の場所
logMessage('データベース接続に失敗しました', level: .error);

これにより、コードは_型_(LogLevel)ではなく、.error)に焦点を当てられます。

ドット省略記法は列挙型だけでなく、コンストラクタ、静的メソッド、静的フィールドでも使用できます。詳細はドット省略記法ガイドをご覧ください。

ツールの更新

アナライザープラグイン 🆕

コードレビュー中に「アナライザがこれを検出できるはず」と思ったことはありませんか?今やそれが可能です。

Dart 3.10では、Dartアナライザ向けの強力な新プラグインシステムが導入されました。これにより、IDEやdart analyzeflutter analyzeなどのコマンドラインツールに直接統合される独自の静的解析ルールを作成・使用できるようになります。アナライザープラグインを使用して以下が可能です:

  • プロジェクト固有のルール(カスタムリンターや警告など)を適用し、チームのコードベースにおける規約を維持する。
  • 特定のドメインに特有のベストプラクティスを適用し、よくある落とし穴を回避する。
  • クイックフィックスやアシスト機能を提供してコード変更を自動化し、問題の修正や新APIへの移行を支援する。

この新システムは、コミュニティ主導のツールによる豊かなエコシステムを実現するための大規模なアーキテクチャ改修の成果です。アナライザ全般に対する貴重な修正と機能提供を行ったコミュニティ貢献者Felipe Morschel氏に、特に感謝の意を表します。

アナライザプラグインを使用するには、analysis_options.yamlファイルに以下を追加するだけです:

analyzer:
  plugins:
    - some_plugin
    - another_plugin

独自のカスタムルール作成の詳細については、アナライザープラグインの書き方に関するドキュメントを参照してください。

ビルドフック 🚀

Dartパッケージにネイティブコード(C++、Rust、Swiftなど)を統合するには、これまでCMakeやGradleといった複雑なプラットフォーム固有のビルドファイルの管理が必要でした。Dart 3.10では、このプロセスが劇的に簡素化されました。

ビルドフック(旧称: ネイティブアセット)が安定版となったことをお知らせします。これらのフックを使用すると、ネイティブコードのコンパイルや、ダイナミックライブラリなどのネイティブアセットのダウンロード、Dartパッケージへの直接バンドルが可能になります。この強力な機能により、既存のネイティブコードやライブラリをパッケージ内で再利用でき、異なるOS向けにSPM、Gradle、CMakeなどの別々のビルドファイルを作成する必要がなくなります。

詳細は、ビルドフックの作成に関するドキュメントを参照するか、ビルドフックに関するFlutter Build show エピソードをご覧ください。

非推奨機能の削除に関するリンター 🆕

パッケージのメジャーバージョン(例:1.0.0 や 0.2.0)をリリースする際、以前に非推奨とマークした API を削除することがベストプラクティスです。これによりパッケージがクリーンに保たれ、開発者が古いコードを使用するのを防げます。しかし、リリースプロセス中にこの手順を忘れがちです。

この問題を解決するため、新しいリンターを導入しました:remove_deprecations_in_breaking_versions。このリンターは、パッケージのバージョンが新しいメジャーな互換性のないバージョンに更新された際に、残存する非推奨要素を検出します。これらのケースをフラグ付けすることで、パッケージのAPIが最新でユーザーが理解しやすい状態を維持するのに役立ちます。

remove_deprecations_in_breaking_versions lint example

remove_deprecations_in_breaking_versions リンター例

@Deprecated アノテーション ⬆️

既存の @Deprecated アノテーションは汎用的な手段です。APIが推奨されなくなったことを開発者に通知しますが、微妙なニュアンスを表現できません。例えば、クラスは継承すべきではないがインスタンス化は可能であることをどう示すべきでしょうか?

パッケージ作成者が API の進化をより精密に制御できるよう、Dart 3.10 ではより具体的な廃止注釈群を導入しました。

クラスやミックスインの特定のユースケースを廃止できるようになりました:

さらに、@Deprecated.optional() を使用して、オプションパラメータが将来のバージョンで必須となることを通知できるようになりました。

Pubの更新

お気に入りパッケージの検索・並べ替え・いいね解除機能 🆕

pub.dev上のお気に入りパッケージ管理が大幅に強化されました。検索機能またはプロフィールページの「いいね」タブから、通常の検索と同じ操作でお気に入りパッケージの検索・並べ替え・フィルタリングが可能になりました。いいね数、pubポイント、人気度による並べ替えも含まれます。また、パッケージの「いいね」解除操作のUIも改善し、お気に入りパッケージのリストをこれまで以上に簡単に整理・更新できるようになりました。

Search, sort, and unlike support for your favorite packages

お気に入りタブ内のお気に入りパッケージの検索・並べ替え・いいね解除機能

検索機能でお気に入りパッケージを検索する場合は、クエリにis:liked-by-meを追加するだけです。

Enterキーを押すかクリックして画像をフルサイズで表示
Search, but only include packages you like

検索対象を「いいね」したパッケージのみに限定

手動公開の有効化/無効化 🆕

セキュリティ強化と誤公開防止のため、パッケージの手動公開(pub publish)を無効化できるようになりました。自動公開ワークフローを採用しているパッケージや、現在アクティブに公開されていないパッケージに最適です。

手動公開を無効化することで、個人認証情報を使用したパッケージ更新を防ぎ、不正または誤った公開のリスクを軽減します。

この機能は、パッケージの管理タブにある「手動公開を有効にする」チェックボックスで制御できます。

Enable or disable manual publishing in the Admin tab

管理タブで手動公開を有効/無効にする

まとめ

Dart 3.10 リリースでは、開発者の生産性、ツール、パッケージエコシステムの健全性に焦点を当てた数多くの改善が実施されました。コードをより簡潔にするドット省略記法などの言語機能から、アナライザープラグインや安定したビルドフックといった強力な新ツール機能まで、このリリースがより優れたアプリ構築の力となることを願っています。

このリリースに貢献してくださった多くのエンジニアやチーム、特にDartを皆のためにより良いものにするコミュニティ貢献者の皆様に、心より感謝申し上げます。

Dart 3.10で皆様がどのようなものを構築されるか、楽しみにしています。今すぐDart 3.10 SDKを入手して始めましょう。新機能と更新機能の完全なリストについては、Dart SDK変更履歴をご覧ください。