2021/2/14 Migrating to null safetyの訳

Migrating to null safety

このページでは、コードをnullセーフティに移行する方法とタイミングについて説明します。

所有している各パッケージを移行するための基本的な手順は次のとおりです。

migrate:移住する、移行する、移動する

ここではnull-safetyバージョンに移行する、null-safetyに対応する、という意味。

  1. あなたのパッケージ内で使用しているパッケージがマイグレートされるのを持ちます。
  2. あなたのパッケージのコードをマイグレートします。できれば、インタラクティブ移行ツールを使用しましょう。
  3. あなたのパッケージのコードを静的に分析します。
  4. 変更(マイグレート)が機能するかテストします。
  5. もしパッケージがすでにpub.devに公開されている場合は、prereleaseバージョンとしてnull-safeバージョンを公開ましす。

アプリの移行は、技術的にはパッケージの移行と同じです。 アプリを移行する前に、nullの安全性が安定したリリースになり、すべての依存関係の準備が整うまで待つことを検討してください。

マイグレーションツールの使用体験に関する非公式の動画を以下に示します。


1. Wait to migrate

依存関係のグラフの葉を最初にマイグレートして、順番にマイグレートを進めていくことを強くお勧めします。

例えば、

パッケージCの中でパッケージBを使用している(パッケージBに依存している)。

パッケージBの中でパッケージAを使用している(パッケージAに依存している)。

という状況では、まず最初にパッケージAをマイグレートし、次にパッケージBを、その次にパッケージCをマイグレートすべきです。

Illustration of C/B/A sentence

自分のパッケージが依存しているパッケージが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が必要になる場合もあります。

 

 

 

参考

https://dart.dev/null-safety/migration-guide

コメントを残す

メールアドレスが公開されることはありません。