概要
複数人でFlutterのプロジェクトの開発を行う場合、rbenvやnodenvの様に
誰でも同じバージョン(同じ環境)で開発できるようにしたいと思い、
Flutter sdkのバージョン管理ができそうなツールは無いか調べて見ました。
Flutter sdkのversion管理ができそうなツール調査
ざっと調べた所以下の2つを発見 ![]()


どちらも同じ fvm という名前みたいです。
今回は pub で公開されている leoafarias/fvm を使ってみたいと思います。
できる機能としては以下になります。
- プロジェクトごとに Flutter SDK のバージョンを設定して使用する
- 複数の Flutter SDK バージョンのインストールとキャッシュ機能
- Flutter channels & versionsの高速切り替え
- IDEデバッグをサポートするためのダイナミックSDKパス
- チームとCI環境全体で一貫性を保つために、プロジェクトでFVM構成をバージョン管理
- プロジェクト間でのグローバルな Flutter バージョンの設定
環境構築
早速pubを使って fvm をインストールします。
$ pub global activate fvm
# 又は
$ flutter pub global activate fvm
次にパスを通します。
※dartのパスも必要で flutter-sdkのみインストールしている場合は、別途dartをインストールするか、flutter-sdk内にあるdartのパスを設定します。
(個人的に複数のdart環境をインストールしたくないので、今回はflutter-sdk内にあるdartを再利用しています)
# fvmのパス
$ export PATH="$PATH":"$HOME/$FLUTTER_SDK_PATH/.pub-cache/bin"
# dartのパス
$ export PATH="$PATH":"$HOME/$FLUTTER_SDK_PATH/cache/dart-sdk/bin"
fvm help でヘルプが表示されればOKです。
2021/08/11追記
こちらに Homebrew や Chocolatery でもインストールできるようになったと記述されているので
そちらを使った方が良いかもしれません。
使い方
-
インストール可能なリリース済みのバージョン一覧を確認する場合
$ fvm releases # stable / dev / beta それぞれが一覧表示される -
現在インストールされているバージョンの一覧を表示
$ fvm list -
特定のSDKバージョンをインストールする
$ fvm install <version> -
プロジェクト内でのSDKバージョンを固定する
$ fvm use <version>プロジェクト内に
./fvmが作成されます。
.fvm内は.fvm/fvm_config.jsonと、.fvm/flutter_sdkが作成され、
.fvm/flutter_sdkの方は/Users/xxxx/fvm/versions/<version>のシンボリックリンクとなっています。 -
プロジェクト内で固定されたSDKバージョンを使用する
プロジェクト内に.fvm/fvm_config.jsonがある状態で以下を実施$ fvm install -
VSCodeで使う場合
{ "dart.flutterSdkPath": ".fvm/flutter_sdk" }↑をプロジェクト直下の
.vscode/settings.jsonに追加し、再起動します。
【追記】
settings.jsonには dart.flutterSdkPathとdart.flutterSdkPathsが設定でき、
前者は1つのSDKのみ指定でき、後者は複数SDKを指定でき、VSCode上で切替可能です。gitignore には
.fvm/flutter_sdk .vscode/settings.jsonを追加しました。
-
AndroidStudioで使う場合
VSCodeでしか試してないのですが、こちらにセットアップ方法が載っていました
新規プロジェクトをfvm使用して特定のバージョンで作成する
通常は既存のflutter projectでしか use コマンドは使用できないが、
--force フラグを使用することでflutter project以外のディレクトリでも使用可能になります。
新規のプロジェクトをfvmを使用して作成する場合、一旦ディレクトリを先に作成して --force フラグ付きでバージョンを固定し、プロジェクトを作成します。
$ mkdir sample_project
$ cd sample_project
$ fvm use <version> --force
$ fvm flutter create .
感想
クロスプラットフォームでの開発の場合、バージョン更新したらエラーの嵐で大変だった。。という経験があったので
プロジェクト内でバージョン固定できてメンバー間に共有できる所はとてもありがたいなと思いました。
もしかしたら他に良いツールや方法等があるかもしれないですが、現時点ではfvmを使っていきたいと思います。