📖

Flutter のバージョン管理ツール「FVM」を試してみる

2024/03/25に公開

最近 Flutter を書き始めたのですが、新しい言語やツールを始めたときに気になるのが「バージョン管理」ですよね。調べてみると、Flutter のバージョン管理は「FVM」というツールがおすすめされていたので試してみます。

https://fvm.app

はじめに

今回の FVM 導入を進めていくにあたっての前提条件はこちら。

  • IDE は「VSCode」を利用
  • Xcode や Android Studio などの設定は済ませている

インストールと使い方

インストール方法は複数あるのですが、今回は Homebrew 経由の方法で書いていきます。

https://fvm.app/documentation/getting-started/installation

// Homebrew 経由で FVM をインストール
$ brew tap leoafarias/fvm
$ brew install fvm
$ fvm -v
3.1.1

// インストール可能な Flutter のバージョンを出力
$ fvm releases 
┌───────────────────┬──────────────┬──────────┐
│ Version           │ Release Date │ Channel  │
├───────────────────┼──────────────┼──────────┤
│ v1.0.0            │ Dec 4, 2018  │ stable   │
├───────────────────┼──────────────┼──────────┤
│ v1.2.1            │ Feb 26, 2019 │ stable   │
├───────────────────┼──────────────┼──────────┤
...
│ 3.19.2            │ Feb 28, 2024 │ stable   │
├───────────────────┼──────────────┼──────────┤
│ 3.19.3            │ Mar 8, 2024  │ stable   │
├───────────────────┼──────────────┼──────────┤
│ 3.19.4            │ Mar 21, 2024 │ stable ✓ │
└───────────────────┴──────────────┴──────────┘
Channel:
┌─────────┬─────────┬──────────────┐
│ Channel │ Version │ Release Date │
├─────────┼─────────┼──────────────┤
│ stable  │ 3.19.4  │ Mar 21, 2024 │
└─────────┴─────────┴──────────────┘

// 現状の安定版をインストール
$ fvm install 3.19.4
Creating local mirror...
 Compressing objects: [██████████████████████████████████████████████████] 100%
 Receiving objects:   [██████████████████████████████████████████████████] 100%
 Resolving deltas:    [██████████████████████████████████████████████████] 100%
✓ Clone complete
✓ Flutter SDK: SDK Version : 3.19.4 installed! (2.6s)

// バージョンを指定
$ fvm use 3.19.4 // 安定版を指定したい場合は `stable` と入力してもいい

FVM コマンドを使いやすくするためにシェル(例:fish シェル)にエイリアスを追加。

~/.config/fish/config.fish
# Flutter alias
alias flutter 'fvm flutter'

FVM で管理しているバージョンを既存プロジェクトに適用させる

プロジェクト直下で fvm use [バージョン番号] と入力すると選択したバージョンがプロジェクトに適用されます。このコマンドから指定した Flutter 自体は、.fvm/ の中に格納されます。

$ fvm use 3.19.4
Setting up Flutter SDK: 3.19.4

Downloading Darwin arm64 Dart SDK from Flutter engine a5c24f538d05aaf66f7972fb23959d8cafb9f95a...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  212M  100  212M    0     0  18.1M      0  0:00:11  0:00:11 --:--:-- 15.7M
Building flutter tool...
Resolving dependencies... (2.1s)
Got dependencies.
Flutter 3.19.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 68bfaea224 (2 days ago) • 2024-03-20 15:36:31 -0700
Engine • revision a5c24f538d
Tools • Dart 3.3.2 • DevTools 2.31.1

✓ Flutter SDK: SDK Version : 3.19.4 is setup
[WARN] Project is not a git repository. 
 But will set .gitignore as IDEs may use it,to determine what to index and display on searches,
You should add the fvm version directory ".fvm/" to .gitignore.
✔ Would you like to do that now? · yes                                                      
✓ Added .fvm/ to .gitignore

