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
2. .zshrc を編集
.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 --setup
--setupをつけるとFlutter SDKビルドも行ってくれるそうです。
Discussion