FVMでプロジェクトごとにSDKバージョンを切り替える(初心者向け解説)

当ページのリンクには広告が含まれています。

FVM(Flutter Version Management)では、1つのPCで複数バージョンのFlutterSDKを切り替えることができます。

Flutterは[flutter]フォルダに一つのバージョンがインストールされますが、FVMを使うと、もとのFlutterはそのまま保持しながら、最新バージョンでも古いバージョンでも自在に切り替えることができるようになります。

例えば、次のようなニーズがある場合はFVMが効果的です。

FVM(Flutter Version Management)で解決できるニーズ
  • 開発中のプロジェクトで、Flutterのバージョンを固定しておきたい。
  • 作成済みのプロジェクトで、Flutterをバージョンアップしても問題ないか確認したい。
  • 複数のFlutterプロジェクトを並行して開発するので、プロジェクトごとにFlutterのバージョンを切り替えたい。
  • 最新のFlutterを使ってみたい。
  • チーム開発する際に、メンバー間のFlutterバージョンを揃えたい。

FVMはかなり普及していて、もとのFlutterSDKを使わずにFVMだけでのバージョン管理も増えていますが、ここではまず基本的なFVMの導入法を解説します。

基本的な導入を理解した上で、自分なりの運用しやすい方法を見つけるのがいいのではないかと思います。

「Simple Flutter Version Management」のトップページ
FVMの開発理念を読むと「FVMのオススメ運用法」が見えてくる
動作確認バージョン
  • FVM : 3.2.1
  • macOS : Sonoma
  • Flutter : 3.27.1 -> FVMで3.29.0にする
  • Dart : 3.6.0 -> FVMで3.7.0にする
  • Homebrew 4.2.20
  • Android Studio : Koala 2024.1.1
目次

FVMのインストール

FVMのサイトでは、まず公式のFlutterをインストールしてからFVMを入れることを推奨しています。

私も、まずはFlutterSDKがグローバルにインストールされたマシンに、FVMをインストールしてバージョン切り替えするやり方がわかりやすいと思います。

なのでここからは、Flutter SDKがすでにインストールされている状態を前提に解説します。

FVMをインストールする方法は、次の2通り。

FVMをインストールする方法2つ
  • githubからダウンロード
  • ターミナルからコマンドを入力

どちらのインストールもやり方は簡単です。時間もかかりません。

コマンドラインを使った方法は他のFlutter解説サイトにたくさん出ていますが、Flutter初心者には、マウス操作でgithubからダウンロードする方がわかりやすいので、githubからダウンロードする方法から解説します。

FVMをgithubからダウンロード

STEP
githubからダウンロード
Linuxしか見えないときは「Show all」をクリックすると全OSが表示される
FVMの最新バージョンが公開されているgithubのサイト画面。linux、mac、windowsの3つのOSが公開されている。
2025.5.29現在の最新バージョンは、2024.8.26公開の[fvm 3.2.1]。

github

FVMのgithubから、対応するOSのFVMをダウンロードします。

私の場合は、M1 macなので[fvm-3.2.1-macos-arm64.tar.gz]。
intel macなら[x64]の方です。

STEP
FVMの解凍とフォルダ移動

ダウンロードされるのは圧縮ファイルなので、ダブルクリックで解凍します。

ダウンロードファイルを解凍して作成された「fvmフォルダ」
ダウンロードファイルを解凍すると「fvmフォルダ」が作成される

解凍されたfvmフォルダにはコマンドラインツールが入っているだけなので、10MBもありません。
ダウンロードも解凍も、あっという間に完了です。

この[fvmフォルダ]を、ユーザーフォルダの直下に移動します。

/Users/(ユーザー名)/fvm
解凍したfvmフォルダをFlutterSDKのフォルダと同一フォルダに移動したファインダーの画面
ユーザーフォルダの直下に[fvm]を移動

このfvmフォルダはどこに置いてもいいのだろうけど、ユーザーフォルダ直下にしておくと、後の管理がわかりやすいです。

その理由は…
今後FVMを使って複数バージョンのFlutterSDKがインストールされて行くわけですが、そのときFVMで管理されるFlutterバージョンは、ユーザーフォルダの直下に自動で作られるfvmフォルダに入っていきます。

