FVM (Flutter Roadmap FVM)

## はじめに
Flutterを網羅的に学習するにあたって[Roadmap](https://roadmap.sh/flutter)を使って学習を進めることにしました。

この記事では、Flutterを学習し始める方に向けて、**FVM**についてまとめています。

RoadmapはFlutterだけでなく、他の言語やスキルのロードマップも提供されており、何から学習して良いか分からないと悩んでいる方にとって有用なサイトになっています。
ぜひ[Roadmap](https://roadmap.sh/)を利用して学習してみてください。

## Roadmapとは

簡潔に言えば、Roadmap.shは学習者にとっての**ガイドブック**であり、**学習の方向性を提供する学習ロードマップサイト**です。

初心者から上級者まで、ステップバイステップでスキルを習得するための情報が提供されています。

学習の進め方が分かりやすく示されているだけでなく、個々の項目に参考資料やリソースへのリンクも提供されているので、学習者は目標を設定し、自分自身のペースで学習を進めることができます。

## FVM
Flutterロードマップの**FVM**では以下のサイトが紹介されています。
興味のある方はぜひお読みください。

- Flutter Version Manager - Official Website: https://fvm.app/

## FVMとは
FVMとは**Flutter Version Management**(FVM)の略で、Flutterプロジェクトで複数のFlutter**SDKバージョン**[^1]を管理し、切り替えるためのツールとなっています。

FVMを使用することで異なるFlutterバージョンを使用する必要がある場合でも、簡単にSDKバージョンを切り替えることができるようになります。

## FVMの使用方法
FVMの設定手順を大きく分けると 以下の4つに分けられます。

- **FVMのインストール**
- **PATHを通す**
- **Flutterバージョンを指定する**
- **Android StudioにSDKのPATHを指定する**

### FVMのインストール
FVMを使用するにはまずインストールする必要があります。インストール方法としては2つあり、**Dart**か**Homebrew**を使用してインストールします。
```dart
// Dartでインストール
dart pub global activate fvm
fvm --version //インストールしたfvmのバージョンが表示されれば完了
```

```sh
# Homebrewでインストール
brew tap leoafarias/fvm
brew install fvm
```

###  PATHを通す
インストールした後は、PATHを通す必要があります。zshやbash等**環境により差異**がありますので、設定する前に環境の確認をお勧めします。
```zsh
# zsh使用時 ~/.zshrcに以下のコードを記載
export PATH="$PATH:$HOME/.pub-cache/bin"
```

使用するFlutterバージョンを確認する方法
```dart
// 現在どのFlutterバージョンが利用できるか確認したい場合、以下のコマンドを使用します
fvm releases
```

### Flutterバージョンを指定する
Flutterバージョンを決めたらFlutterバージョンを指定する必要があります。プロジェクトに合わせたバージョンを指定しましょう。**バージョン番号を指定**する方法と**Channelを指定する**方法があります。
```dart
fvm use 3.10.4  // バージョン番号で指定する方法 
fvm use stable  // Channelで指定する方法
```
バージョンを指定した時点で.**fvmファイル**が生成されます。.fvmファイルはGithubなどにあげないファイルになりますので、.**gitignore**に追加を行いましょう。

### Android StudioにSDKのPATHを指定する
**~/.fvm/flutter_sdk**にインストールしたバージョンのFlutterが入っているので、Android Studioの**Flutter SDK pathのPATHを変更**します。
1. Android Studioのタブから**Settings**を開きます。
2. **Languages&Frameworks**内にある**Flutter**を開きます。 
3. Fluter SDK pathに以下のpathを追加します。 
**/Users/Flutterプロジェクトまでのpath/.fvm/flutter_sdk**

## コマンド確認
最後にFVMで使用する**コマンド**を記載しておきます。便利なコマンドばかりですので、ぜひ使用してみて下さい。

- **インストール済みのバージョンを確認する**
```dart
// listコマンドを使用するとインストール済みのバージョン一覧が表示されます。 
fvm list

// 出力結果
3.10.4 (active) // 現在有効なバージョン 
3.10.3 // インストールされているバージョン 
2.5.3 // インストールされているバージョン
```
- **使用しないFlutter SDKバージョンを削除する**
```dart
// 今後使用しないFlutter SDKバージョンを削除するにはremoveコマンドを使用します
fvm remove 3.10.4 // 再度使用するにはインストールする必要があります。
```

- **IDEに設定すべきFlutter SDK Pathを見る**
```dart
// 現在使用しているFlutter SDKのバージョンやIDEに設定すべきSDK Pathを見る 
fvm doctor
```

## まとめ
FVMを使用することで**複数のFlutter SDKバージョンをインストール**することができ、コマンド1つでバージョン管理を行えるようになります。
複数のFlutter SDKをインストールしておくことができるため、一度**インストールしたバージョンは削除しない限り、切り替えることができます。**
複数のFlutterアプリを開発する際はほぼ必須の知識になるので、コマンドを含めて Flutterアプリ開発者は覚えておきましょう。

## 参考資料
https://zenn.dev/altiveinc/articles/flutter-version-management 

https://zenn.dev/welchi/articles/d8f120adeebc7a85ed17 

https://dev.classmethod.jp/articles/flutter-fvm/ 

https://fvm.app/

https://ramble.impl.co.jp/3148/

[^1]: **Software Development Kit** (SDK) => 端的に言うとソフトウェア開発をするための一式が詰め込まれたキットのことです。SDKを使用することで、開発する際に、開発者が自分で1からソースコードを書いたり、プログラムを構築する工数を削減することができます。