Contents
Migrating to null safety
このページでは、コードをnullセーフティに移行する方法とタイミングについて説明します。
所有している各パッケージを移行するための基本的な手順は次のとおりです。
migrate:移住する、移行する、移動する
ここではnull-safetyバージョンに移行する、null-safetyに対応する、という意味。
- あなたのパッケージ内で使用しているパッケージがマイグレートされるのを持ちます。
- あなたのパッケージのコードをマイグレートします。できれば、インタラクティブ移行ツールを使用しましょう。
- あなたのパッケージのコードを静的に分析します。
- 変更(マイグレート)が機能するかテストします。
- もしパッケージがすでにpub.devに公開されている場合は、prereleaseバージョンとしてnull-safeバージョンを公開ましす。
アプリの移行は、技術的にはパッケージの移行と同じです。 アプリを移行する前に、nullの安全性が安定したリリースになり、すべての依存関係の準備が整うまで待つことを検討してください。
マイグレーションツールの使用体験に関する非公式の動画を以下に示します。
1. Wait to migrate
依存関係のグラフの葉を最初にマイグレートして、順番にマイグレートを進めていくことを強くお勧めします。
例えば、
パッケージCの中でパッケージBを使用している(パッケージBに依存している)。
パッケージBの中でパッケージAを使用している(パッケージAに依存している)。
という状況では、まず最初にパッケージAをマイグレートし、次にパッケージBを、その次にパッケージCをマイグレートすべきです。
自分のパッケージが依存しているパッケージがnull-safetyをサポートする前に、自分のパッケージをマイグレートすることも可能です。
しかし、自分のパッケージのマイグレート後に、「依存しているパッケージ」がマイグレートされると、また自分のパッケージのコードを変更しないといけなくなる可能性があります。
自分のパッケージ内の、ある関数の引数をnullable型と予想として実装したあとで、依存しているパッケージが、対応する変数の型をnon-nullable型で実装(マイグレート)していた場合、nullable型の値を渡そうとするとコンパイルエラーになります。
あなたのパッケージに依存しているパッケージ(あなたのパッケージを利用しているパッケージ)をマイグレートする前に、あなたのパッケージをマイグレートするべきです。nullセーフパッケージは、Dart 2.12ベータ以降を使用している限り、まだnullセーフティを使用していないパッケージやアプリで使用できます。 たとえば、DartおよびFlutterコアライブラリはnullセーフであり、nullセーフティに移行していないアプリでも引き続き使用できます。
このセクションでは、null-safetyモードのdart pub outdatedコマンドを使用して、パッケージの依存関係を確認および更新する方法について説明します。 この手順では、変更を簡単に元に戻すことができるように、コードがソースコントロール下にあることを前提としています。
Switch to a 2.12 beta release
DartSDKまたはFlutterSDKの最新のベータリリースに切り替えます。 最新のベータリリースを入手する方法は、FlutterSDKを使用するかどうかによって異なります。
- Flutter SDKを使用している場合、ベータチャンネルに切り替えてください。
$ flutter channel beta
$ flutter upgrade
そうでない場合、Dart SDK archiveからベータリリースをダウンロードしてください。
プロダクションコードの作業に戻る場合は、stable release(安定したリリース)に戻すことを忘れないでください
(たとえば、flutter channel stable実行することによって)。
Check dependency status
自分のパッケージの依存パッケージのマイグレーション状態を確認するためには、次のコマンドを使ってください。
dart pub outdated --mode=null-safety
すべてのパッケージがnullの安全性をサポートしていることが出力に示されている場合は、移行を開始できます。 それ以外の場合は、Resolvable columnを使用して、nullセーフリリースが存在する場合はそれを見つけます。
すべての依存関係がnullの安全性をサポートする必要があるのはなぜですか?
アプリの直接のdependenciesがすべてnullの安全性をサポートしている場合は、健全なnullの安全性でアプリを実行できます。 すべてのdev dependenciesがnullの安全性をサポートしている場合、健全なnullの安全性でテストを実行できます。 コード生成などの他の理由で、nullセーフなdev dependenciesが必要になる場合もあります。
参考