WSL2で案件ごとの開発環境(ディストリビューション)を作ると色々捗るんじゃないか?と思い手順をまとめた。
🚩 始めに
注意
💁♂️ 個人的メモ要素が大きいので適度に読み替えてね
💭 背景
WSL2 バックエンドのDockerでは問題が起きることがある
主にディスク読み書きのパフォーマンスやホットリロードがうまく動作しない等
すべてWSL2に乗せWSL上で開発環境を完結させる
ファイル
Docker
などなど
ホストのVSCodeからWSL2に繋いで開発する
ディストリビューションを適当な単位で作成することで
使い捨てを容易にする
各環境に合わせた最低減の状態を作成出来る
どこでディスク容量を食っているか分かる
必要なリソースのみ起動できる
1つのインスタインスにあれやこれや入れると何か起きるかもしれない
問題切り分けが難しくなる
OS/設定/環境変数/アプリや言語、ミドルウェア等のバージョンの差異など
WSLを使うことで、他のWindowsでの開発者はもちろん、MacやLinux開発者との環境差異を減らすことが出来る。
環境差異が無いことと開発時のパフォーマンスを両立したい
いい感じの折中案がディストリビューション分け運用
ホストOSのユーザーのホームディレクトリに仮想ディスク貯まっていくの草なので他のドライブに置きたい
WSL2やDockerが知らず知らずにディスクを圧迫している事がしばしば
1つのWSL2でやってるとこの辺の調査や改善が難しい
↑ Docker DesktopもDocker用のWSLのディストリビューションが立ち上がっておりその中になんやかんや入っているので同様の問題
💻 環境ごとにWSL2のインスタンスを作成する手順
基準となるOSをDLしておく
ここでは、ubuntu22.04 WSL用ビルドをダウンロードしておく
https://cloud-images.ubuntu.com/wsl/jammy/current/
ubuntuはWSL用のビルドがある。
例では、「D:\WSL\images\Ubuntu_22.04_LTS\ubuntu-jammy-wsl-amd64-wsl.rootfs.tar.gz」に保存
# 停止(せんでも良いかも)
wsl --shutdown
# インポート
wsl --import ubuntu-test D:\WSL\distributions\ubuntu-test "D:\WSL\images\Ubuntu_22.04_LTS\ubuntu-jammy-wsl-amd64-wsl.rootfs.tar.gz" --version 2
# 追加されたか確認する
wsl -l -v
作成したディストリビューションの初期設定
# PowerShellからディストリビューション名を指定して接続する
wsl -d ubuntu-test
# (root) ひとまずアップデート一回しとく
apt update
apt upgrade -y
# (root) ユーザーの作成
adduser user
※ ユーザー名は決めるの面倒なのでuserでいいや
# (root) sudo出来るようにしておく
gpasswd -a user sudo
ディストリビューションにWSLの設定を追加する
# (root) WSLの設定を変更
vi /etc/wsl.conf
↓ を/etc/wsl.confに記載
# wslのディストリビューションのホスト名を変更する
[network]
hostname = ubuntu-test
# ディストリビューションの既定のユーザーを変更する
[user]
default = user
その1 接続時のユーザーをrootから一般ユーザーに変更
参考: https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config#user-settings
Microsoft Storeのディストリビューション以外は接続時のデフォルトがrootユーザになっているので変えときたい
その2 wslのディストリビューションのホスト名を変更する
初期設定では自分のマシン名がホスト名になっているので、ディストリビューション名にしておくと分かりやすいかも
アンスコ「_」は書いても消える。ハイフンがいい。
一回シェルを抜けてpowershellでディストリビューションを停止
※ Ctl+Dで抜けれる
# powershellから全ディストリビューション止めちゃえ(投げやり)
wsl --shutdown
再接続すると設定が反映され、記載したユーザーで接続される
初期に設定しておきたいこと
# (user) visudoのエディタをnanoからvimに変更する
sudo update-alternatives --set editor /usr/bin/vim.basic
※ Vim派なので
# (userとroot) 保管時とかのビープ音?消す設定しとく。 結構うるさい。
echo "set bell-style none" >> $HOME/.inputrc
↑ は一般ユーザーとrootでそれぞれやっておく
参考: https://note.com/eiichicat/n/nd52b680226d8
開発ツールを入れる
環境に合わせて必要なものを入れる
VSCode
ホスト(Windows)側のVSCcodeからWSL拡張機能で接続するとwsl上にインストールしてくれるのでディストリビューション内では特になもしない
https://code.visualstudio.com/docs/remote/wsl
DockerとDocker Composeをインストール
参考: https://footloose-engineer.com/blog/2023/06/12/windows11-wsl2-ubuntu-docker-compose-setup/
※ Dockerデーモンの自動起動の設定は別途するのでスキップ
# (user) 確認
docker run hello-world
Dockerデーモンの自動起動は
WSL上に色々な環境を作るのでsystemdとかはonにしない(リソースの節約)
その代わり、接続時にDockerデーモンを立ち上げる
https://zukucode.com/2021/11/wsl2-docker-startup.html
# (user) 手動でDockerデーモンを立ち上げる場合
sudo service docker start
Git
# (user) Gitをインストール
sudo apt-get install git
Github コマンド
https://github.com/cli/cli/blob/trunk/docs/install_linux.md
# (user) Github コマンドでログインしとく
gh auth login
Node系
Volta(Nodeの環境管理ツール ✨おすすめ)
公式: https://docs.volta.sh/guide/getting-started
※ インストール終わったら一回抜けて再接続
# (user) voltaのインストールを確認
volta -v
Java系
OpenJDK 17に入れる
# (user) javaを入れる
sudo apt update
sudo apt install -y openjdk-17-jdk
# (user) 確認
java --version
AWS CLI
sudo apt install unzip
cd /tmp
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
#確認
aws --version
参考: https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
よく使うディレクトリを掘る
# ソース置き場
mkdir ~/Projects/
🍬 おまけ
WSLのその他コマンド
参考: WSL の基本的なコマンド
https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands
# ディストリビューションの削除
wsl --unregister <DistributionName>
新規インストールではなく、既存のディストリビューションをコピー
新規インストールではなく、既存のディストリビューションをコピーする事も出来る。
ある程度作った環境を置いておいて、ディストリビューションをコピーして使うことも出来る。
「ext4.vhdx」的なファイル(仮想ディスク)がディストリビューションごとに出来ているのでそれをコピーして新しいディストリビューションとして登録できる。
# 確認
wsl -l -v
# 停止。 起動してるディストリビューションからはコピーできない。
wsl --shutdown
# コピー
wsl --import dev D:\WSL\dev $env:LOCALAPPDATA\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx --version 2 --vhd
※ これはMicrosoft StoreからインストールしたUbuntu22.04LTSを複製してる