⛳
Flutterバージョン管理ツールPuroを試してみる
Flutterバージョン管理ツールPuroを触ってみます。
- 公式サイト
- 複数のプロジェクトで異なるバージョンのFlutterを利用できる、FVMのようなFlutter SDKのバージョン管理ツールです。
- ストレージ容量やインターネット帯域幅を節約し、新バージョンを2倍の速度でダウンロードできます。
- FVMはグローバルなバージョン管理に対応しなくなりましたが、Puroはグローバルなバージョン管理に対応しています。
- IDEの設定を自動的に行うことができます。
パフォーマンス
公式サイトによると
- Puroでの初回インストールはFVMに比べて20%高速化されます。
- 2回目以降のインストールは50〜95%高速化されます。
- 仕組み
- gitクローンの並列化
- git履歴のグローバルキャッシュ
- Flutterエンジンバージョンのキャッシュ
- GitLabのオブジェクト重複排除に似た技術を実装
インストール
Mac
curl -o- https://puro.dev/install.sh | PURO_VERSION="1.3.5" bash
Linux
curl -o- https://puro.dev/install.sh | PURO_VERSION="1.3.5" bash
Windows
Invoke-WebRequest -Uri "https://puro.dev/builds/1.3.5/windows-x64/puro.exe" -OutFile "$env:temp\puro.exe"; &"$env:temp\puro.exe" install-puro --promote
私はMacにインストールしました。
実行ファイルは$HOME/.puro/binにインストールされ、パスを通す必要がありました。
以下が.puroの構成です。
.puro
├── bin
│ └── puro
├── envs
└── prefs.json
作業後は以下のようになります。(Level 3まで出力)
.puro
├── bin
│ └── puro
├── envs
│ └── newest
│ ├── flutter
│ ├── prefs.json
│ └── update.lock
├── prefs.json
├── releases_macos.json
└── shared
├── caches
│ └── b20183e04096094bcc37d9cde2a4b96f5cc684cf
├── flutter
├── flutter_tools
│ └── e1e47221e86272429674bec4f1bd36acc4fc7b77
└── pub_cache
├── README.md
├── _temp
├── hosted
└── hosted-hashes
利用方法
Puroはenvironment
を定義して利用します。
公式サイトから引用
# Create new environment from a release channel
puro create my_env stable
# Or from a version
puro create my_env 3.3.6
# Or from a commit
puro create my_env d9111f6
# Or from a fork
puro create my_env --fork git@github.com:pingbird/flutter.git
作成したmy_env
を利用するには以下のコマンドをFlutterプロジェクト内で実行します。
puro use my_env
またPuroはVSCodeやAndroid Studioの利用を自動的に検出して、必要な設定を行います。
新規プロジェクトの場合は--vscode
や--intellij
を追加して設定を生成します。
グローバル設定
グローバルデフォルトの設定は--global
もしくは-g
を利用して行います。
puro use -g my_env
コマンド
利用できるコマンド一覧です。
Available commands:
clean Deletes puro configuration files from the current project and restores IDE settings
create Sets up a new Flutter environment
dart Forwards arguments to dart in the current environment
engine Manages Flutter engine builds
eval Evaluates ephemeral Dart code
flutter Forwards arguments to flutter in the current environment
gc Cleans up unused caches
ls Lists available environments
ls-versions Lists available Flutter versions
pub Forwards arguments to pub in the current environment
repl Interactive REPL for dart code
rm Deletes an environment
run Forwards arguments to dart run in the current environment
uninstall-puro Uninstalls puro from the system
upgrade Upgrades an environment to a new version of Flutter
upgrade-puro Upgrades the puro tool to a new version
use Selects an environment to use in the current project
version Prints version information
ls-versionsを実行したところ、分かりやすいフォーマットで表示されました。
> puro ls-versions
[i] Latest stable releases:
Flutter 3.13.1 | 5d | e1e47221e8 | Dart 3.1.0
Flutter 3.13.0 | 2w | efbf63d9c6 | Dart 3.1.0
Flutter 3.10.6 | 2mo | f468f3366c | Dart 3.0.6
Flutter 3.10.5 | 2mo | 796c8ef792 | Dart 3.0.5
Flutter 3.10.4 | 3mo | 682aa387cf | Dart 3.0.3
Flutter 3.7.12 | 4mo | 4d9e56e694 | Dart 2.19.6
Flutter 3.3.10 | 8mo | 135454af32 | Dart 2.18.6
Flutter 3.0.5 | 1y | f1875d570e | Dart 2.17.6
Flutter 2.10.5 | 1y | 5464c5bac7 | Dart 2.16.2
Flutter 2.8.1 | 2y | 77d935af4d | Dart 2.15.1
Latest beta releases:
Flutter 3.14.0-0.1.pre | 1w | 120d54d33a | Dart 3.2.0
Flutter 3.13.0-0.4.pre | 2w | 7e07cd41cb | Dart 3.1.0
Flutter 3.13.0-0.3.pre | 3w | e90f5d4561 | Dart 3.1.0
Flutter 3.13.0-0.2.pre | 1mo | ac71592bc6 | Dart 3.1.0
Flutter 3.13.0-0.1.pre | 2mo | 1f6bdb6fa2 | Dart 3.1.0
Flutter 3.12.0 | 3mo | 8fcb74dbc1 | Dart 3.1.0
Flutter 3.11.0-0.1.pre | 3mo | 350d2c3a6c | Dart 3.1.0
Flutter 3.10.0-1.5.pre | 4mo | b1c77b7ed3 | Dart 3.0.0
Flutter 3.9.0-0.2.pre | 5mo | 0df8557c56 | Dart 3.0.0
Flutter 3.8.0-10.1.pre | 6mo | 1a0a03a41d | Dart 3.0.0
実際に利用してみる
> puro create newest 3.13.1
> puro use newest
VSCode設定のsettings.jsonに以下の設定が追加されました。
{
"dart.flutterSdkPath": "/Users/username/.puro/envs/newest/flutter",
"dart.sdkPath": "/Users/username/.puro/envs/newest/flutter/bin/cache/dart-sdk"
}
Android Studio(IntelliJ)の設定は失敗しているようです。Issueがありました。
PuroでインストールしたFlutter SDKを手動で設定して、動作が確認できました。
今後修正されると思います。
その他
- Dartのバージョン管理には対応していないので、ls-versionsコマンドでDartのバージョンを確認してそれに対応するFlutterバージョンをインストールします。参考: https://github.com/pingbird/puro/issues/22
- environmentの名前の変更コマンドは現在のところ存在しません。フォルダーをリネームすることで対応します。参考: https://github.com/pingbird/puro/issues/37
- Flutterバージョンを直接
use
コマンドに指定できるようにするIssueが出されています。
感想
-
environment
の定義が手間に感じましたが、今後Flutterのバージョンを直接指定できるようになるかもしれないので、期待しています。 - IntelliJでは使用するFlutterのバージョンを変更するたびに設定を変更する必要がありましたが、自動設定が正しく動くようになれば非常に便利だと思います。
- パフォーマンスの向上は複数プロジェクトを管理する場合に大きなメリットがあると思います。
- FVMはプロジェクト内に設定を作成しますが、Puroはグローバルに設定を作成するので、プロジェクトに直接関係ないファイルが作成されないのが良いと思いました。ただし、VSCodeでの設定はホームのファイルを参照するので、一長一短です。
- CI/CDでの利用はどうなるのか気になります。
- すぐにFVMから移行する必要性は高くないと思いますが、私は複数のプロジェクトに関わっているので注視していこうと思います。
Discussion