Flutterのアップデート、まだまだ激しいですよね。
以前チーム開発していた時も、
- 他の開発者とのFlutterのバージョン違いによりAPI定義が異なりエラーの嵐→無駄なコミュニケーションの発生
- 自分のPCのFlutterのバージョンを上げてしまったところ、ビルドできなくなったといった報告の対応
など、プロジェクトごとでなく開発者ごとにFlutterのバージョンを管理しているために起きてしまう問題がいくつかありました。また、OSSや個人開発などでも使用するFlutter SDKのバージョンを固定したいこともあるかと思われます。
本記事では、開発者ごとでなく、プロジェクトごとにFlutterのバージョンを管理する方法を紹介します。
FVMを用いる場合
FVMはFlutter SDKバージョン管理ツールです。
導入についてはこちらの記事が日本語で分かりやすいので、説明は割愛します。
バージョンをプロジェクトごとに固定する方法
ターミナルを開いてプロジェクトのルートに移動しておいてください。
インストール可能なリリース済みのバージョン一覧を確認しましょう。
$ fvm releases
次に現在インストールされているバージョンの一覧を確認してみましょう。
$ fvm list
お目当てのバージョンがなければ、以下のコマンドでバージョン名またはチャンネル名からFlutter SDKが手に入ります。
$ fvm install <バージョン名またはチャンネル名>
例えばstableを使いたい人は以下のコマンドです。
$ fvm install stable
最後に、以下のコマンドで、プロジェクトのFlutter SDKのバージョンを固定することができます。
$ fvm use <バージョン名またはチャンネル名>
そうすると、プロジェクト内に.fvm
が作成されます。.fvm
内には以下が入っています。
- プロジェクトで固定されるFlutter SDKバージョン情報が記載された
.fvm/fvm_config.json
-
~/fvm/versions/<バージョン名>
のシンボリックリンクとなっている.fvm/flutter_sdk
すでにFVMによりバージョン固定されているプロジェクトで開発する時
バージョンを指定せず以下のコマンドを実行すると、.fvm/fvm_config.json
のバージョンをインストールできます。
$ fvm install
固定されたバージョンのFlutter SDKを使用する
flutter
コマンドの前にfvm
をつけるだけです。例としてflutter run
したい場合は以下のようになります。
$ fvm flutter run
IDEの設定
IDEの操作でも固定したFlutter SDK下で実行できるようにします。デバッガーなどIDEの機能を使いたい時のために必要です。
Android Studioの場合
Preferences > Languages & Frameworks > Flutter
のFlutter SDK pathを{対象プロジェクトのルート}/.fvm/flutter_sdk
に変更してください。
VSCodeの場合
{対象プロジェクトのルート}/.vscode/settings.json
に以下を追加してください。
{
"dart.flutterSdkPath": [".fvm/flutter_sdk"],
}
VSCodeを再起動し、コマンドパレットでFlutter: Change SDK
と入力してバージョンを選んでください。
Flutter Wrapperを用いる場合
更新が一年以上止まっているのですが、特定のバージョンのFlutter SDKをダウンロード&実行するシェルスクリプトによってFlutterのバージョンをプロジェクトで固定できるFlutter Wrapperを用いる方法もあります。
導入
ターミナルでバージョンを固定したいプロジェクトのルートに移動した後、以下を実行するだけです。
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/passsy/flutter_wrapper/master/install.sh)"
以降はflutter
の代わりに./flutterw
のコマンドを用いることで、固定されたFlutter SDK下でコマンドを実行することができます。
アップグレード
特に新しいコマンドを覚える必要はありません。これもflutter
の代わりに./flutterw
になるだけで、いつものFlutterのアップグレードと同じです。
IDEの設定
各IDEで設定されているFlutter SDKのパスを変更しておくことで、FVMの時と同様、IDEの操作でも固定したFlutter SDK下で実行できるようにします。
Android Studioの場合
Preferences > Languages & Frameworks > Flutter
のFlutter SDK pathを{対象プロジェクトのルート}/.flutter
に変更してください。
VSCodeの場合
{対象プロジェクトのルート}/.vscode/settings.json
に以下を追加してください。
{
"dart.flutterSdkPath": ".flutter",
}
まとめ
Flutter Wrapperは更新があまりされていないので、**現在のところFVMがスタンダードなのかなという感じです。**FVMの方がバージョン切り替えもスムーズかと思います。強いて言うなら、Flutter WrapperはFVMのインストールを必要としないので、コマンド一発で使えるというところがメリットでしょうか。
参考
https://qiita.com/tetsufe/items/8ffa296c22a2dc8b9b51
https://qiita.com/Slowhand0309/items/0767abee120fcb3ba0b4