なので、今インストールしたfvmコマンドツールのフォルダをユーザーフォルダ直下にしておくと、FVMは、このfvmフォルダひとつで管理できる、というわけです。

STEP
FVMのパスを通す

次は、ターミナルからいつでもfvmコマンドが使えるよう「パスを通す」作業です。

パスを通すには、所定のテキストファイルに、いま作られた[fvmフォルダ]の場所を書いておけばOK。

Finderで、ユーザーフォルダの直下にある[.zshrc]ファイル(または[.bash_profile])を開きます。

macOSのFinderのユーザーフォルダに[.zshrc]ファイルが表示されている画面。[.zshrc]ファイルは隠しファイルなので、ファイル名はグレーで表示されている。
パスを記述するファイルは「隠しファイル」なので、グレー表示

< パスを書くファイルの注意点 >

  1. 「.」で始まるファイルが一つもないとき

先頭が「.」で始まるファイルは隠しファイルなので、もし隠された状態なら、Finder上で「コマンド+shift+半角.(ピリオド)」を入力して隠しファイルを表示します。

  1. [.zshrc][.bash_profile]どっちに書いたらいいかわからないとき

macOSがCatalina以降の場合は[zsh]。
それより前のMojave以前なら[bash]です。


ターミナルを開くと、上部に「-zsh」か「-bash」のどちらかが書かれているはずです。

ですが…
おそらく、もうほとんどの開発環境はCatalina以降でしょうから、[bash]もほぼないんでしょうけど…

Flutterでは、Flutter 3.32の次の安定版リリースから、Mojave以前へのサポートが廃止されるということなので、今後のFlutterバージョンで作られたアプリは、Catalinaより前のMacでは実行できなくなります。

iOS/macOSの最小バージョン
Flutterは、次の安定版リリースでiOS 12およびmacOS 10.14(Mojave)へのサポートを廃止し、iOS 13およびmacOS 10.15(Catalina)を最低限の対応対象とします。これにより、今後のFlutterバージョンでビルドされたアプリは、iOS 12またはmacOS 10.14では実行できなくなります。

https://flutter.salon/what-is-new/flutter-3-32/#Android%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B7%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6@@

FlutterSDKがすでにインストールされているなら、[.zshrc]ファイルには次のような記述があるはずなので、これをコピーして使うと簡単です。

私の場合、developmentフォルダの下にflutterが入っています。

すでに書かれているFlutterSDKのパス(たぶん)

export PATH="$PATH:/Users/(ユーザー名)/development/flutter/bin"
Finderでfvmを表示している画面
FVMを入れたフォルダパスをFinder下部のパス表示で確認

[fvm]のパスは、Finder下部のパス表示で[fvm]を右クリックするとキャッシュにコピーできます。

Flutterのパスの行をコピーして、FVMのパスに書き換え

export PATH="$PATH:/Users/(ユーザー名)/fvm"

これで、保存して閉じます。

Finderのパス表示は、Finderのメニューバーから[表示]>[パスバーを表示]/[パスバーを非表示]で切り替えられます。

Finderのメニューバー[表示]にある項目を表示している画面。この中の[パスバーを表示]をクリックすると、Finder下部にパスが表示される
フォルダ名の入力ミスをしないためには、パスコピーするのがおすすめ

パスを通す作業は、ターミナルからコマンド入力して設定する方法もありますが、上記のように[.zshrc][.bash_profile]を開いて直接パスを入力しても、どちらの方法でもやっていることは同じです。

コマンド入力でやっていることも、[.zshrc]か[.bash_profile]かを確認して、ファイルを開いて、記入して、保存と適用して、最後に確認、ということをしているわけですから。

STEP
FVMが使えるかどうかの確認

以上でFVMが使えるはずなので、ターミナルを起動し[fvm]と入力・エンターして確認します。

fvm
ターミナルから[fvm]と入力して、FVMの使い方(usage)が表示されたターミナル画面。これが表示されればfvmのパスが正常に通っているので、fvmコマンドが使えるようになっていることが確認できる。
[fvm]と入力してFVMコマンドの一覧が表示されたら、パス記述も問題なし

[.zshrc][.bash_profile]に記述したパスは、ターミナルを起動したときに読み込まれます。

なので、もし[.zshrc][.bash_profile]の編集前からターミナルが立ち上がっていたら、ターミナルを一旦閉じて開き直して、再度[fvm]を実行します。

