🦙

FVMでバージョン管理をしてみる

2025/02/17に公開

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を追加する必要があるということ。

プロジェクトごとに違うバージョンを使用するとき

  1. 対象のプロジェクトフォルダへ移動
cd ~/projects/projectA
  1. 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