Android SDKなどのコマンドラインがよくわからん人向けのWSL上でのFlutter開発環境構築

# WSL内にAndroid Studioを入れたほうが楽かもしれない
私はPHPのエンジニアですが、Flutterの開発環境が必要になったので構築手順を共有します。
アプリ開発は専門外なので、エミュレータのインストール方法などがよくわかりませんでした。
そこで、そのあたりはAndroid Studioに担当させて、開発自体はVSCodeでやる方法がいいと思いました。

SDK回りの設定がコマンドライン上ではよくわからない人向けになっていると思います。
また開発をVSCodeで行いたい人も参考にしていただければと思います。

## 最終目標
今回は、VSCodeでWSL上のUbuntuにアクセスし、emulator上でデモ用のFlutterアプリが動作することが目標です。
## 開発環境
|Windows|Ubuntu|Flutter|
|--|--|--|
|11| 20.04|3.05|

Windowsは11です(ここ重要)
Windows 11はwslgが使用できるため、UbuntuからGUIツールを使用することができます。

## WSL設定()
とりあえずpower shellを管理者権限で開き以下のコマンドでwslをアップデートします。
アップデートしないとwslgが使用できない可能性があります。
```
power shell) wsl --update
```
```
power shell) wsl -l -v // これでwsl内のディストリビューションを確認
```
Ubuntu環境がwslにない場合はインストールしましょう。
```
power shell) wsl --install -d Ubuntu20.04
```
Ubuntuが自動的に開くので適当に初期設定してください。

## Ubuntu設定
power shellからUbuntuにログインしましょう。
またログイン直後はwindows側のホームディレクトリを指しているので、Ubuntuのホームディレクトリに移動します。
```
power shell) wsl -d Ubuntu-20.-4
Ubuntu) pwd
/mnt/c/Users/ユーザー名
Ubuntu) cd ~/
Ubuntu) pwd
/home/ユーザー名
Ubuntu) echo 'cd ~' >> ~/.bashrc // これを打つと次回からはUbuntu側のホームディレクトリから始まります
```

Ubuntu内をアップデートします。
```
Ubuntu) sudo apt -y update && sudo apt -y upgrade
Ubuntu) sudo apt install unzip // あとで使用します
```
## KVM設定(ここできないとエミュレータで詰みます)
私もよくわかっていないので、何も考えずにやっていきます。
とりあえずこれがないとエミュレータが動かないです。
[参考](https://developer.android.com/studio/run/emulator-acceleration?hl=ja): linuxは下のほうです。
```
Ubuntu) sudo apt-get install cpu-checker
Ubuntu) egrep -c '(vmx|svm)' /proc/cpuinfo
1以上の数字が出れば問題ないらしいです。
Ubuntu) kvm-ok
KVM acceleration can be used // これが出れば問題ないらしいです。

Ubuntu) sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
Ubuntu) sudo adduser ユーザー名 kvm
Ubuntu) echo 'sudo chown ユーザー名 /dev/etc' >> ~/.bashrc // wslログイン時にkvmの所有権を変更
```

wslを再起動しておきます。
```
Ubuntu) exit
power shell) wsl -t Ubuntu-20.04 // シャットダウン
power shell) wsl -d Ubuntu-20.04 // 再ログイン
```

## Flutterインストール
[公式サイト](https://docs.flutter.dev/get-started/install/linux#install-flutter-manually)
Install Flutter manuallyの青い部分を右クリックでリンクをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/4c46d486-30e7-71ad-4952-e8e6711c2e75.png)

```
Ubuntu ~) mkdir development
Ubuntu ~) cd ~/development
Ubuntu development) wget コピーしたリンク
Ubuntu development) tar xf ダウンロードされたファイル
Ubuntu development) rm ダウンロードしたファイル(解凍したほうでないです)
```
念のためバージョン情報を確認しておきます。
```
Ubuntu) ~/development/flutter/bin/flutter --version
バージョン情報
Ubuntu) ~/development/flutter/bin/dart --version
バージョン情報
```
パスを通しておきます。
```
Ubuntu) sudo ln -s ~/development/flutter/bin/flutter /usr/bin/flutter
Ubuntu) sudo ln -s ~/development/flutter/bin/dart /usr/bin/dart
```
いろいろ×マークが出ると思いますが、いったん打っておきます。
```
Ubuntu) flutter doctor -v
```

またサンプルプロジェクトも作っておきましょう
```
Ubuntu ~) flutter create sample
```

## Android Studioの設定
[ここ](https://developer.android.com/studio?hl=ja)からLinux用のAndroid Studioのリンクをコピーします。
ページの真ん中あたり「Android Studio downloads」以下にあるので注意してください。
チェックマークを入れるとクリックできるようになるので、リンクをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/a5484cab-619d-8ea2-e770-515e06d79d6d.png)

とりあえず~/development以下にダウンロードします。
```
Ubuntu) cd ~/development
Ubuntu development) wget コピーしたアドレス
```
[公式ドキュメント](https://developer.android.com/studio/install?hl=ja)のLinux部分を参考に/usr/local以下に解凍します。
```
Ubuntu) cd /usr/local
Ubuntu /usr/local) sudo tar -zxvf ~/development/ダウンロードファイル
Ubuntu) /usr/local/android-studio/bin/studio.sh // android studioが立ち上がる
```
Android Studioが立ち上がったら適当に同意していきます。

Android Studioが操作できるようになったら作ったサンプルプロジェクトを開きます。
右上のスマホをドロイドくんマークをクリックするとデバイスマネージャーが開けるので、「Create device」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/c8d74936-eeab-c308-b17d-b024e8769e95.png)

前の画面でデバイスを選択して、次のページで必要なものをダウンロードします。
この辺りはよくわからないのでAndroid Studioが進めているものを設定しています。
「S」「R」などの横のDownloadをクリックするとNextに行けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/2e20aab2-095a-a4d1-3898-0e7a6cb87d3b.png)

