FVMでバージョン管理をしてみる
FVMをあまり理解していなかったせいで、FVMが管理しているFlutterバージョンではなく、システムのFlutterを優先して開発していたので、FVMでのバージョン管理方法を再度復習しました。アウトプットもかねて書いていきます。
まず、fvm flutter doctorをしたら以下のエラーがでました。
原因は、FVMで管理されているFlutterのパスと、システムのデフォルトFlutterのパスが異なっているためでした。
[!] Flutter (Channel stable, 3.27.3, on macOS 15.1.1 24B91 darwin-arm64 (Rosetta), locale ja-JP)
! Warning: flutter on your path resolves to /Users/mac/Developer/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/mac/fvm/versions/3.27.3. Consider adding /Users/mac/fvm/versions/3.27.3/bin to the front of your path.
! Warning: dart on your path resolves to /Users/mac/Developer/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/mac/fvm/versions/3.27.3. Consider adding /Users/mac/fvm/versions/3.27.3/bin to the front of your path.
1. $PATH を確認する
まずwhich flutterでPATHを確認すると、システムのflutterが優先されており、fvmのflutterが優先されていないことがわかりました。
/Users/mac/Developer/flutter/bin/flutter
.zshrc
を編集
2. .zshrcファイルを開きます。
vim ~/.zshrc
そしてこの行を削除します。
export PATH="/Users/mac/Developer/flutter/bin:$PATH"
FVMのFlutterを優先するために以下を追加します。
export PATH="$HOME/fvm/default/bin:$PATH"
変更を反映させます。
source ~/.zshrc
export PATH="何かのパス:$PATH"
は 「そのパスを優先的に探す」ための設定なので、システムのPATHを削除したことは、Flutterのファイルやフォルダ自体を削除するわけではなく、ターミナルがそのFlutterを見つける順番を変えただけです。
補足でPATHとは、ターミナルがコマンドを探すためのリストです。
例えば、which flutter を実行すると、ターミナルは PATH に登録されているフォルダを上から順番に探して flutter という実行ファイルを見つけます。
3. 再度PATHを確認
/Users/mac/fvm/default/bin/flutter
が出力されたので、fvmが優先されflutter doctor
と入力すると、内部的にはfvm flutter doctor
と同じ動作になりました。
which flutter
これでflutter doctorしてもエラーがなくなりました。
補足
「Homebrewのfvm」と「fvmのFlutter」パスは別物です。
/opt/homebrew/bin/fvm
はHomebrewでインストールされたFVMの実行ファイルのパス。$HOME/fvm/default/bin
はFVMが管理するFlutterのパス。
つまり、FVM (fvm コマンド) 自体はHomebrewにあるけど、そのFVMで管理するFlutterを使うには$HOME/fvm/default/bin
を追加する必要があるということ。
プロジェクトごとに違うバージョンを使用するとき
- 対象のプロジェクトフォルダへ移動
cd ~/projects/projectA
- FVM を使ってバージョンを指定
fvm use 3.27.3
fvm use <version> を実行すると、プロジェクト内に .fvm/fvm_config.json という設定ファイルが作成され、指定したバージョンが保存されます。
FVM の Flutter バージョンを更新する方法
Flutter の新しいバージョンがリリースされた場合、FVM でそのバージョンをインストールできます。
fvm install 3.28.0
もし システム全体でデフォルトの Flutter を新しいバージョンにしたい場合はglobalを使用します。
fvm global 3.28.0
globalのバージョンを確認したい場合はlistで確認します。
fvm list
以下のように(global)となっているバージョンがシステム全体で使用しているバージョンです。
3.27.3 (active) (global)
3.10.2
3.7.12
途中から FVM を使ってバージョン管理されているプロジェクトに参加する場合の手順
githubなどからcloneしたあと、fvm install
を実行すると、プロジェクトの .fvm/fvm_config.json
に記載されているバージョンが自動でインストールされます。
fvm install
Discussion