asdfでFlutter SDKのバージョンをアプリ毎に管理する
複数のFlutterプロジェクトに携わるならFlutter SDKのバージョン管理は必須とも言えますよね。
こちらのアプリは v2.0.0 を使ってるけど、あちらのアプリは v1.17.0 のままだし、さらにあちらは devチャンネルの v2.4.0.pre を使ってる!
といったときに、都度グローバルにインストールしたFlutterのバージョンを上げたり下げたりするのは面倒です。。
FVM(Flutter Version Management)を長らく使っていましたが、朝日さんの記事を見てから気になっていた asdf を導入してみました!
asdf の導入(インストール)
Macの場合は、 Homebrew で簡単にインストールできます。
brew install asdf
パスを通します。
Homebrewでインストールし、 ZSH を使用している場合は以下のコマンドを実行すればパスが通ります。
# パスを通す
echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
# そのまま同じ Terminal を使うなら、 `.zshrc` を更新して通したパスを反映させる
source ~/.zshrc
インストール可能なFlutterバージョンの一覧を見る
asdfにてインストール可能なFlutterのバージョンが一覧するには、asdf の list all コマンドを実行します。
asdf list all flutter
使用したいFlutterバージョンをインストールする
asdf の install コマンドを実行します。
# Flutter 2.2.3 (stable) をインストールする場合
asdf install flutter 2.2.3-stable
asdfにてインストール済みのFlutterバージョンを確認するには asdf の list コマンドを使用します。
asdf list flutter
プロジェクトごとにasdfでFlutterバージョンを指定する(変更も同じ)
Flutterバージョンのアップグレードも同じコマンドを使います👌
asdf の local コマンドを実行します。
# プロジェクトのディレクトリに移動していない場合は移動します。
cd アプリプロジェクトのディレクトリ
# アプリプロジェクトで使用したいバージョンを指定します。
asdf local flutter 2.2.3-stable
このコマンドを実行すると、 .tool-version が作成されます。
.tool-version がすでに存在する場合は、指定したFlutterバージョンに書き換えられます👍
以下、作成される tool-version 例です。
Flutter のバージョンが指定されていますね👌
flutter 2.2.3-stable
指定したFlutterバージョンが使えているか、動作確認する
flutter --version
asdfで指定したFlutterバージョンになっていればOKです。
新しく参加したプロジェクトに .tool-versions がある場合にすること
A. 指定のFlutterバージョンをasdfでインストール済み
何もする必要はありません。そのまま flutter コマンドが使用できます。
B. 指定のFlutterバージョンをasdfでまだインストールしていない
以下のコマンドでインストールしましょう。
asdf install
.tool-versions ファイルで指定されているSDK(Flutter)がインストールされます。
VSCodeで必要な設定
VSCode の User Settings で設定する
- Macだと
⌘ + ,か、メニューからCode -> Preferences -> Settingsで設定画面を開きます。 -
Search settingsにflutter sdkと入力します。 -
Dart: Flutter Sdk Pathsに asdf でインストールしたFlutter SDKsのパスを入力します。
多くの場合は/Users/{username}/.asdf/installs/flutter/で良いかと思います。
以下は筆者の設定例です。ユーザー名は riscait の部分を変えてくださいね。

パスとしてディレクトリを指定しました!
これで、今後複数のFlutterバージョンをインストールしても、設定をいじる必要はありません。
複数のFlutterバージョンから、使用したいバージョンを選択する
User Settingsを設定しただけでは、複数のFlutterバージョンをインストールしていた場合はどのバージョンを使って良いのかVSCodeが判断できません。
以下の手順で選択しましょう。
VSCode右下に現在のFlutterバージョンが表示されています。
※表示されていない場合は、 main.dart など、 Dartファイルを開くと表示されます。

ここのバージョンが希望のバージョンになっていない場合は、Flutter 2.0.6 の場所をクリックしましょう。
以下のように選択画面が表示されます。

※FVMを使っていた方、使っているプロジェクトがある方の注意点
FVMを導入したときに、 VSCodeの settings.json で dart.flutterSdkPath を指定している場合は asdf の使用に問題がありそうです。
Macであれば ⌘+, で settings.json を開き、 dart.flutterSdkPath を削除しましょう。

プロジェクトの settings.json で .fvm/flutter_sdk が使用されている場合
.vscode/settings.json で 以下の指定がある場合、今のところ問題なく flutter コマンドは使えていますが、問題があれば追記します。
"dart.flutterSdkPath": ".fvm/flutter_sdk"
参考文献
Discussion
のくだりで
sourchというコマンドが出てきますが、これsourceの間違いだったりしませんかにわとりさん、ご指摘ありがとうございます🙏
タイポですね!後ほど修正いたします👍
素晴らしい記事をありがとうございます!
asdf plugin add flutterが必要そうです!非常に参考になりました!ありがとうございます!!