kvmをやっていない場合などは右側のエラーが出て、最終的に「finish」できないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/2796f71f-6aa8-fb14-60cc-c1d3902e17cd.png)

設定が完了すると「再生ボタン」みたいなものをクリックするとエミュレータが立ち上がります。
立ち上がったらAndroid Studioは閉じてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/3fa5b2bf-8a7a-cb90-110b-cfbcc52ccc47.png)

## VSCodeの設定
拡張機能をいれてきます。
- Remote Development (wslにつなげる用)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/95930be6-2abc-5aa3-3af4-872766d5fdda.png)
- Flutter
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/a3e89669-d28e-6e6e-5b5d-c7b4f6d8bd5f.png)
- Dart 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/3913711a-5be1-e4c3-99eb-81e5b340bcf2.png)
- エミュレータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/82a68e61-f660-3a79-5138-c8201c4807b2.png)

エミュレータが入ったらVSCodeの右上にスマホと歯車のマークが出るのでクリック
VSCodeの上のほうが反応するので、クリックしていくとAndroid Studioで作成したデバイス名が出てくるので、クリックするとエミュレータが立ち上がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/1a5debb1-5b19-e459-6b2e-1b13a2f78093.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/bc8cff5a-92e4-928e-112d-db7b492609ce.png)

VSCodeのターミナルを開いてアプリを実行
```
Ubuntu) cd ~/sample // サンプルディレクトリに移動
Ubuntu) flutter run
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/e570850d-864b-a259-ae63-ada6cb5fb7e9.png)

これで開発をVSCodeで行えるようになりました。

## 追加:Android Studioの設定
Android Studioで開発した場合は、コマンドで立ち上げた後にSettingsもしくはPluginsから「Flutter」「Dart」を追加する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/f6eb3816-5677-b491-5bf5-e06f2ca5a3e3.png)

FlutterとDartのPluginが入ったら
上部で「main.dart」が表示されるようになるので、再生ボタンを押せばアプリがエミュレータ上で動作します。
「main.dart」の横にデバイスが表示されない場合はセレクトボックスを何回かリフレッシュすることで出てくると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2657595/4160e98a-f9cf-32e2-7985-ae331447cb7d.png)

## まとめ
以上で設定は完了です。
VSCodeを使ってエミュレータを動作させてアプリ開発が可能になりました。
コマンドラインでSDK managerを使用してemulatorのインストールをすることは可能ですが、アプリ開発初学者の私にとってはこちらのほうが分かりやすいと思っています。
Android関連で追加のインストールが必要な場合にAndroid Studioを使用しましょう。

## 参考文献
[WSL 2 の Ubuntu 22.04 で Flutter 3 のクリーンな開発環境を作る](https://mseeeen.msen.jp/wsl-flutter-3-hello-world/)
[WSL2でFlutter環境をできるだけクリーンに構築する(えみ)](https://qiita.com/suruseas/items/42d5d9c5beffa6ebdd78)
[Android studioインストールドキュメント1](https://developer.android.com/studio/install?hl=ja)
[Android Studioインストールドキュメント2](https://developer.android.com/studio?hl=ja)
[Android Emulator のハードウェア アクセラレーションを設定する](https://developer.android.com/studio/run/emulator-acceleration?hl=ja)
[KVM、UbuntuのAndroidStudioエミュレーターを高速化](https://ubunlog.com/ja/kvm-acelera-android-studio/)