Windows 11にWSL2をインストールする

WSLはマイクロソフトのドキュメントでセットアップ部分のみを読んでインストールし、あとはなんとなくで利用していました。

最近、新しい端末にWSLをインストールしようとして　[Windows Subsystem for Linux に関するドキュメント](https://learn.microsoft.com/ja-jp/windows/wsl/)　を確認すると、概要やチュートリアルなど色々とコンテンツがあることに気が付きました。

本記事ではインストール部分の記事を確認しながら、Windows 11にWSLをインストールしてチュートリアルを読んでざっくりまとめてみます。

## ドキュメント

[Windows Subsystem for Linux に関するドキュメント](https://learn.microsoft.com/ja-jp/windows/wsl/)

## 今回利用する環境

- Windows 11 23H2
- WSL バージョン: 2.1.5.0

## 前提条件の確認

WSLはWSL1とWSL2の二種類があり、今回はWSL2をインストールするため、WSL2の前提条件を確認すると下記となっていました。

- Windows 10 バージョン 2004 以上 (ビルド 19041 以上) 
- Windows 11

## WSLコマンドのインストール

[WSL コマンドのインストール](https://learn.microsoft.com/ja-jp/windows/wsl/install#install-wsl-command)

上記ドキュメントを参照しながらインストールしていきます。

```PowerShell
# 管理者で実行する
wsl --install
```

上記コマンドのように管理者でディストリビューションの指定なくインストールを行うと既定のディストリビューション（ubuntu）がインストールされます。

インストール中

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/65cdf32c-4e87-b916-dab3-2b752cfbddc3.png)

インストール完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/86d5a945-6016-57a5-0973-3badd1491673.png)

メッセージにも表示されている通り、システムを一度再起動します。

### 別のディストリビューションを選択する場合

既定ではUbuntuがインストールされますが、他のディストリビューションを選択したい場合は`-d`オプションでディストリビューションを指定してインストールします。

指定できるディストリビューションの一覧は下記コマンドで取得できます。

```powershell
# 指定できるディストリビューションを表示
wsl --list --online
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/615c4255-f437-ef14-550e-a091fbe2d17c.png)

## Linux ユーザー情報を設定する

[Linux ユーザー情報を設定する](https://learn.microsoft.com/ja-jp/windows/wsl/install#set-up-your-linux-user-info)

WSLのインストール後、初回接続時にLinuxディストリビューションのユーザーアカウントとパスワードを作成します。

インストールが完了するとスタートメニューにUbuntuが追加されるのでそちらからインストールしたディストリビューションに接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/e565dd08-5c18-aa1b-5cdf-784e4cd26b86.png)

初回起動時はインストール処理が走って待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/acf6aece-eb8a-5368-a9ba-c40b3875aca1.png)

しばらく待つとディストリビューションに作成するユーザーとパスワードの入力を求められます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/0990c9a0-d396-128b-1df7-081d294755b8.png)

ここで作成されるアカウントがディストリビューション規定のユーザーとして設定され、接続時に自動的にサインインされます。

ここで作成するユーザーは、Windows側のユーザーとは関係なく、インストールするディストリビューションごとに固有となり、またこのユーザーはLinux管理者としてsudoコマンドが実行できます。

ユーザー名とパスワードを入力後下記のようにディストリビューションに接続されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/103485fd-6115-a3dd-a365-682eea234be5.png)

### デフォルトユーザーを変更するには

設定したデフォルトユーザーを変更するには、ディストリビューションに別ユーザーを作成して下記コマンドから変更する事ができます。

[ディストリビューションの既定のユーザーを変更する](https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands#change-the-default-user-for-a-distribution)

`<DistributionName> config --default-user <Username>`

```poweshell
# ディストリビューション上で実行
# uesraddのデフォルト設定確認
useradd -D
# foobarユーザーを追加
sudo useradd -m foobar
exit

# Windows側で実行
Ubuntu config --default-user foobar
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/c11f9cad-f051-6150-9620-09f795c4c228.png)

上記のようにfoobarというユーザーを作り、ディストリビューション接続時のデフォルトユーザーをfoobarに切り替えました。

なお、sudoできるように設定していないので上記だけだとfoobarユーザーはsudoできません。

sudoできるようにするには、最初に作成した管理者ユーザーでディストリビューションの設定を確認し、sudoできるように調整しましょう。

## 設定とベスト プラクティス

チュートリアルが設定とチュートリアルの設定のベストプラクティスにあるようなので下記を確認してざっくりまとめます。

[設定とベスト プラクティス](https://learn.microsoft.com/ja-jp/windows/wsl/install#set-up-and-best-practices)

### はじめに 、Linux のユーザー名とパスワードを設定する

確認すると最初はインストールとLinuxユーザーの説明がありますが、こちらはインストールのドキュメントと重複する部分なので特にコメントなし。

### パッケージの更新とアップグレード

パッケージの更新とアップグレード については、WindowsではLinuxディストリビューションの更新やアップデートは自動で行われないため、パッケージに定期的に更新する事を推奨されている。

### ディストリビューションを追加する

今回は既定のディストリビューションとなっていたUbuntuをインストールしていましたが、それ以外にもあるといった話。

Microsoft Store経由でインストールしたり、独自に用意したものをimportコマンドで読みんだり、Enterprise向けにMDEだったり含めて設定したり。

### Windows Terminalの設定

Windows Terminalのインストールと利用方法について。

また新しいディストリビューションをインストールするたびに、Windows Terminal内に新しいインスタンスが作成される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/21f4b301-066f-4ff6-4819-6511f06a3496.png)

