🎯

Dart 2.14 🎯 忙しい人のためのアップデートまとめ (21/9/9)

2021/09/09に公開

はじめに

この記事は9月9日付のDart 2.14公式アナウンスのまとめです。

Flutter 2.5 はこちら
https://zenn.dev/inari_sushio/articles/f55cebe855d919

Dart ヤバイ

Null safety 順調

  • 上位250のパッケージはすべてnull safetyサポート
  • 上位1000の94%がサポート
  • flutter runの実行を解析すると56%のプロジェクトが移行済み

Apple Silicon でのネイティブ実行サポート

  • SDKにmacOS ARM64版が追加
  • Flutter SDKにバンドルされているDart SDKではまだ対応していない
  • コマンドラインツールの実行速度がかなり速くなるはず

Dart / Flutter の公式lintコレクション

  • スタイルルールが多いので、場面ごとにどのルールを適用するのがおすすめか公式見解を出そうという趣旨
  • pedanticが使われてきたがこれはGoogle内部で使われてきたもので一般のスタイルガイドともFlutterチームのものとも少し異なるので、今後は以下の3つを使ってね
    • package:lints/core.yaml: Dartチームが考える理想のルール集。pub.devのスコアエンジンはpedanticの代わりにこれを基準にするように変更済み。
    • package:lints/recommended.yaml: マストのルール、プラスアルファ。一般的なDart開発に最適。
    • package:flutter_lints/flutter.yaml: マストのルールにFlutter特有のルールなどを追加。Flutterのコードにおすすめ。
      • Flutter 2.5 から flutter create 時に analysis_options.yaml が自動で生成され flutter_lints が dev_dependencies に追加されるようになります
  • pedanticからの移行ガイドはこちら

カスケード記法周りのフォーマッター改善

  • カスケード記法を含む場合のコードのフォーマット速度を大幅改善
  • 以下のケースでdoIt()がbadにかかるのかfooとbadにかかるのかわかりづらかった(実際は両者にかかる)のでフォーマットを変更
BEFORE
var result = errorState ? foo : bad..doIt();
AFTER
var result = errorState ? foo : bad
  ..doIt();

言語機能

  • 右論理シフト演算子(>>>)が復活(昔あったみたい)
  • 型引数に関数型のジェネリクスが使えるようになった
late List<T Function<T>(T)> idFunctions;
  • アノテーションに型引数が使えるようになった
<int>(42, "The meaning")

公式パッケージ、コアライブラリ

  • DateTimeクラスで30分シフトのDST(daylight saving time)地域の時間処理が正確に
  • package:ffi, アリーナアロケーターを利用したメモリ管理に対応
  • package:ffigen, C typedefからDart typedef の生成が可能に

pub.dev アップロード対象のコントロール

  • pubコマンドで新しく .pubignore ファイルをサポート。pub.devにアップしたくないファイルやフォルダを指定できる。.gitignore と同じフォーマット。
  • 詳細はこちら

dart test 周りのパフォーマンス

  • dart testに無関係なpubspecへの変更をした際にもネイティブへの事前コンパイルがなされていたのを、バージョンが変わった時だけbuildが走るように
  • 事前コンパイル自体の速度も改善

破壊的変更

  • #46545: dart2js, デフォルト出力がES6に
  • #46100: スタンドアロンのdartツール stagehand, dartfmt, dart2native が非推奨(統合ツールへ移行)
  • #45451: Dart VMのネイティブ拡張が非推奨(Dart FFIへ移行)

Discussion