まっさらなWSL2環境を新たに作成する

# やりたいこと
何かの開発環境などを構築する際、既存のWSL環境で構築してしても良いが、まっさらな環境から作成していく方が何かと都合が良いことが多い。<br>
用途別に新しいWSL環境を作成し、目的に応じて切り替える。

# 環境
実行環境：Windows 11 23H2
構築する環境：Ubuntu 22.04

# 手順
## 0．現在の状況を確認する
コマンドプロンプトで、`wsl -l -v` を実行することで現在インストールされているディストリビューションを一覧で確認できる。
下記は、 Microsoft Store からインストールした Ubuntu が1つだけある状態。
```text:コマンドプロンプト
> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2
```

## 1．環境の名前とインストールするパスを決める
ここでは、環境名は `dev-env-u2204` 、インストール先は下記にする（フォルダを作成しておく）。
```text
%HOMEPATH%\wsl\env\dev-env-u2204
```

## 2．Ubuntu のイメージをダウンロードする
Ubuntu の[公式](https://cloud-images.ubuntu.com/wsl/)からダウンロードする（目的に合ったバージョンを選ぶ）。<br>
WSL 向けのイメージは `*-wsl.rootfs.tar.gz` で終わっているものからCPUに合わせて物を選ぶ。x86 系の 64 bit であれば `amd64` でOK。これを適当なフォルダにダウンロードする（今回は `%HOMEPATH%\Downloads\` ）。

## 3．Ubuntu のイメージをインポートする
コマンドプロンプトで下記コマンドを実行する。
```text:コマンドプロンプト
> wsl --import dev-env-u2204 %HOMEPATH%\wsl\env\dev-env-u2204 %HOMEPATH%\Downloads\ubuntu-jammy-wsl-amd64-wsl.rootfs.tar.gz --version 2
```

これは、下記のような内容になっている
```text:コマンドプロンプト
> wsl --import <環境名> <インストール先のパス> <ダウンロードしたイメージのパス> --version <WSLのバージョン>
```

確認。`dev-env-u2204` が追加されているのがわかる。（`*`が付いているのはデフォルト。`wsl --set-default <ディストリビューション名>`で変更可能。）
```text:コマンドプロンプト
> wsl -l -v
  NAME             STATE           VERSION
* Ubuntu           Running         2
  dev-env-u2204    Stopped         2
```

確認出来たら以下のコマンドで起動する（PowerShell でも可）。
```text:コマンドプロンプト
> wsl -d dev-env-u2204
```

# 使用に向けた準備
## 1．一般ユーザーの作成
作成直後はrootユーザーしか存在しないため、一般ユーザーを作成する。ユーザー名は何でも良いが、ここでは`wsl-user`とする。<br>
下記では、ユーザーの作成・パスワードの設定・sudo（管理者権限）への追加を実施している。
```bash:WSL
$ useradd -m -s $(which bash) wsl-user
$ passwd wsl-user
$ usermod -G sudo wsl-user
```

WSL起動時、`-u`オプションでユーザー指定でログインできる。
```text:コマンドプロンプト
> wsl -d dev-env-u2204 -u wsl-user
```

## 2．初期設定
毎回のユーザー指定が面倒なので、デフォルトユーザーを設定する。また、起動時にWindows側のPATH（環境変数）を引き継がないように設定する。<br>どちらも、`/etc/wsl.conf`を以下のように設定すればOK（※編集には管理者権限が必要）。
```text:/etc/wsl.conf (WSL)
[user]
default = wsl-user
[interop]
appendWindowsPath = false
```

起動時の初期ディレクトリをホームディレクトリにする。
```bash:WSL
$ echo 'cd ~' >> ~/.bashrc
```

WindowsのPATHを反映しないようにしたが、ディレクトリをエクスプローラで開く`explorer.exe .`などは使いたいので、それは個別に設定する。また、vscodeを用いるため、そのパスも通す。
```text:コマンドプロンプト
> where code      <-- vscodeのパス確認
```

WSL側でパスを通す。vscodeのパスは上記で確認したものに置き換える。
```bash:WSL
$ echo export PATH=\$PATH:/mnt/c/WINDOWS/ >> ~/.bashrc
$ echo export PATH=\$PATH:\"/mnt/c/Users/[user_name]/AppData/Local/Programs/Microsoft VS Code/bin\" >> ~/.bashrc
```

これで下記コマンドが使用可能になる。
```bash:WSL
$ explorer.exe [ディレクトリ]    <---- ディレクトリをWindowsのエクスプローラで開く
$ code [ディレクトリ]    <---- ディレクトリをvscodeで開く
```

ここまで来たら一旦WSLを再起動する。
```text:コマンドプロンプト
> wsl -t dev-env-u2204
> wsl -d dev-env-u2204
```

あとはパッケージの最新化などをすれば完了。（※オブション`-q`は詳細を省略しメッセージ量を減らす。`-y`はYES/NOの回答を省略する）
```bash:WSL
$ sudo apt update -q && sudo apt upgrade -yq
```

## 3．おまけ
毎度`explorer.exe .`と入力するのは面倒くさいので、エイリアスを設定する。
```bash:WSL
$ echo alias ee=\'explorer.exe .\' >> ~/.bashrc
$ source ~/.bashrc    <---- 有効にするためシェルを再読み込み
```

こうすると、`ee`と入力するだけで`explorer.exe .`が実行される。そのほか、よく使うオプションを省略できるよう設定したりもできるので、エイリアスは覚えておくと少し幸せになる。
<br>
★ここまでの設定を毎度実行するのはまあまあめんどくさいので、シェルスクリプトなどを用いて一発で済むようにしておくのがおすすめ。<br>->（追記）[この記事](https://qiita.com/smzn1222/items/fdcf70f0573cba2c166a)でスクリプト例を公開しました。


# 参考サイト
- [WSLにrootfsからUbuntuをインストール](https://zenn.dev/dozo/articles/a633794f6d7575)
- [WSL2でFlutter環境をできるだけクリーンに構築する(えみ)](https://qiita.com/suruseas/items/42d5d9c5beffa6ebdd78)
- [WSL 2 の Ubuntu 22.04 で Flutter 3 のクリーンな開発環境を作る](https://mseeeen.msen.jp/wsl-flutter-3-hello-world/)