今回のケースでは画像のようにWindows Terminal上に今回インストールされたUbuntuが追加されている事がわかります。

### File Storage

WSLプロジェクトをエクスプローラーで開くには `explorer.exe .`を利用する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/0e88408c-b37b-4122-3d14-fb69b0d2e79e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/f896647f-5ad8-1eff-f476-8024905432a8.png)

上記のようにubuntu上の~(ホームディレクトリ)でコマンドを実行すると、エクスプローラーでカレントディレクトリが開きます。

## お気に入りのコード エディターを設定する

wslを利用したリモート開発とデバッグではVisual Studio Code と Visual Studio を利用する方法が紹介されている。

Visutl Studio Codeを利用する場合、一部のLinuxディストリビューションではVS Code サーバーの起動に必要とされるライブラリが不足しているらしい、下記を実行。

```bash
sudo apt-get update

sudo apt-get install wget ca-certificates
```

WSL ディストリビューションからプロジェクトを開く場合は事前にWindows側でVS CodeをインストールしてからWSL ディストリビューションで`code .`を実行

```bash
mkdir ~/helloworld

cd ~/helloworld

code .
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/08b54f62-2a0e-0f39-ebaa-6def295173b9.png)

`code .`を実行すると、VS Code Serverのインストールが始まり、VS Codeが起動します。

### Git を使用してバージョン管理を設定する

GitはWindows側とディストリビューション側の両方にインストールできる。
ディストリビューション側へのgitのインストールと設定について。

#### Git Credential Manager のセットアップ

Windows側にGit for Windowsのインストールを行い、WSL ディストリビューションではWindows側のGCMを利用するように設定するのが推奨らしい。

```bash
# インストールされている GIT が >= v2.39.0 の場合
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"

# またはインストールされている GIT が >= v2.36.1 の場合
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"

# またはバージョンが < v2.36.1 の場合は、次のコマンドを入力します:
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager-core.exe"

```

Windows側のGCMを利用しない場合は、Configuring WSL without Git for Windowsを参照。

[Configuring WSL without Git for Windows](https://github.com/git-ecosystem/git-credential-manager/blob/main/docs/wsl.md#configuring-wsl-without-git-for-windows)

### Docker を使用してリモート開発コンテナーを設定する

Windows側にDocker Desktop for Windowsをインストールしで、wsl2上でリモートコンテナを使用した開発を始める方法について説明されている。

### データベースの設定

WSL上に各種DBをインストールして接続する方法について記述がありました。

- MySQL
- PostgreSQL
- MongoDB
- Redis
- Microsoft SQL Server、または SQLite

### パフォーマンスを向上させるために GPU アクセラレーションを設定する

WSL上でGPUを利用するための設定について記述がありました。
今回の環境では関係ないので、そういう設定があるのか程度で読み飛ばし。

### 基本的な WSL コマンド

- Windows側からwsl上のコマンドを実行
- Windows側からwsl上のコマンドを実行して、Windows側のコマンドでフィルタする混在ケース
- wls上からWindowsツールを実行するケース
- wsl上でWindowsツールを実行して、それをwsl側のコマンドでフィルタする混在ケース

Windows上でLinuxコマンドを利用したり、ディストリビューション側でWindowsアプリを利用したり、それが混在するケースだったりについて説明されている。

### 外部ドライブまたは USB をマウントする

wsl2を利用してディスクをマウントする方法について記述がありました。
今回の環境では関係ないので、そういう設定があるのか程度で読み飛ばし。

### Linux GUI アプリを実行する

WSL2上にLinux GUIアプリケーションをインストールして、起動するとWindows側のアプリのように実行される事について紹介されています。

```bash
# geditのインストール
sudo apt install gedit -y
```

wsl2上でgeditをインストールすると、Windows側のスタートメニューでディストリビューションの下にあたかもWindowsアプリのように選択できるようになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/8bbc5629-bd4b-3029-c112-a05df3b53572.png)

スタートメニューから起動　もしくは　wsl2上でインストールしたgeditを実行するとwindowsアプリかのようにエディタが開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/88d76456-20d8-96fc-e30f-8007e42019e8.png)

### その他のリソース

- Windows開発環境への設定リンク
- wslのトラブルシューティングへのリンク
- wslのリリースノートへのリンク

が紹介されていました。

## 総評

毎回、なんとなくでインストールして利用していたwslですが、公式のドキュメントが充実してきていたのに今さら気が付いて読んでみました。

インストール方法については特に変化は感じず。

チュートリアルのベストプラクティスを見ると、wsl上のファイルをwindowsなnotepad.exeで開いたり、Linux GUIアプリを利用したり、dockerだったり。

そんな風に利用できるんだってことを掴む意味でもチュートリアル（ベストプラクティス）読んでおいて損はない気がします。