null-safetyDartのベヌタテストの発衚。パッケヌゞを安党で安党な状態に移行するプロセスを開始したす





もちろん、null-safetyは蚀語開発の重芁なステップです。Dartチヌムは、null-safetyバヌゞョンのベヌタリリヌスを発衚したしたこのリリヌスに関するニュヌスをロシア語に翻蚳したした。このニュヌスでは、新しいバヌゞョンに移行する方法、埗られるメリット、そしお私たち党員にずっおのnull-safetyのメリットに぀いお孊びたす。



本日、DartずFlutterで信頌性の高いnull-safetyベヌタ版が利甚可胜になったこずを発衚したした。ヌルセヌフティは、怜出が困難なこずが倚いバグのクラスであるヌル参照バグを回避するための最新の䞻芁な進歩です。このビデオでは、私たちの喜びの理由を䞀般的に説明しおいたす。





null-safetyベヌタ版ぞの移行に䌎い、pub.devで利甚可胜な䜕千ものパッケヌゞを移行する時が来たした。Dartコアラむブラリ、Flutterフレヌムワヌク、および40を超えるDartおよびFlutterパッケヌゞを移怍したした。そうは蚀っおも、コミュニティがパッケヌゞを移行するこずでnull-safetyを受け入れるこずを願っおいたす。







ベヌタリリヌスでは、null-safety安定版リリヌスがリリヌスされる前にホヌムストレッチに入りたす。この機胜をご利甚いただき、改善しおUIメッセヌゞずドキュメントをより明確にするこずができるかどうかをお知らせください。皆様からのフィヌドバックをお埅ちしおおりたす。



null-safetyの遞択



null-safetyぞの移行に぀いお説明する前に、null-safetyガむドラむンに蚘茉されおいるように移行をい぀開始するかを正確に遞択できるこずを繰り返し述べおおきたす。アプリずパッケヌゞは、DartSDKの最小制限が少なくずもDart2.12のプレリリヌスバヌゞョンである堎合にのみ、null-safetyで機胜したす。



environment:
 sdk: ">=2.12.0-0 <3.0.0"


詊しおみるには、dart create以䞋に瀺すコヌドを含む小さなnull-safety helloアプリたずえば、を䜿甚を䜜成しおみおください。次に、SDK制限を倉曎する前埌にアプリケヌションを実行しお起動dart pub getし、プログラムの動䜜がどのように倉化するかを確認できたす。必ずdart --version2.12を正確に返送しおください。



bin/hello.dart:
...
void main() {
  var hello = 'Hello Dart developers';
  if (someCondition) {
	hello = null;
  }
  print(hello);
}
 
Before changing the SDK constraint:
$ dart run
 
null
 
After changing the SDK constraint (and running dart pub get):

$ dart run
 
bin/hello.dart:6:13: Error: Null can't be assigned to a variable of 
type 'String' because 'String' is not nullable.
 
	hello = null;
        	^


null-safetyぞの移行



パッケヌゞたたは単玔なアプリケヌションをnull-safetyモヌドに移行するには、dart.dev移行ガむドで詳しく説明されおいる次の5぀の手順に埓いたす。



ステップ1䟝存関係の準備ができおいるかどうかを確認する



䟝存関係グラフの「葉」から始めお、コヌドを順番に移動するこずを匷くお勧めしたす。たずえば、CがAに䟝存するBに䟝存しおいる堎合、最初にnull-safety Aに移行し、次にB、次にCに移行したす。この順序は、A、B、およびCがラむブラリ、パッケヌゞ、たたはアプリケヌションのいずれであるかに関係なく適甚されたす。







なぜ順序がそれほど重芁なのですか䟝存関係を移行する前にコヌドの移行をある皋床進めるこずはできたすが、移行䞭に䟝存関係によっおむンタヌフェむスが倉曎された堎合は、再実行しなければならないリスクがありたす。䞀郚の䟝存関係がnullセヌフでない堎合は、pub.devの各パッケヌゞにリストされおいる連絡先の詳现を䜿甚しおパッケヌゞ発行者に連絡するこずを怜蚎しおください。



䟝存関係の準備ができおいるかどうかの確認



アプリケヌションたたはパッケヌゞが移行を開始する準備ができおいるかどうかを確認するにdart pub outdatedは、null-safetyモヌドで実行できたす。アプリケヌションは、それがその䟝存関係を曎新した堎合に移行する準備ができおいるこずを瀺す以䞋の䟋path、processおよびpedanticに蚘茉されおいるプレリリヌス版に解決可胜コラム。







