超初心者でもできる! Flutter2にアップグレードする方法

FlutterをFlutter2にアップグレードする方法 Flutter

遅ればせながら、私のマシンもFlutter2にアップグレードしてみました。

そのアップデート手順をまとめておこうと思います。

アップグレードの実行は、OSのターミナルからでも、Android StudioのTerminalからでも実行することができます。

Android StudioのTerminalから実行するときは、何かプロジェクトを開いて(あるいは新規プロジェクトを作成して)、Terminal画面から実行します。

Flutterのchannelを確認

Flutterの安定性を表すビルドには4つの種類があります。
その4種類を簡単に説明すると、以下のような感じ。

  • master最新。機能するはずだけど、もしかしたらバグがあるかもしれない。
  • devテストされている最新のビルド。
  • beta毎月第一月曜日にマスターから切り離されてリリースされる、安定版の一歩手前。
  • stable四半期に一回リリースされる安定版。

masterからstaleに行くにつれ、安定性が高くなっているということになります。

今回Flutter2へのアップグレードは、どのchannelでも実行することができます。

まずはアップグレードの前に、今のFlutterがどのchannelになっているのかを確認しておきます。

$ flutter channel
Flutter channels:
  master
  dev
  beta
* stable

stableの先頭に*マークがついているので、今のFlutterはstableであることが確認できます。

下記のように、バージョン番号の確認コマンドでもビルド情報を見ることができます。

$ flutter --version

安定版のstableを使うのが一般的なので、もしchannelがstableでない場合は、下記のコマンドでstableにしておくのがいいかなと思います。

$ flutter channel stable

channelって何?:詳しくはこちら↓ 
https://github.com/flutter/flutter/wiki/flutter-build-release-channels

アップグレードの実行

channelを確認したら、Flutterをアップグレードします。

$ flutter upgrade

この1行で、SDKがダウンロードされアップグレードが実行されます。
数分から、回線状況によってはそれ以上時間がかかります。

アップグレードが終わったところで次のように表示され、Flutterが2.0.6、Dartが2.12.3になったことがわかります。

Flutter 2.0.6 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 1d9032c7e1 (6 days ago) • 2021-04-29 17:37:58 -0700
Engine • revision 05e680e202
Tools • Dart 2.12.3

アップグレード後、自動的にflutter doctorも実行されるのでしばし待ちます。

最後に 「No issues found!」と表示され、「Welcome to Flutter!」の囲み表示が出たら無事成功です。

ダウングレードしたいとき

アップグレードしたけど、やっぱりダウングレードしたい! というときはdowngradeコマンドを使うと、バージョンを戻すことができます。

$ flutter downgrade
Downgrade flutter to version 1.22.6
? [y|n]: y

Success

実行すると、戻すバージョンを聞かれるので[y]で実行します。
Successと出たらダウングレード完了です。

Flutterのアップグレード後にやること

Flutterのシステム自体のアップグレードは、flutter upgradeコマンドの実行で完了です。

でもFlutter2へのアップグレード方法の記事をググると、既存プロジェクトのFlutter2へのnull-safety対応の作業コマンドも続けて実行していたりして、初心者はちょっと混乱してしまいます。

そこで、Flutterのアップグレードって色々やることあるの? というモヤモヤした疑問を解決したいと思います。

ここでは実際に細かな作業はしていませんし、解説も途中までですが、「Flutter2に対応させる、ってそういうことなのね」ってことが理解できるかなと思います。

既存プロジェクトのFlutter2 null-safety対応の手順概略

flutter upgradeコマンドでFlutter2にアップグレードしたら、その後にやることが色々あるのかといえば、実は必ずしもそういうことではありません。

これから新規プロジェクトを作るときは、Flutter2の環境で作って行くわけですから、Flutter2の仕様に則って作成すれば良いだけです。

ちまたで「Flutter2対応の作業がスッゲー大変」と言うコトバが聞かれるのは、「既存のプロジェクトをFlutter2(のnull-safetyなど)に対応させる作業が大変だ」ということです。

具体的な作業は、
1. 使っているパッケージが、Flutterのどのバージョンに対応しているのかを調べて、
2. pubspec.yamlに書いてあるパッケージのバージョンを、null-safetyに対応しているバージョン番号に書き換えて、
3. Dartコードをnull-safetyの強制適用に対応するよう修正する。
というような流れです。

