WSL2 のインストールとアンインストール

# 概要

WSL2 を導入する方法と除去する方法などをまとめました．

- WSL2 が利用可能になるまでの所要時間：約10分
- 実行環境：Windows 11

# 目次
1. [WSL2 とは？](#1-wsl2-とは)
1. [WSL2 のインストール方法](#2-wsl2-のインストール方法)
1. [WSL2 のアンインストール方法](#3-wsl2-のアンインストール方法)
1. [肥大化した WSL2 をリセットする方法](#4-肥大化した-wsl2-をリセットする方法)


# 1. WSL2 とは？

[WSL2](https://learn.microsoft.com/ja-jp/windows/wsl/about) とは Windows Subsystem for Linux 2 の略称で，Windows上で Linux を仮想的に動かすことができるシステム環境のことを指します．
WSL2 では [Ubuntu](https://jp.ubuntu.com/) という Linux ディストリビューション が採用されています．

> Linux とは OS (オペレーティングシステム) の一種です．
Linux と周辺のアプリをまとめたものを Linux ディストリビューション と呼びます．

Linux の基本事項は，以下がとても参考になります．

https://hnavi.co.jp/knowledge/blog/linux-merit/

https://qiita.com/kazuki-ayimon/items/57c3fd6eb71774e896ed

## 1-1. WSL2 の利点
WSL2 を使う利点は様々ですが，個人的には **ソフトウェアのインストールとバージョン管理が簡単** という点で，Windows よりも使い勝手が良いと感じています．
例えば，[gfortran](https://gcc.gnu.org/fortran/) を導入する手順を Windows と Linux (WSL2) でそれぞれ追ってみます．

- Windows の場合
    1. [gfortran のダウンロードページ](https://jmeubank.github.io/tdm-gcc/)を探す
    1. 自分のマシンに適切なインストーラーを探してダウンロード
    1. オプション選択してインストール開始
    <br />

- Linux (WSL2) の場合
    1. 以下のコマンドを入力

        ```terminal:Ubuntu
        sudo apt install gfortran
        ```

上の例のように，Linux ではコマンドを使って様々な命令を実行するため，シンプルです．
一見難しそうですが，覚えるべきコマンドは多くありません．

Linux コマンドの代表例は，以下がとても参考になります．

https://qiita.com/k-mat438/items/8d903f3335f5cd227646

http://www.redout.net/data/command.html

# 2. WSL2 のインストール方法

:::note warn
WSL2を既にインストールしている場合は，アンインストールしてください．
具体的な方法は [WSL2 のアンインストール方法](#3-wsl2-のアンインストール方法) を参考にしてください．
:::

1. Windows PowerShell を検索し，右クリックして「管理者として実行」を選択
※ 『最新のPowerShellをインストールしてください』と勧めてくるが無視
![PowerShellを管理者として実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/09fe0e59-c87b-2e34-8c09-65868591fb63.png)
<br / >
1. `wsl --install` と入力して，インストール開始 (所要時間:約20秒)
<br / >
1. インストールが完了したら，再起動
![PowerShellを管理者として実行_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/40711480-c057-9ce7-80ea-d865423f6759.png)
<br / >
1. 再起動すると，ユーザー名を設定する画面が開く
画面が開かなければ，検索バーから「Ubuntu」を検索
![WSL2_username.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/c2a8cd76-83da-f55e-e7e3-ad596e876077.png)
<br / >
1. ユーザー名とパスワードを設定したら，WSL2 が使えるようになる    
![WSL2_install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/fe65fdd4-ad22-9fa7-5f55-a081815fa6a9.png)

:::note warn
ユーザ名とパスワードはアルファベットのみで書くのが無難です．
パスワードは表示されないので，打ち間違えないようにしてください．
:::

## 2-1. WSL2 の動作確認
コマンドプロンプト を開いて `wsl -l -v` と入力し，以下のような応答があれば OK

![WSL2の動作確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/9e0fef39-a759-6b93-d81a-95442af003da.png)



## 2-2. WSL2 を使ってみる
検索バーから「Ubuntu」を検索すると，ターミナルが起動します．
例えば，Ubuntu のバージョンを調べてみましょう．
```terminal:Ubuntu
cat /etc/os-release
```
**結果**
```terminal:
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
```

私がよく使う Linux コマンドはざっと以下の人たちです．
なお，コマンドプロンプトでは使えないので注意してください．
```terminal:よく使う Linux コマンド
$ ls             # ディレクトリ内の内容を表示
$ ls -a          # ドットで始まる隠しファイルも含めて表示
$ cd .           # 現在のディレクトリに移動
$ cd ..          # 一つ上の階層のディレクトリに移動
$ cd /           # rootディレクトリに移動
$ cd ~           # /home/user名 のディレクトリに移動
$ pwd            # 現在のディレクトリまでの絶対パスを表示
$ cp -r A B      # AをBへコピーする (-r は再帰的にコピーするオプション)
$ mkdir A        # Aというディレクトリを作成
$ rmdir A        # Aというディレクトリを削除
$ rm -i A        # Aというファイルを削除 (-i 確認用オプション)
$ cat A          # Aというファイルの中身を閲覧
$ vim A          # Aというファイルを vim モードで編集
$ find / -name A # Aという名前のファイルの在処を探す
$ apt update     # 最新パッケージの取得 (更新は upgrade で行う)
$ apt upgrade    # 最新パッケージへの更新
```
:::note info
権限がないと怒られたら，コマンドの前に sudo を付けてください．
パスワードを要求される場合は登録したパスワードを入力してください．
:::

その他の Linux コマンドは，以下がとても参考になります．

https://qiita.com/k-mat438/items/8d903f3335f5cd227646

http://www.redout.net/data/command.html


## 2-3. WSL2 上での Cドライブの扱い

#### 1．デスクトップやドキュメントの参照位置
WSL2では，親元である Cドライブをマウントされたデバイスとして認識しています．
つまり，外付けハードディスク や USB のような外部装置として見ているようです．
```terminal:Ubuntu
/mnt/c/Users/ユーザー名/Desktop, Documents, ...
```

#### 2．Cドライブに登録した PATH は開通済み

デフォルトでは，Cドライブへ登録した PATH が全て WSL2 に引き継がれています．
WSL2 に登録されている PATH は次のコマンドで確認できます．

```:Ubuntu
echo $PATH
```

C ドライブの PATH を引き継ぎたくない場合は，以下の記事を参考にしてください．

https://zenn.dev/o2z/articles/zenn-20210524-01


# 3. WSL2 のアンインストール方法

Windows が提供するソフトの多くは，「導入が簡単，除去が困難」という素晴らしい粘着性を持っています．
実際，WSL2 の初期化やアンインストールに関する幾つかのネット記事を参考に，データの完全除去を試みましたが，そのほとんどで失敗しました．
というのは，一見消去できたように見えても，WSL2 を再インストールすると元のデータが簡単に復元されてしまうのです．

ここでは，WSL2 に含まれるデータを完全除去することに成功した方法を紹介します．
具体的には，以下を順に実行します．
- Linux ディストリビューション (Ubuntu) を消去
- WSL2 と周辺アプリ機能の無効化

なお，以下の記事がとても参考になりました．

https://broaden-your-horizons.com/ai-ss/wsl/complete-uninstall/

### 手順１．Linux ディストリビューション(Ubuntu) を消去する

1. コマンドプロンプトを起動
<br / >
1. `wsl -l -v` と入力して，Linux の状態を確認する
<br / >
1. `wsl --shutdown` と入力して，Linux を停止させる
※ WSL2 の再起動やシャットダウンは，WSL2 本体からは行えません．
<br / >
1. 再度，`wsl -l -v` と入力して，Linux が停止していることを確認する
<br / >
1. `wsl --unregister ubuntu` と入力して，Ubuntu の登録を解除する
![WSL2を削除する_shutdown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/bc981f72-dcd7-555b-a3b5-8b6f552ec258.png)
<br / >
1. 最後に，設定から Ubuntu をアンインストールして，とどめを刺す![Ubuntuのアンインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/04278f11-0557-d3b0-54f3-1cc921f22de5.png)

### 手順２．WSL2 と周辺アプリ機能の無効化
1. 検索バーから「Windowsの機能の有効化または無効化」を選択
<br / >
1. 「Linux 用 Windows サブシステム」と「仮想マシンプラットフォーム」のチェックを外して OK を押す
![Windowsの機能の無効化_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471691/75f54333-9645-5c5b-59c2-f9159d3ed5c0.png)
<br / >
1. 再起動を迫られるが，一旦無視
<br / >
1. 設定 > アプリ > インストールされているアプリ と進み，以下を順にアンインストール
    - Windows Subsystem for Linux Update
    - Windows Subsystem for Linux WSLg Preview
    - (あれば) Linux 用 Windows サブシステム
<br / >
1. コンピュータを再起動する

以上の操作によって，コンピュータ上から Linux を完全に消去できます．
再インストールする際は，「Windowsの機能の有効化または無効化」の「Linux 用 Windows サブシステム」を復活させておきましょう．

# 4. 肥大化した WSL2 をリセットする方法

私は WSL2 を使って数値計算をしているのですが，出力データが溜まってくると WSL2 の容量が大きくなります．
例えば，設定から「システム / ストレージ / インストールされているアプリ / Ubuntu 」で見ることができます．

そこで，`rm` コマンドを使って不要なデータを除去することが考えられます．
しかし，この方法では残念ながら WSL2 の容量を減らすことができません．
なぜなら，WSL2 では 仮想ハードディスク (Virtual Hard Disk, VHD) と呼ばれるファイルにデータを保存しており，これを**手動で最適化**する必要があるからです．

ここでは，その肥大化した WSL2 をリセットする方法をメモしておきます．以下の記事を参考にさせて頂きました．

https://footloose-engineer.com/resolve-wsl2-disk-space-problem/

https://qiita.com/siruku6/items/c91a40d460095013540d

https://qiita.com/OzoraKobo/items/62386ebf3ff167b4fe8d

:::note warn
`wsl --shutdown` と入力して Linux を停止させてから実行してください．
加えて，バックアップを取ってから実行してください．
:::

### 手順１．Hyper-V をオンにする (既にHyper-Vが使える場合は手順２へ)

#### ■ Windows 11 Pro の場合
1. 検索バーから「Windows の機能の有効化または無効化」を選択
1. 「Hyper-V」を選択後，OK を押して再起動
1. 再起動後，Windows PowerShell を検索し，右クリックして「管理者として実行」を選択
1. `Import-Module Hyper-V` を実行

#### ■ Windows 11 Home の場合 (Hyper-V をインストールする必要あり)
1. Shift キーを押しながら再起動を実行
1. BIOSが開くので，「トラブルシューティング」を選択
1. その後，「詳細オプション」>>「UEFIファームウェアの設定」>> 再起動
1. 後は，Windows 11 Pro と同様の手順を行う

### 手順２．VHD の最適化
1. Windows PowerShell を検索し，右クリックして「管理者として実行」を選択
1. `Optimize-VHD -Path "C:\Users\name\AppDate\Local\Packages\CanonicalGroupLimited.Ubuntu_79...sc\LocalState\ext4.vhdx"` を実行

ただし，`-Path` 以下のパスは予め調べておいてください．
なお，ext4.vhdx が肥大化したファイルそのものです．


# まとめ

WSL2 の導入と除去に関する方法などをまとめました．
WSL2 を使えば，Windows コンピュータ上で Linux を動かすことができるようになります．
何かの参考になれば幸いです．

<br / >

また，WSL2 を使ったプログラム開発環境を構築する記事も書いておりますので，興味のある方はご覧ください．

https://qiita.com/zakoken/items/8ddfda7267e7d95b3c46

https://qiita.com/zakoken/items/2a5e629020ce68f3efe1

https://qiita.com/zakoken/items/880bcf9cf9eb71dedae8


<!-- # 参考文献

- [(公式) Linux 用 Windows サブシステムとは](https://learn.microsoft.com/ja-jp/windows/wsl/about)
- [(公式) Ubuntu](https://jp.ubuntu.com/)
- [Linuxとは？初心者でもわかる基本情報とメリットを紹介 (発注ラウンジ)](https://hnavi.co.jp/knowledge/blog/linux-merit/)
- [【Linux】基礎知識についてまとめてみた (Qiita @kazuki-ayimon)](https://qiita.com/kazuki-ayimon/items/57c3fd6eb71774e896ed)
- [(公式) GNU Fortran](https://gcc.gnu.org/fortran/)
- [(公式) tdm-gcc](https://jmeubank.github.io/tdm-gcc/)
- [Linuxの基礎コマンド (Qiita @k-mat438)](https://qiita.com/k-mat438/items/8d903f3335f5cd227646)
- [Linuxコマンドリファレンス](http://www.redout.net/data/command.html)
- [WSL2でWindowsのPATH設定が引き継がれるのを解除する (Zenn @おつじ)](https://zenn.dev/o2z/articles/zenn-20210524-01)
- [WSL:保存版！【完全削除】する手順 (AIパンダ)](https://broaden-your-horizons.com/ai-ss/wsl/complete-uninstall/)
- [(公式) WSLを使用してWindowsにLinuxをインストールする方法](https://learn.microsoft.com/ja-jp/windows/wsl/install)
- [WSL2のインストールを分かりやすく解説 (チグサウェブ)](https://chigusa-web.com/blog/wsl2-win11/)
- [Ubuntuのアップデート方法 (Qiita @masoo)](https://qiita.com/masoo/items/8ebc51a6a9f32417d4a3)
-->