WSLとは何か: WindowsでLinux開発環境を使うための基礎と実践
WSLの仕組み、WSL 1とWSL 2の違い、導入手順、設定、開発用途、注意点を実務目線で整理する。
結論
WSLは、Windows上でLinuxのコマンド、開発ツール、シェル環境を直接利用するための仕組みである。Microsoft公式ドキュメントでは、WSLは従来型の仮想マシンやデュアルブートなしにGNU/Linux環境をWindows上で実行できる機能として説明されている。(Microsoft Learn)
実務では、WSL 2を標準として使う判断が妥当である。WSL 2はLinuxカーネルを使うため互換性が高く、Docker、Node.js、Python、Go、Ruby、Rust、機械学習系ツールなどのLinux前提の開発環境と相性がよい。一方で、Windows側のファイルシステムとの境界、メモリ使用量、ネットワーク、権限管理には注意が必要である。
WSLの基本概念
WSLは「Windows Subsystem for Linux」の略である。WindowsにLinuxディストリビューションを導入し、Bash、GNUツール、パッケージマネージャー、Linux向け開発ツールを利用できる。
代表的な利用例は以下である。
- Windows上でUbuntuやDebianを使う
bash、grep、sed、awk、sshなどのLinuxコマンドを使う- Node.js、Python、Go、Rustなどの開発環境をLinux側に構築する
- VS CodeからWSL上のプロジェクトを編集する
- DockerやKubernetes周辺の開発環境として使う
- WindowsアプリとLinuxコマンドを組み合わせる
WSLはLinuxデスクトップ環境を完全に置き換えるものではない。主な価値は、Windowsを使いながらLinuxベースの開発環境を軽量に扱える点にある。
WSL 1とWSL 2の違い
WSLにはWSL 1とWSL 2がある。現在の新規導入では、wsl --install でインストールしたLinux環境は既定でWSL 2になるとMicrosoft Learnに記載されている。(Microsoft Learn)
| 項目 | WSL 1 | WSL 2 |
|---|---|---|
| 実行方式 | LinuxシステムコールをWindows側で変換 | 軽量VM上でLinuxカーネルを実行 |
| Linux互換性 | 一部制約あり | 高い |
| ファイルI/O | Windows側ファイルへのアクセスが比較的得意 | Linux側ファイルへのアクセスが得意 |
| Dockerとの相性 | 限定的 | 良い |
| メモリ使用量 | 比較的少ない | VM分の管理が必要 |
| 推奨用途 | Windowsファイル中心の軽量作業 | 一般的なLinux開発環境 |
WSL 2は実際のLinuxカーネルを使うため、Linux向けツールとの互換性が高い。通常の開発ではWSL 2を選ぶべきである。WSL 1は、Windows側の大量ファイルをLinuxコマンドで処理するような特殊な用途で候補になる。
導入手順
WindowsのPowerShellまたはWindows Terminalで以下を実行する。
wsl --install
インストール済みのディストリビューションとWSLバージョンは、以下で確認できる。
wsl --list --verbose
または短縮形を使う。
wsl -l -v
既定のWSLバージョンをWSL 2にするには以下を実行する。
wsl --set-default-version 2
特定のディストリビューションをWSL 2に変更する場合は以下の形式を使う。
wsl --set-version Ubuntu 2
Microsoft Learnでは、既定ディストリビューションの変更、特定ディストリビューションの起動、WSL 1とWSL 2の切り替えに使うコマンドも整理されている。(Microsoft Learn)
基本コマンド
WSLを使ううえで最低限知っておくべきコマンドは以下である。
# インストール済みディストリビューションを表示
wsl -l -v
# 既定のディストリビューションを起動
wsl
# 特定のディストリビューションを起動
wsl -d Ubuntu
# WSLを終了
wsl --shutdown
# WSLを更新
wsl --update
# インストール可能なディストリビューションを表示
wsl --list --online
Linux側では通常のパッケージ管理を使う。Ubuntuの場合は以下が基本となる。
sudo apt update
sudo apt upgrade
sudo apt install git curl build-essential
ファイル配置の考え方
WSLで重要なのは、プロジェクトファイルをどこに置くかである。
原則として、Linux開発のプロジェクトはWSL側のホームディレクトリに置く。
/home/ユーザー名/projects/example
Windows側のファイルは以下のように見える。
/mnt/c/Users/ユーザー名/Documents
ただし、WSL 2ではLinux側ファイルシステム上のI/Oが得意である。Node.jsのnode_modules、Pythonの仮想環境、Gitリポジトリ、Docker関連ファイルなどは、WSL側に置くほうが安定しやすい。
WindowsのエクスプローラーからWSL側のファイルを開く場合は、Linux側で以下を実行する。
explorer.exe .
また、Windows側からは以下のようなパスでWSLファイルにアクセスできる。
\\wsl.localhost\Ubuntu
設定ファイル: wsl.confと.wslconfig
WSLには主に2種類の設定ファイルがある。
| 設定ファイル | 配置場所 | 対象 |
|---|---|---|
/etc/wsl.conf | 各Linuxディストリビューション内 | ディストリビューション単位 |
%UserProfile%\.wslconfig | Windowsユーザープロファイル直下 | WSL 2全体 |
Microsoft Learnでは、wsl.conf はディストリビューションごとの設定、.wslconfig はWSL 2の仮想マシン全体に関わる設定として説明されている。(Microsoft Learn)
systemdを有効にする例
Ubuntuなどでsystemdを使う場合、/etc/wsl.confに以下を設定する。
[boot]
systemd=true
設定後、Windows側でWSLを停止する。
wsl --shutdown
再起動後、以下で確認する。
systemctl list-unit-files --type=service
Microsoft Learnでは、WSLのsystemdサポートと有効化手順が説明されている。(Microsoft Learn)
メモリ上限を設定する例
WSL 2のメモリ使用量を制御したい場合、Windows側の%UserProfile%\.wslconfigを使う。
[wsl2]
memory=8GB
processors=4
設定後に反映する。
wsl --shutdown
開発PCでDockerや複数の言語サーバーを動かす場合、メモリ上限を明示するとWindows側の操作感を保ちやすい。
WSLが向いている用途
WSLは以下の用途に向いている。
Web開発
Linux前提のツールチェーンをそのまま使えるため、Node.js、npm、pnpm、Python、Ruby、PHP、Goなどの開発に向く。特に本番環境がLinuxの場合、Windows上で本番に近いコマンド体系を使える点が大きい。
インフラ・クラウド開発
ssh、rsync、terraform、kubectl、helm、aws、az、gcloudなどのCLIツールをLinux環境で扱える。WindowsのGUIアプリとLinuxのCLIを併用できるため、クラウド開発の作業効率が高い。
学習環境
Linuxコマンド、シェルスクリプト、Git、ネットワーク、サーバー運用の学習に使いやすい。仮想マシンを個別に構築するより導入の負担が低い。
AI・データ分析
Python、CUDA関連ツール、Jupyter、各種CLIをLinux環境で扱える。ただしGPU利用やドライバー周りは環境依存があるため、公式ドキュメントに沿って確認する必要がある。
注意点
Windows側とLinux側の境界を意識する
WSLはWindowsとLinuxを統合するが、完全に同一の環境ではない。パス表記、改行コード、ファイル権限、実行ファイル、環境変数の扱いが異なる。
Linux側では以下のようなパスを使う。
/home/user/project
Windows側では以下のようなパスを使う。
C:\Users\user\project
混在させると、ビルドエラー、権限エラー、パフォーマンス低下の原因になる。
大量ファイルはLinux側に置く
JavaScriptのnode_modules、Pythonの.venv、Gitの.gitディレクトリなど、大量の小さなファイルを扱うプロジェクトはWSL側に置くほうがよい。Windows側の/mnt/c配下で開発すると、ファイルアクセスが遅くなることがある。
セキュリティ更新を忘れない
WSL上のLinuxディストリビューションは、通常のLinuxと同様にパッケージ更新が必要である。
sudo apt update
sudo apt upgrade
Windows UpdateだけでLinux側パッケージまで常に最新になるわけではない。OS本体、WSL、Linuxディストリビューション、言語ランタイム、パッケージマネージャーを分けて管理する必要がある。
本番サーバーそのものではない
WSLは開発環境として非常に有用だが、本番サーバー運用の完全な代替ではない。サービス常時稼働、ネットワーク公開、監視、権限分離、バックアップ、障害復旧などは、本番Linuxサーバーやコンテナ基盤とは前提が異なる。
よくある誤解
WSLは仮想マシンではないのか
WSL 2は軽量仮想マシン上でLinuxカーネルを動かす。一方で、従来の汎用仮想マシンのようにOSイメージ全体を明示的に管理する体験とは異なる。ユーザーから見ると、Windows TerminalやVS CodeからLinux環境を自然に扱える点が特徴である。
WSLを入れるとWindowsがLinuxになるのか
ならない。WSLはWindows上にLinux実行環境を追加する機能である。Windowsアプリ、Windowsファイルシステム、Windowsの設定はそのまま残る。
Linuxを学ぶならWSLだけで十分か
基礎学習には十分な場面が多い。ただし、ブートローダー、物理ディスク管理、Linuxデスクトップ環境、サーバー常時運用、ネットワークインターフェイスの詳細制御などは、通常のLinux環境や仮想マシンで学ぶほうが適している。
2025年以降の動向
WSLは2025年にオープンソース化された。Microsoft Learnでは、WSLのコードがGitHubのmicrosoft/WSLで公開され、WSLgやWSL 2 Linux Kernel関連リポジトリも案内されている。一方で、WSL 1の一部ドライバーや\\wsl.localhost関連コンポーネントなど、Windowsイメージ側に残る非公開コンポーネントもある。(Microsoft Learn)
MicrosoftのWindows Developer Blogでも、WSLのコードがGitHubで公開され、ソースからビルドしたり、修正や機能追加に参加したりできると説明されている。(Windows Blog)
この変化により、WSLは単なるWindows付属機能から、よりコミュニティ参加型の開発基盤へ移行しつつある。ただし、Windowsとの統合部分は依然としてMicrosoftのプラットフォーム設計に強く依存するため、Linux単体環境と同一視すべきではない。
実務での推奨構成
一般的な開発者には、以下の構成が扱いやすい。
- Windows 11
- WSL 2
- Ubuntu LTSまたはDebian
- Windows Terminal
- VS Code + WSL拡張
- GitはWSL側で利用
- プロジェクトは
/home/<user>/projects配下に配置 - 必要に応じて
.wslconfigでメモリ上限を設定 - Docker利用時はWSL 2バックエンドを前提に設計
ディレクトリ例は以下である。
mkdir -p ~/projects
cd ~/projects
git clone [email protected]:example/app.git
cd app
VS Codeで開く場合は以下を使う。
code .
この形にすると、エディタはWindows側、実行環境はLinux側という分担になる。Windowsの利便性とLinuxの開発互換性を両立しやすい。
まとめ
WSLは、Windowsを使いながらLinuxベースの開発環境を利用するための実用的な基盤である。特にWSL 2はLinuxカーネルを使うため互換性が高く、現代的なWeb開発、クラウド開発、インフラ作業、学習環境に向いている。
一方で、WSLは万能ではない。ファイル配置、メモリ、ネットワーク、権限、更新管理を理解せずに使うと、パフォーマンス低下や環境不整合を招く。基本方針は明確である。Linux開発のプロジェクトはWSL側に置き、Windows側とは必要な範囲で連携する。これにより、WSLの利点を最大限に活かせる。