新しいマむナヌバヌゞョンでnull-safetyサポヌトが利甚できる堎合は、[アップグレヌド可胜]列に衚瀺されたす。ヌルセヌフティのサポヌトは、倚くの堎合、メゞャヌな新しいリリヌスで利甚可胜になりたす。この堎合、叀いナヌティリティの出力の「解決可胜」セクションにリストされおいるバヌゞョンが衚瀺されたす。それらに切り替えるには、ファむルpubspec.yamlを線集しおこれらのメゞャヌバヌゞョンを蚱可したす。たずえば、あなたが倉曎するこずができたす

process: ^3.0.13にprocess: ^4.0.0-nullsafety。



パッケヌゞペヌゞの 新しいNull安党タグコレクション1.15などず新しい高床なnull安党怜玢オプション を䜿甚しお、pub.devでnull安党をサポヌトするパッケヌゞを芋぀けるこずもできたす。







ステップ2移行ツヌルを䜿甚しお転送する



䟝存関係の準備ができたら、移行ツヌルを䜿甚しおアプリケヌションたたはパッケヌゞの移行を開始できたすdart migrate。



移行ツヌルはむンタラクティブであるため、このツヌルによっお掚枬されるnull-safetyプロパティを衚瀺できたす。ツヌルの結果に同意できない堎合は、nullヒントを远加しお倉曎できたす。いく぀かのヒントを远加するだけで、移行の品質に倧きな圱響を䞎える可胜性がありたす。







䜕人かのDartパッケヌゞ䜜成者は、初期のビルド前のnull-safetyビルドを䜿甚しお移行をテストしおおり、圌らのフィヌドバックは心匷いものです。移行ガむドには、移行ツヌルを䜿甚するための远加のヒントがありたす。



ステップ3移怍されたコヌドの静的分析



IDEたたはコマンドラむンでpubgetを䜿甚しおパッケヌゞを曎新したす。次に、IDEたたはコマンドラむンを䜿甚しお、Dartコヌドの静的分析を実行したす。



$ dart pub get
$ dart analyze




たたはフラッタヌコヌド



$ flutter pub get
$ flutter analyze


ステップ4テストに合栌するこずを確認したす



テストを実行し、安党に合栌するこずを確認したす。null倀を蚱可しないようにパッケヌゞコヌドを倉曎した堎合は、nullを予期するテストを曎新する必芁がある堎合がありたす。



ステップ5null-safetyパッケヌゞを公開する



移行を完了しおテストを実行した埌、パッケヌゞをプレリリヌスずしお公開できたす。ベストプラクティスの抂芁は次のずおりです。



  • 䟋えば、から次のメゞャヌバヌゞョンぞのバヌゞョンをアップグレヌド2.3.xしたす3.0.0。これにより、パッケヌゞのナヌザヌは、null-safetyを䜿甚する準備ができるたでパッケヌゞにアップグレヌドしたせん。これにより、APIをリファクタリングしお、null-safetyを最倧限に掻甚するこずができたす。
  • パッケヌゞを翻蚳しお、pub.devでプレビュヌずしお公開したす。たずえば、では3.0.0-nullsafety.0なくを䜿甚したす3.0.0。


移行ずバヌゞョン管理の詳现に぀いおは、移行ガむドを参照しおください。



保蚌されたヌルセヌフティの利点



DartずFlutter でのnull-safetyテクニカルプレビュヌに関する以前の投皿では、いく぀かの䟋を䜿甚しおこれらの倉曎の利点に぀いお説明したした。null-safetyが完成に近づいおいる今、この利点の実䟋がいく぀か芋られたす。



より安党なコヌド



最近、メむンのFlutterブランチにバグがあり、flutter特定のマシン構成でさたざたなツヌルコマンドがnullerrorでクラッシュするこずがわかりたしたThe method '>=' was called on null。䞻な問題は、Android Studio4.1怜出のサポヌトを远加するための最近のプルリク゚ストでした。このプルリク゚ストは、次のようなコヌドを远加したした。



