概要
複数人で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を使っていきたいと思います。