🔁

asdfでFlutter SDKのバージョンをアプリ毎に管理する

2021/07/29に公開
4

https://zenn.dev/riscait/articles/flutter-version-management


複数のFlutterプロジェクトに携わるならFlutter SDKのバージョン管理は必須とも言えますよね。

こちらのアプリは v2.0.0 を使ってるけど、あちらのアプリは v1.17.0 のままだし、さらにあちらは devチャンネルの v2.4.0.pre を使ってる!

といったときに、都度グローバルにインストールしたFlutterのバージョンを上げたり下げたりするのは面倒です。。


FVM(Flutter Version Management)を長らく使っていましたが、朝日さんの記事を見てから気になっていた asdf を導入してみました!

asdf の導入(インストール)

https://asdf-vm.com/guide/getting-started.html#_1-install-dependencies

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

https://asdf-vm.com/guide/getting-started.html#local

指定した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 で設定する

  1. Macだと ⌘ + , か、メニューから Code -> Preferences -> Settings で設定画面を開きます。
  2. Search settingsflutter sdk と入力します。
  3. 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.jsondart.flutterSdkPath を指定している場合は asdf の使用に問題がありそうです。

Macであれば ⌘+,settings.json を開き、 dart.flutterSdkPath を削除しましょう。

プロジェクトの settings.json で .fvm/flutter_sdk が使用されている場合

.vscode/settings.json で 以下の指定がある場合、今のところ問題なく flutter コマンドは使えていますが、問題があれば追記します。

"dart.flutterSdkPath": ".fvm/flutter_sdk"

参考文献

https://asdf-vm.com/
https://github.com/asdf-vm/asdf
https://blog.dalt.me/2730
https://dev.classmethod.jp/articles/try-asdf-settings/

GitHubで編集を提案
Altiveエンジニアリングブログ

Discussion

にわとりにわとり

Homebrewでインストールし、 ZSH を使用している場合は以下のコマンドを実行すればパスが通ります。

のくだりで sourchというコマンドが出てきますが、これ source の間違いだったりしませんか

村松龍之介村松龍之介

にわとりさん、ご指摘ありがとうございます🙏
タイポですね!後ほど修正いたします👍

k3ntar0k3ntar0

素晴らしい記事をありがとうございます!
asdf plugin add flutter が必要そうです!