Migrating to null safety on Dart

Table of Contents

Photo by Jamie Davies on Unsplash

いよいよ Dart の null safety が stable となりました.
これまで何回か紹介しているライブラリ ipaddr を null safety にしていく過程をメモしておきます.
参考までに pullrq は下記です.

Sound null safety

ドキュメントどおりに進めていきます.

Migrating to null safety

Check dependency status

まずは使用しているライブラリで null safety に対応してないものがないかを確認します.
ここでつまずくと何もできないです.
ipaddr ではライブラリをほぼ使っていないので下記の通りでした.

$ dart pub outdated --mode=null-safety
Showing dependencies that are currently not opted in to null-safety.
[✗] indicates versions without null safety support.
[✓] indicates versions opting in to null safety.Package Name  Current  Upgradable  Resolvable  Latestdev_dependencies:
pedantic      ✗1.9.2   ✓1.11.0     ✓1.11.0     ✓1.11.0
test          ✗1.15.7  ✓1.16.5     ✓1.16.5     ✓1.16.52 upgradable dependencies are locked (in pubspec.lock) to older versions.
To update these dependencies, use `dart pub upgrade`.

Update dependencies

依存関係に問題が無かったので pub upgrade します.
null-safety オプションを付けて実行すると pubspec.yaml をいい感じに書き換えてくれます.

$ dart pub upgrade --null-safety
$ git diff -U0
diff --git a/pubspec.yaml b/pubspec.yaml
index e20a246..24695a1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -10,2 +10,2 @@ dev_dependencies:
-  pedantic: ^1.8.0
-  test: ^1.6.0
+  pedantic: ^1.11.0
+  test: ^1.16.5
$ dart pub get

Migrate

いよいよ migrating です.
サポートツールがあるので下記の通り実行します.
Web GUI を見ろと言われるので見ます.

$ dart migrate

あとは ! maker を付けて non-nullable であることを指定するなどを行っていきます.
終わったら APPLY MIGRATION ボタンクリックで適応されます.
めっちゃ楽ですね.

IPv4Address コンストラクタでは null を許容しないようになるので null チェックが常に false になるなども表示されます.
ignore: unnecessary_null_comparison を指定することで引き続き null check を記載することも可能です.

Analyze & Test

migrating が終わったらコード解析とテストも忘れずにやっておきます.


$ dart analyze
$ dart test

Finish

はい,これで終了です.
サポートツールが便利なのであっけなく終わりました.
package version はメジャーバージョンをあげることを推奨されているので,特に強いこだわりがなければそれで良さそうです.