Windows11 に Ubuntu をインストールして開発利用するためのメモ

# はじめに

新しい Windows 11 の作業端末を購入したのだが、前の端末(Windows 10)で VirtualBox 経由でUbuntuを利用していたため、同様にこちらの環境をセットアップした。 
しかし、GUI 経由だとどうしても動作がもっさりしているように感じたため、WSL2 を利用した開発環境構築を行おうとして、色々セットアップした調査結果を記す。

## 今回作成する構成

今回は以下のような構成を作成する。

- Windows 11 に WSL2 と Ubuntu をインストールする
- Ubuntu のデスクトップ環境は利用しない [^1]
- CUI系の開発ツール (Git や Vim など）は Ubuntu にインストールする
- GUI系の開発ツール (VSCode など）は Windows にインストールする
- Windows 側からブラウザを通して開発したウェブアプリケーションを閲覧できる
    - 例えば `docker run --rm -p 8080:80 nginx` とした場合、Windows 側のブラウザで `http://localhost:8080/` としてアクセスすれば nginx にアクセスできること

[^1]: 厳密には1度 xrdp で接続可能なリモートデスクトップを導入してみたが、RDP経由だからか localhost 上であっても動きがややもっさりしているように感じたので、導入を見送った

## WSL2 と Ubuntu の導入

これはコマンドプロンプト（もしくはPowerShell）を開き、`wsl --install` を実行すれば完了する。 デフォルトで ubuntu がインストールされるようになっている。

https://learn.microsoft.com/ja-jp/windows/wsl/install

コマンドの完了後、Windows を再起動するとアプリに Ubuntu がインストールされているため、これを立ち上げると初期設定が行われて、ターミナルが立ち上がる。

## Docker のインストール

ターミナルは普通の Ubuntu として利用できる。 そのため、Docker のウェブページを参考にして、Docker を apt 経由でインストールする。
インストール後は `sudo systemctl enable docker` としておけば、Ubuntu を立ち上げたときに Docker サービスを自動的に立ち上げるようになる。

https://docs.docker.com/engine/install/ubuntu/

## Windows / Ubuntu 間のファイルアクセス

### Windows -> Ubuntu

Windows のエクスプローラーに `\\wsl$` と打ち込めば、Ubuntu のファイルシステムにアクセスできる。 

![SnapCrab_NoName_2025-2-8_0-24-31_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502582/8019ae1e-0df0-e5a1-e61a-1afb26178058.png)

もしくはエクスプローラーに Linux が追加されているので、ここからでもアクセスできる。

![SnapCrab_NoName_2025-2-8_0-31-15_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502582/acf3435d-73a2-11ca-e500-6e2dc36d5dbb.png)


### Ubuntu -> Windows 

Ubuntu のターミナルで `/mnt/c` にアクセスすると、Cドライブのルートにアクセスできる。


## Windows から localhost で Ubuntu にアクセスするための設定

Windows 側のホームディレクトリに `.wslconfig` (フルパスは `C:\Users\<ユーザ名>\.wslconfig` ) というファイルを作成して、以下の内容を記載する。

```.wslconfig
[wsl2]
localhostForwarding=True
```

このファイルを配置した後、wls （もしくは Windows）を再起動してこの設定を反映する。 設定ファイル内に `[wsl2]` というセクションを作るようにしないと、不明なキーがありますといったエラーが出力される。

https://qiita.com/snaka/items/a8eee4cfc8f7d733e6ab

https://qiita.com/nkojima/items/c8adc79f07161a73d797

## `.bashrc` と `.bash_profile` の読み込みについて

Ubuntu を立ち上げたとき、この２つのファイルがホームディレクトリに存在していると `.bash_profile` のみが読み込まれて、`.bashrc` は読み込まれないようだ。
そのため、`.bash_profile` の中で `.bashrc` を読みだすようにしてこの両方の設定をアクティブにしておく。 

```.bash_profile
if [[ -f ~/.bashrc ]] ; then
  . ~/.bashrc
fi
```

画面のカラー化の設定などが .bashrc に書かれているので、こちらを読みだした方が便利。

https://zenn.dev/ryoishizawa/articles/wsl2-terminal-color-issue

## Linux 上で実行可能な GUI アプリケーションについて

WSL2では Linux GUI アプリもコマンドを入力すれば Windows 上にウインドウとして表示してくれるそうだ。
マニュアルによると GIMP すら実行できるらしい。

https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/gui-apps

gitk もこれができるかと思って試したら `sudo apt install gitk` を実行した後、`gitk` コマンドでウインドウ表示ができた。 同様に sqlitebrower もウインドウ表示ができるなど、かなり多くの apt で入手した GUI コンテンツが実行可能な模様。

## VSCode によるコンテンツ編集時の注意点

WSL上のファイルを開く場合は先述したパスを直接開くのではなく、拡張機能WSLをインストールした後 WSL に接続して編集する、という方式が推奨される。
VSCodeで直接パスを指定していると開発関連のツールのパス解決がうまくいかない。 今回の導入時は PHP のクラスが認識されないなどの問題が発生したが、WSL接続をして編集すればこれらの問題は解消された。

https://blog.serverworks.co.jp/wsl-vscode

## まとめ

上記の設定を行うことで、

- Windows の GUI で Ubuntu 上のファイルを編集可能
- Ubuntu を使って docker や python, php などのコマンドを実行可能
- ウェブアプリケーションを開発する場合 Windows 側で localhost 経由でアクセス可能

となる。 
おそらく、ここまでできれば VirtualBox 上で動作させるよりはパフォーマンスがよいと思うので、実際に試していきたい。