見出し画像

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を複製してる


🙏 参考情報



この記事が気に入ったらサポートをしてみませんか?