一覧へ戻る

Windows に Linux を入れる(WSL + Ubuntu)導入メモ

2025-09-28 公開 2025-09-28 更新 GitHub
目次

概要

WindowsとMac両方持っていて、どちらでも開発を行うことがあるのだが、開発体験がWindowsとMacで異なることが多いため困っていた。

WindowsとMacではOSもシェルも異なるため、コマンドに差異があったり入れることができるツールにも差が出てくる。

そのため、少しでも開発体験を同じにできるようにWindowsにLinuxを入れることにした。

MacはUnixであるためLinuxともかなり体験が近くなる。

今回はUbuntu(諸々必要なものが入ってるディストリビューション)を入れて、WSLでLinuxを動かしてみた。

前提

OS / カーネル

カーネル

OS の中核となるソフトウェアでOSの一部である。アプリとOSの仲介役のような役目を持つ。

CPU・メモリ・ストレージ・ネットワークなどのハードウェア資源を管理してアプリケーションに使わせる。

  • Windows → NT カーネル(Unix/Linux とは別系統)
  • macOS → XNU(Mach + BSD)
  • Linux → Linux カーネル(多数のディストリで配布されている)

ターミナル(PowerShell / Terminal.app)は OS に命令を出す窓口で内部で シェル(zsh, bash など)が動く。流れはこう。

ユーザー入力
ターミナル
シェル (bash, zsh, PowerShell…)
カーネル
ハードウェアを制御 or アプリを起動

WSL とは

WSL1

Linux のシステムコールを Windows に翻訳する役目を持つ。 WSL2

軽量 VM(仮想マシン)上の本物の Linux カーネルが動く。互換性・再現性が高く現在の主流。

Ubuntu は WSL で選べる代表的な Linux ディストリビューションのひとつ(他に Debian/Alpine など)。

VM上で動いてるので、直接WIndowsとのやり取りはできない。

そのためWindowsへ指示を出したい場合は引き続きPowerShellを通じて行う必要がある。

※ 仮想マシンは、CPU・メモリ・ディスクなどを仮想的に分割して“別のPC”を作り出している。その中にLinuxが入ってる。(ホストマシンのリソースに依存している)

  • WSL2 の役割
    • WSL2は仮想マシンを作成する仕組み。その仮想マシンにUbuntuなどのディストリビューション(日常的に使うパッケージマネージャやユーティリティがそろったLinuxOS)を入れる。
  • シェルとターミナルの関係 ※ Windows Terminal などの「ターミナルアプリ」は単なる“窓”であり、実際に OS に命令を出すのはシェル。- PowerShell ターミナルは シェルが PowerShell なので、Windows にしか命令できない。- Linux に命令を出すには、WSL 上で bash や zsh といった Linux シェルを使う必要がある。
  • Windows ↔ Linux の橋渡し
    • カーネルが異なるため、直接の命令はできない。
    • ただし Microsoft が ファイル共有機構(/mnt/c など)や 相互呼び出し(Linux から notepad.exe、Windows から wsl ls など)を実装しているため、異なる OS 間でも一部のリソース共有・参照が可能。
      • ただし、/mnt/c と WSL の境界越え I/O が遅いのでプロジェクトは /home 側に置くことを推奨。

dotfilesの取り組みの中で.zshrc を管理してたりするが、Mac では zsh を使っているので、WSL2 + Ubuntu でも zsh を入れることで .zshrc を共通管理できるようになったのは大きい。

導入手順(WSL2 + Ubuntu)

インストール

PowerShell(管理者):

wsl --install
wsl --set-default-version 2
wsl --update

確認:

wsl -l -v

VERSION が 2 なら WSL2。

Ubuntu 起動

  • スタートメニューから Ubuntu を起動(初回はユーザー/パスワードを設定)。
  • 以後は PowerShell からも起動可:
wsl -d Ubuntu

初回アップデート

sudo apt update && sudo apt -y upgrade

その他ツールの導入

前提:Homebrew(Linuxbrew)

未導入なら先に Homebrew を入れる。

/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
brew --version

zsh の導入と既定シェル化

brew install zsh
echo "$(brew --prefix)/bin/zsh" | sudo tee -a /etc/shells
chsh -s "$(brew --prefix)/bin/zsh"

反映には wsl --shutdown → 再起動。シェル確認:

echo $SHELL

VS Code / Cursor で WSL を開く

  • VS Code に Remote - WSL を入れる。
  • WSL 側でプロジェクトディレクトリへ移動し:
code .
# または
cursor .

chezmoi(dotfilesで使用)

インストール:

brew install chezmoi
chezmoi --version

テンプレートで OS 分岐する場合(例): {{ if eq .chezmoi.os "linux" }} ... {{ end }}

ghq

brew install ghq
ghq --version

zsh設定

次のコマンド入力を待っているときに表示される文字列が、デフォルトだと {マシン名}% なので、~/{path} のように変更する(好みによる)。

echo 'export PS1="%~ %# "' >> ~/.zshrc
source ~/.zshrc

履歴をセッションをまたいで残す設定:

cat <<'EOF' >> ~/.zshrc
export HISTFILE="$HOME/.zsh_history"
export HISTSIZE=100000
export SAVEHIST=100000
setopt APPEND_HISTORY SHARE_HISTORY HIST_IGNORE_DUPS HIST_REDUCE_BLANKS
EOF
source ~/.zshrc

peco の文字化け対策

apt 版 peco(古いビルド)を入れたらターミナルが文字化けしたので、削除して Homebrew 版に入れ替えた(Homebrew は前節で導入済み前提)。

peco を brew で再インストール:

sudo apt remove -y peco
brew install peco
which peco # /home/linuxbrew/.linuxbrew/bin/peco が望ましい

任意:クリップボード

  • 「Ubuntu アプリ(WSL コンソール)」を管理者権限で開き、左上のUbuntuアイコンクリック後にプロパティを選択し、コピーペースト許可を有効化しておく。

SSH 鍵の移行

WindowsOS側で使用していたSSH kyeをそのままコピペして移動した。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Node/asdf(mise)

開発は基本devcontainerで行うため、nodeはホスト側に不要なケースが多くなるが、簡易的なWebアプリやSSGなどはホストで実行したいため、一応入れておく。

Homebrewでasdfの導入

asdf plugin add nodejs <https://github.com/asdf-vm/asdf-nodejs.git>
# mise の場合
mise use -g nodejs@lts

Node.jsインストール

asdf install nodejs latest
asdf global nodejs latest
# mise の場合
mise use -g nodejs@lts

よくある

  • PATH が反映されない → source ~/.zshrc または exec zsh -l
  • chsh の反映 → wsl --shutdown 後に再起動。
  • I/O が遅い → プロジェクトは /home/<user> 直下に置く(/mnt/c は避ける)。
  • Windows ⇔ Linux パス変換 → wslpath を使う。
  • VS Code で WSL 上のフォルダが重い → Remote-WSL で開いているか確認。

基本コマンド

# PowerShell
wsl -l -v # ディストリとバージョン確認
wsl --update # WSL 更新
wsl --shutdown # WSL を停止
# Ubuntu (WSL)
lsb_release -a # ディストリ情報
uname -a # カーネル情報
wslpath <path> # パス変換 (Win ⇔ WSL)
この記事を共有