コマンドラインでインストール

ターミナルからコマンド入力でFVMをインストールする方法です。

STEP
Homebrewのインストール

コマンドラインを使う方法では、Homebrewが必要です。

Homebrewというのは、macOSやLinuxでソフトウェアのインストールやアンインストールをする際に使うツールです。

Homebrewがインストールされているかどうかは、ターミナルから[brew]と入力してみます。

インストールされていれば、Homebrewで使えるコマンド(usage)がずらっと表示されますが、インストールされていないなら[brew not found]などと出てくるので、下記公式サイトからインストールします。

Homebrewのインストールは、公式サイトに出ているコマンドを1行コピーして実行するだけで完了します。

STEP
FVMのインストール

次に、Homebrewを使ってFVMをインストールです。

ターミナルから、次のように入力してエンターします。

まず1つ目のコマンドbrewtapコマンドで、FVMのインストール準備をします。

brew tap leoafarias/fvm

次のコマンドで、実際にFVMのインストールです。

brew install fvm
STEP
パスを通す

コマンドラインでFVMをインストールした場合でも、パスを通す作業は必要です。

Homebrewでインストールしたら、パス通しもコマンドラインでやりたいかもしれないけど、ここでは割愛。ごめんなさい。

前の項のgithubからFVMをダウンロードのステップ0では、ターミナルを使わない方法を解説しています。

FVMのパスが通ったら、ターミナルでfvmのコマンドを入力して確認できたら、設定完了です。

FlutterプロジェクトでのFVM設定

ここからは、Android Studioでの各プロジェクトごとに必要な設定をしていきます。

プロジェクトで使うFlutterのバージョンを設定

Android Studioでプロジェクトを開いて、ターミナルでfvmコマンドを使います。

使えるバージョンを確認

まずは、いま使えるFlutterのバージョンを表示してみます。
現時点で使えるFlutterのバージョンが一覧表示されます。

fvm releases
ターミナルからfvm releasesを実行して表示された、Flutterのリリース済みの安定版バージョンの一覧
Flutter1.0.0から最新バージョンまでの一覧

FVMのFlutterバージョンを適用

私のプロジェクトは、いま3.27.1なので、まずはこれを3.29.0にしていきます。

ターミナルから、以下を実行します。

fvm use 3.29.0

Creating local mirror…
と表示されて、しばらく待つとCloneが作成された様子。

Android StudioのFlutterプロジェクトで、ターミナルからfvm use 3.29.0と入力した画面。
Cloneの作成はfvmの初回実行時のみ

次に表示されるFlutter3.29.0のインストールの確認メッセージを、yのままリターンします。
(やめるなら、nと入力してリターン)

Flutter SDK: SDK Version : 3.29.0 is not installed.
Would you like to install it now? ・ yes
Android StudioのFlutterプロジェクトで、ターミナルからfvm use 3.29.0と入力し、Flutter3.29.0がインストールされている画面
切り替え先のFlutterバージョンがなければ、インストールが始まる

3.29.0のインストールは、数秒で完了。

Flutter SDK: SDK Version : 3.29.0 installed! (3.7s)

次は.gitignoreについての確認です。

You should add the fvm version directory ".fvm/" to .gitignore.
 Would you like to do that now? ・ yes                                              
 Added .fvm/ to .gitignore

yesのままリターンすると、プロジェクト直下にある.gitignoreファイルに以下の行が追加されて、gitの管理対象からfvmが外れます。

Android StudioのFlutterプロジェクトで、ターミナルからfvmでFlutter3.29.0をインストールした後、.gitignoreの設定確認に[y]と回答して進んでいる画面
fvmの初回実行時は、プロジェクト内の[.gitignore]ファイルへの[.fvm/]追加確認がある
Android StudioのFlutterプロジェクトの「.gitignore」ファイルの末尾に、「.fvm/」が追加された画面
「.gitignore」ファイルはFlutterプロジェクトの直下にある

ここまでが終わると、ターミナルにProject now uses Flutter SDK : SDK Version : 3.29.0と表示されて、プロジェクトにFlutter 3.29.0が適用されたことがわかります。

Android Studioでの設定

FlutterSDKが3.29.0になったプロジェクトのフォルダを、Finderで開いてみます。