final int major = version?.major;
final int minor = version?.minor;
if (globals.platform.isMacOS) {
  /// plugin path of Android Studio changed after version 4.1.
  if (major >= 4 && minor >= 1) {
    ...


バグを芋぀けるこずができたすかバヌゞョンはnullになる可胜性があるため、メゞャヌバヌゞョンずマむナヌバヌゞョンの䞡方もnullになる可胜性がありたす。このバグは、ここで単独で芋぀けるのは簡単に思えるかもしれたせんが、実際には、Flutterリポゞトリで䜿甚される厳密なコヌドレビュヌプロセスを䜿甚しおも、この皮のコヌドは垞にすり抜けたす。ヌル・安党で、静的解析は、この問題をキャッチし、すぐに







それはかなり単玔な誀りでした。 Googleの内郚コヌドでnull-safetyを䜿甚しおいた初期の頃、より耇雑なバグが怜出され、null-safetyを䜿甚しお解決されたこずがわかりたした。ここではいく぀かの䟋を瀺したす。



  • , null , null-safety null. , protobuf, , , null. , , - null .
  • Google Pay Flutter, - Flutter State Widget. null-safety null ; null-safety , null, .
  • Flutter , - Flutter , null scene Window.render(). null-safety , Scene , , null.


null-safety



Dartのnull-safetyの信頌性も重芁です。Dartコンパむラはnull-safety情報を利甚できたす。それはあなたのプログラムをより小さくそしおより速くするこずができたす。これたでのずころ、null-safetyに完党に倉換された実際のアプリケヌションは倚くありたせん結局のずころ、これらのアプリケヌションが信頌性を䟝存するパッケヌゞの゚コシステムを移行し始めたばかりですが、メむンフレヌムワヌクから非垞に有望な結果が埗られおいたす。



最近、hello_worldサンプルのテスト再コンパむルを実行しお、アプリケヌションサむズに察するnull-safetyの圱響を枬定したした。これは、「helloworld」を衚瀺するだけの最小限の䟋です。比范するずきコンパむルされたコヌドの合蚈サむズのうち、圧瞮されおいないデバむスにむンストヌルされたコヌドのサむズは、信頌できるnull-safetyを䜿甚した再コンパむル以倖のアクションなしで、3.5削枛されたした。これは、含たれおいるすべおのラむブラリのコヌドサむズが削枛されたため、アプリケヌション党䜓が10行のコヌドで構成されおいたにもかかわらず可胜でした。たずえば、Flutterpackage:flutterフレヌムワヌク自䜓は3.9瞮小しおいたす。



コヌド速床の芳点から、信頌できるデヌタタむプのシステムを適甚する必芁があるず、オヌバヌヘッドが増加する可胜性がありたす。ただし、nullチェックが少ないず、コヌドが高速化される可胜性もありたす。ベンチマヌクの初期分析では、パフォヌマンスが以前のリリヌスず同等であるこずが瀺され、新しい远加のタむプ情報により、将来的にパフォヌマンスを向䞊させる新しい方法の可胜性が埗られたす。これに぀いおは、今埌の出版物で詳しく説明する予定です。



堎合によっおは、移行によっおコヌドのロゞックに欠陥が芋぀かったずきに、nullの安党性がパフォヌマンスの向䞊にどのように぀ながるかをすでに芋おきたした。たずえば、FlutterWebのテキスト配眮キャッシュに問題が芋぀かりたした。このキャッシュはnull可胜なキヌを䜿甚し、次に、指定されたロゞックに埓っお、䜿甚されたしたTextAlign.startnullの堎合。このロゞックにより、アむテムがただデフォルト倀であるにもかかわらず、アむテムが倉曎されたように芋えるキャッシュ゚ラヌが発生しおいたした。その結果、キャッシュぞの非生産的な呌び出しが頻繁に発生したした。textAlignnullを蚱可しないgetterを远加するず、゚ラヌキャッシュを修正するのに圹立ち、キャッシュされたテキストの堎合にテキストのレンダリングパフォヌマンスが14倍向䞊したす。



今日から始めたしょう



null-safetyを含むDartずFlutterのベヌタ版の準備が敎いたした。あなたがフラッタヌに蚘述しおいる堎合、あなたがベヌタ版に切り替えるこずができflutter channel beta、その埌flutter upgrade。たた、Flutterを䜿甚しおいない堎合は、DartSDKアヌカむブからスタンドアロンのDartSDKを入手できたす。



パッケヌゞを開発しおいる堎合は、移行ガむドを読んで移行を蚈画するこずをお勧めしたす。問題や提案があればお知らせください。



アプリ開発者の堎合は、機胜が安定版リリヌスに到着するたで移怍を延期できたす。ベヌタ版のフィヌドバックに迅速に察応し、残りの問題を修正する予定です。null-safetyが安定リリヌスでリリヌスされる具䜓的なタむムラむンを指定するのは難しいですが、来幎の初めを考えおいたす。



あなたのサポヌトずフィヌドバックをありがずうDartをより堅牢な蚀語にし、Flutterをより匷力なフレヌムワヌクにするために取り組んでいたす。



Dart andFlutterの補品マネヌゞャヌであるMichaelThomsenが、この蚘事をDartlangの公匏ブログに投皿したした。Michaelの話を聞いお、圌ず盎接察話したい堎合は、12月4日ず5日にDartUP 2020 Onlineにアクセスしお、Dartチヌムずコミュニティず最新の蚀語アップデヌトに぀いお話し合っおください。



All Articles