✓ Dependencies resolved. (8.4s)
✓ Project now uses Flutter SDK : SDK Version : 3.19.4
┌────────────────────────────────────────────────────────────────────┐
│ ✓ Running on VsCode, please restart the terminal to apply changes. │
└────────────────────────────────────────────────────────────────────┘
You can then use "flutter" command within the VsCode terminal.

VSCode の設定を追加

fvm use コマンドを実行すると FVM が .vscode/settings.json を作成します。開発をスムーズに進めるために、このファイルにいくつか設定を追加しておきます(追加コード: 参照)。

.vscode/settings.json
{
  // 既存コード:FVM が設定したパス
  "dart.flutterSdkPath": ".fvm/versions/3.19.4",
  // 追加コード:検索結果から除外
  "search.exclude": {
    "**/.fvm": true
  },
  // 追加コード:ファイルウォッチャーによる監視対象から除外
  "files.watcherExclude": {
    "**/.fvm": true
  }
}

バージョンを確認すると FVM で指定したバージョンになっている。

$ flutter  --version
Flutter 3.19.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 68bfaea224 (2 days ago) • 2024-03-20 15:36:31 -0700
Engine • revision a5c24f538d
Tools • Dart 3.3.2 • DevTools 2.31.1

// Dart は Flutter をインストールしたら自動的に入るけど念のため出力してみる
$ dart --version
Dart SDK version: 3.3.1 (stable) (Wed Mar 6 13:09:19 2024 +0000) on "macos_arm64"

Dart のバージョンがちがう??

このバージョンの違いは一体?

flutter --version コマンドで返ってきた Dart のバージョンは 3.3.2 で、dart --version コマンドで返ってきた Dart のバージョンは 3.3.1

この 3.3.1 の方の Dart は、過去に Flutter SDK を公式から zip ファイルでダウンロードしてきた Dart SDK のバージョンでした。


https://docs.flutter.dev/get-started/install/macos/mobile-ios?tab=download

// `Dev` というディレクトリをユーザーディレクトリの下に作ってそこで管理していた
$ which dart
/Users/maechan/Dev/flutter/bin/dart

このバージョンの乖離を見て「大丈夫なのか?」と思ったので調べると、これについては問題はないようでした。以下、GPT 先生のお言葉を載せておきます。

dart コマンドは /Users/maechan/Dev/flutter/bin/dart から実行されています。これは、Dart SDKがFlutter SDKの一部としてインストールされていることを示しています。つまり、このDartはFlutterと共にインストールされたものであり、Flutterのインストールに伴ってシステムに追加されたものです。

この場合、システム上にはFlutterにバンドルされたDart SDKのみが存在し、別途インストールされたDart SDKはないことになります。従って、Flutterの開発に使用しているDart SDKに関する混乱は生じないため、特にアンインストールする必要はありません。

Flutterと共にインストールされたDartを使用している限り、Flutterのアップデートに合わせてDart SDKも更新されるため、手動でのDart SDKの管理は必要ありません。Flutterの開発に専念している場合は、このセットアップで問題なく開発を続けることができます。

ただこれは少し心地よくないと思ったのと、今後、Flutter のバージョンは FVM で管理する方針を取るので要らないものは削除しておいたほうが良さそうなので掃除をします。

// Flutter ディレクトリを削除(シェルで通していたパスがあればそれも削除)
$ rm -rf /Users/maechan/Dev/flutter/
// Dart コマンドが使えないことを確認
$ dart --version
fish: Unknown command: dart

FVM で管理しているプロジェクトの Dart のバージョンがどっちも 3.3.2 になった!

$ flutter --version
Flutter 3.19.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 68bfaea224 (2 days ago) • 2024-03-20 15:36:31 -0700
Engine • revision a5c24f538d
Tools • Dart 3.3.2 • DevTools 2.31.1

$ dart --version
Dart SDK version: 3.3.2 (stable) (Tue Mar 19 20:44:48 2024 +0000) on "macos_arm64"

おわり

Flutter のバージョン管理の仕組みを導入できました。アプリ開発やっていきましょううう。

参考記事

https://www.memory-lovers.blog/entry/2023/07/12/202814

Discussion