null-safetyについては、こちらでちょっと解説しています。

このFlutter2対応作業の中で一番大変なのは、上記手順の3番「Dartコードの修正」です。

具体的には、エディタを開いて、エラーを示す赤いニョロニョロ下線のコードを修正して行くわけです。

でも、その作業を全て手作業でやるんかい!? と言ったら、そういうことではありません。(もちろん手作業もいっぱいあるけど…)

1番の「パッケージの対応バージョンを調べる」と、2番の「パッケージで使っているバージョン番号を書き換える」という作業は、実行コマンドが用意されているし、Dartのコード修正もこのコマンドの実行でちょっとやってくれます。

使うコマンドは、Android Studioでpubspec.yamlファイルを開いたときに、画面の上部にも表示されている「Pub outdated」と「Pub upgrade」です。

じゃ具体的に「Pub outdated」と「Pub upgrade」コマンドは、どんな風に動くのか、やってみます。

まずpub outdatedで、使っているパッケージのバージョン番号を調べます。

pubspec.yamlファイルの右上の青文字「Pub outdated」をポチるか、またはターミナルで実行するなら、次のコマンドです。

$ dart pub outdated

もしくは、これ↓

$ flutter pub outdated

でも、上のpub outdatedコマンドだけでは、パッケージのnull-safety対応状況がわからないので、下のようなオプションをつけてターミナルから実行してみます。

$ dart pub outdated --mode=null-safety

もしくは、これ↓

$ flutter pub outdated --mode=null-safety

このオプションは、パッケージ単体での対応状況でなはくて、パッケージ間の依存関係も含めたnull-safety対応状況を調べられる、という優れものです。

このコマンドでは対応状況を調べるだけなので、pubspec.yamlもDartファイルも書き変わることはありません。

実行結果には、下のような一覧が表示されます。

実際にはこの他にも、システムからのメッセージが何行か表示されます。

Flutter2へのアップグレードでnull-safety対応を調べた結果画面

画面左の「Package Name」の列の右に、「Current」「Upgradable」「Resolvable」「Latest」と並んでいます。

ここで大切なのは、右から2番目の「Resolvable」の列です。
ここに「」がついているバージョンなら、null-safetyの対応OK。

「✗」なら未対応なので、そのパッケージが対応してくれるまで待つ他はありません。

このコマンドで、そのプロジェクトのパッケージがnull-safety対応できるバージョンの準備ができていることがわかったら、次のコマンドで実際にパッケージのアップグレード作業に入っていきます。

次のコマンドを実行すると、pubspec.yamlに書いてあるパッケージのバージョン番号などが自動で書き換わります。

ただこのコマンドでは、ある特定のパッケージのみをアップグレードするというこができません。
使っているパッケージ全てがアップグレードされるので注意が必要です。

$ dart pub upgrade --null-safety

もしくは、これ↓

$ flutter pub upgrade --null-safety

pub upgradeコマンドは、pubspec.yamlファイルの右肩の青文字「Pub upgrade」から実行するのと、ターミナルから実行するのとでは、動きが違うようです。

pubspec.yaml右肩の「Pub upgrade」から実行するのは、バグがあるという噂も聞いたので、ターミナルから実行する方が安全のようです。

このあとも、null-safety対応の作業はまだ続きますが、とりあえずこんな感じで作業が進みます。

アップグレードの実行前には、バックアップを取っておくことを強くお勧めします。
いまさら、ワタシなんかが、ここでいうことじゃありませんが…。念のため。

詳しくは、Dart公式サイトの解説を見てみてください。

Flutter2のnull-safetyへの移行作業:
https://dart.dev/null-safety/migration-guide

コメント

  1. flutter見習い より:

    この手順通りにやってもエラーが出て実行できず、再現性がありません。

    ただ、以下のdartをflutterに変更すると目的を達成できたようです。
    $ dart pub upgrade –null-safety

    • リプちん リプちん より:

      再度、自分のマシンで実行してみましたら、私の環境では動いてしまうようです。
      どうやら、
      環境によって動作が異なることの検証ができていない記事内容になってしまっていたようで、お手数をおかけしてしまいごめんなさい(>人<;)
      記事は一部修正しました。ありがとうございました。

タイトルとURLをコピーしました