Flutterプロジェクト内に[.fvm]フォルダが作成されたファインダーの画面
プロジェクトに作成された[.fvm]フォルダに、使用するSDKのバージョンへのショートカットが作られる

プロジェクト直下に[.fvm]フォルダが作成され、その中に[flutter_sdk]と[versions]。
さらに[versions]の中の[3.29.0]のショートカットで、ユーザーフォルダ直下にインストールされた[fvm/versions/3.29.0]フォルダを参照しています。

ここでFlutterが実際にインストールされる場所は、管理ツールのある[fvm]フォルダです。

プロジェクトでは、ショートカットでこの[fvm]フォルダを参照していて、fvm useでバージョンを切り替えると、このフォルダ内のショートカットが、別バージョンへのショートカットへ入れ替わります。

さらに、[fvm_config.json]ファイルには、このプロジェクトに今適用されているFlutterSDKのバージョンが記載されるので、このファイルも修正されます。

これを踏まえて、Android StudioのFlutter SDKのパスを変更します。

Android Studioのメニューから[settings…]>[Languages & Frameworks]>[Flutter]のタブを開きます。

Flutterプロジェクトのメニューバーから[settings…]>[Languages & Frameworks]>[Flutter]を選択して設定項目が表示された画面
FlutterSDKのpathは、まだ変更されていない

画面上部の[Flutter SDK path:]を、いま確認したプロジェクト内の/(プロジェクトのpath)/.fvm/flutter_sdkに変更します。

すると即座に、入力欄の下の表示もfvmで適用したバージョンに変わります。

Flutterプロジェクトのメニューバーから[settings…]>[Languages & Frameworks]>[Flutter]を選択し、[Flutter SDK path]をFVMで指定したpathに変更した画面
FVMを使った場合、Flutter SDKはプロジェクト内を参照する

プロジェクトフォルダを指す絶対パスなので、プロジェクトを別フォルダに移動したり、フォルダ名を変えたら、ここも修正しないといけません。

flutter doctorしてみる

プロジェクトがFlutterSDK 3.29.0で問題がないかfvm flutter doctorで確認してみます。

先頭にfvmをつけてflutter doctorを実行。

fvm flutter doctor
fvm flutter doctorで、プロジェクトのエラーを確認したターミナル画面
Flutter 3.29.0 になったことでCocoaPodsでバージョンのエラーが出た

すると、「XcodeでCocoaPodsが古い」というチェックが入ってしまいました。

試しに、今まで通りのflutter doctorでは、エラーはありません。

fvmなしのflutter doctorで、Flutter3.27.1プロジェクトでのエラー確認したターミナル画面。古いSDKならエラーがないことがわかる。
Flutter3.27.1ならエラーなし

FVMのコマンド

以下は、FVMの基本的なコマンドです。
Flutter初心者が初めてFVMを使ってみるなら、このくらいを押さえておけばOKと思います。

各コマンドには、オプションも用意されています。

詳しくはこちら

releases:FVMのFlutterSDKのバージョン表示

fvm releases

use:プロジェクトで使うSDKバージョンの切り替え

fvm use (バージョン番号)

fvmフォルダに指定したバージョンがない場合は、インストールされた後でプロジェクトに適用される。

バージョンを切り替えると、Android Studioでindexingが動くので、実際に別バージョンが適用されるまで少し時間がかかる。

プロジェクトのSDKバージョンは、プロジェクト直下の[.fvm/fvm_config.json]ファイルに書き込まれので、ここで確認も可。

もし、うまく切り替わっていないようなら、fvm flutter doctorを実行。
それでもダメなら、Android Studioの再起動。

install:FVMのFlutterSDKインストール

fvm install (バージョン番号)

FVMが扱うFlutterSDKのインストール。
このinstallコマンドでは、もとのFlutter SDKのバージョンアップはされない。

インストールだけなので、プロジェクトへの適用もされない。

FVMでインストールするFlutter SDKは、だいたい1つのバージョンにつき1GBほど。

remove:FVMのSDKを削除

fvm remove(バージョン番号)

fvmフォルダから、指定したバージョンのSDKが削除される。

フォルダからマウスで直接削除しても、FVM上は問題ない。

list:FVMに入っているSDKのリスト表示

fvm list

自分のPCのfvmフォルダにインストールされているSDKの一覧を表示。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次