2025年1月版 Windows11にFVM+Flutterの開発環境を構築する

# はじめに

Windows11にFlutterの開発環境を構築する手順の備忘録です。

- クリーンインストール直後のWindows 11で確認した手順です
- 本記事の手順に沿うとWindows用とWeb用のFlutterアプリが開発できるようになります
- 本記事末のオプションの手順まで実行すると、Android版アプリも開発できるようになります

# 構築手順
## Visual Studio 2022 のインストール
[Visual Studio 2022 Community 版](https://visualstudio.microsoft.com/ja/vs/community/)をインストールします。インストーラーでは「C++によるデスクトップ開発」を選択してインストールします。

## gitのインストール
[git for windows](https://gitforwindows.org/)からインストーラーをダウンロードしてインストールします。バージョンは 2.46 以上であることを確認してください（2.46以上でないと、後述の safe.directory の設定が簡単にできません）。

インストールオプションは特にデフォルトから変更しません。

## Chocolatey のインストール
Chocolateyがインストールされていない場合は、[公式サイト](https://chocolatey.org/install)の「Install Chocoletey for Individual Use」に従って、Chocolateyをインストールします。管理者Terminalでインストールする必要があります。

## FVMのインストール
Flutter SDKのバージョン管理マネージャ、FVMをインストールします。管理者Terminalを開いて、[公式サイト](https://fvm.app/documentation/getting-started/installation)どおり、以下を実行します。

```PowerShell
choco install fvm
```

パッケージが見つからない、または壊れているという趣旨のエラーが出てインストールに失敗した場合は、以下のように `--pre` オプションを付けて実行してください。

```PowerShell
choco install --pre fvm
```

## Flutter SDKをインストール
管理者Terminalで、fvmコマンドを使ってFlutter SDKをインストールします。

```PowerShell
fvm install 3.24.5
```

## gitの設定を調整
FVMがFlutter SDKをインストールするディレクトリをgitに信頼させる必要があります。

git for windows をインストールした際に付属でインストールされたターミナル（Git Bash または Git CMD)を起動して、以下のコマンドを実行します。`xxxxxx` の部分はご自身のユーザーディレクトリ名で読み替えてください。

```PowerShell
git config set --global --append safe.directory 'C:\Users\xxxxxx\fvm\*'
```

設定したら一度ターミナルを終了させます。

## 動作確認
Flutter SDKが正しくインストールされたか確認します。Terminalを開いて以下を実行します。

```PowerShell
fvm global 3.24.5
fvm flutter doctor
```

上記で表示される Flutter SDK のバージョンが期待どおりで、かつAndroid関係以外のエラーが出ていなければ、セットアップは問題なく完了です。

## 環境変数の設定
ここまでの設定では、flutterコマンドの実行は`fvm flutter`のように`fvm`コマンドを経由する必要があります。

`flutter`コマンドのみ入力して実行できるようにしたい場合は、Windows の環境設定で、`%USERPROFILE%\fvm\default\bin` にパスを通します。

パスを通しておくと、`flutter` コマンド単体で入力した場合でも、`fvm global` や `fvm use` の指定を反映したバージョンの flutter が起動します。

## ビルド＆実行まで確認
一般権限の Terminal を開いて適当な作業ディレクトリに移動し、以下のコマンドを入力します。

```PowerShell
fvm flutter create --platforms=windows test_project
cd test_project
fvm flutter run -d windows
```

以上で Windows 用のFlutterのサンプルアプリがビルドされ、起動します。

ここまで確認できたら、開発環境構築はおわりです。

# オプション 
## Visual Sutdio Code 
[Visual Studio Code](https://code.visualstudio.com/docs/setup/windows) 1.77 以上をインストールした後、VS Code を起動して [Flutter extension for VS Code](https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter) をインストールします。

## Android 開発
以下の手順を行うと、Android版アプリも開発できるようになります。

- [Android Studio 2023.3.1 (Jellyfish)以上をインストール](https://developer.android.com/studio/install?hl=ja#windows)する
- Flutter 公式サイトの [Configure Android development](https://docs.flutter.dev/get-started/install/windows/mobile#configure-android-development) の手順を行う


# FAQ
## コマンドを実行すると Error: Unable to find git in your PATH. エラーが出る
前述の「gitの設定を調整」が正しく行われていればエラーが発生しないはずです。

しかし、上記の設定をしても、`fvm flutter`コマンドがエラーで動かない場合は、FVMのインストール先ディレクトリが標準と異なっているのかもしれません。

```PowerShell
fvm api context
```

を実行すると表示される JSON の下の方に fvmDir という項目があるので、それでFVMのルートディレクトリを確認してください。そして、FVMのルートディレクトリの後に '\*' を付けたものを safe.directory に指定して、以下のコマンドを実行してください。

```PowerShell
git config set --global --append safe.directory '<FVMのルートディレクトリ>\*'```
```

## Android版のビルドでcompileGroovyタスクがエラー
Android Studio 2024.2.2 (Ladybug) + Flutter 3.24.5 で、Android版をビルドすると、compileGroovyタスクでエラーになる場合があります。

```shell
* What went wrong:
Execution failed for task ':gradle:compileGroovy'.
> Failed to run Gradle Worker Daemon
   > A problem occurred starting process 'Gradle Worker Daemon 6'
```

これはOSの地域設定（日付と時刻の書式）をUSにすると強引に直せますが、Gradleのバージョンを8.4に上げてやると解消します。

```android/gradle/wrapper/gradel-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip # ココ
```

## Android版でplus系プラグインを使うとビルドエラー
Android Studio 2024.2.2 (Ladybug) + Flutter 3.24.5 で、Android版をビルドすると、Flutterのplus系プラグイン（connectivity_plusなど）の利用時に、以下のようなエラーが出ます。

```shell
* What went wrong:
Execution failed for task ':connectivity_plus:compileDebugJavaWithJavac'.
> Could not resolve all files for configuration ':connectivity_plus:androidJdkImage'.
```

これは settings.gradle で Android Plugin を 8.3.1 に上げると解消します。

```groovy:android/setting.gradle
...

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "8.3.1" apply false // ← ココ
    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
}

include ":app"
```

### 補足
上記では、Gradle バージョン 8.4 と Android Gradle Plugin バージョン 8.3.1 を選択していますが、これは 2024年1月時点のconnectivity_plusプラグイン6.1.2のビルド設定を参考にした値です。