Migrating to null safety on Dart
いよいよ Dart の null safety が stable となりました. これまで何回か紹介しているライブラリ ipaddr を null safety にしていく過程をメモしておきます. 参考までに pullrq は下記です.
ドキュメントどおりに進めていきます.
Check dependency status
Section titled “Check dependency status”まずは使用しているライブラリで null safety に対応してないものがないかを確認します. ここでつまずくと何もできないです. ipaddr ではライブラリをほぼ使っていないので下記の通りでした.
$ dart pub outdated --mode=null-safetyShowing 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.0test ✗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
Section titled “Update dependencies”依存関係に問題が無かったので pub upgrade します. null-safety オプションを付けて実行すると pubspec.yaml をいい感じに書き換えてくれます.
$ dart pub upgrade --null-safety$ git diff -U0diff --git a/pubspec.yaml b/pubspec.yamlindex 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 getMigrate
Section titled “Migrate”いよいよ migrating です. サポートツールがあるので下記の通り実行します. Web GUI を見ろと言われるので見ます.
$ dart migrateあとは ! maker を付けて non-nullable であることを指定するなどを行っていきます. 終わったら APPLY MIGRATION ボタンクリックで適応されます. めっちゃ楽ですね.
IPv4Address コンストラクタでは null を許容しないようになるので null チェックが常に false になるなども表示されます. ignore: unnecessary_null_comparison を指定することで引き続き null check を記載することも可能です.
Analyze & Test
Section titled “Analyze & Test”migrating が終わったらコード解析とテストも忘れずにやっておきます.
$ dart analyze$ dart testFinish
Section titled “Finish”はい,これで終了です. サポートツールが便利なのであっけなく終わりました. package version はメジャーバージョンをあげることを推奨されているので,特に強いこだわりがなければそれで良さそうです.