Knowledge Garden
技術記事 公開日

WSLとは何か: WindowsでLinux開発環境を使うための基礎と実践

WSLの仕組み、WSL 1とWSL 2の違い、導入手順、設定、開発用途、注意点を実務目線で整理する。

WSLとは何か: WindowsでLinux開発環境を使うための基礎と実践

結論

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を使う
  • bashgrepsedawkssh などの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 1WSL 2
実行方式LinuxシステムコールをWindows側で変換軽量VM上でLinuxカーネルを実行
Linux互換性一部制約あり高い
ファイルI/OWindows側ファイルへのアクセスが比較的得意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%\.wslconfigWindowsユーザープロファイル直下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上で本番に近いコマンド体系を使える点が大きい。

インフラ・クラウド開発

sshrsyncterraformkubectlhelmawsazgcloudなどの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の利点を最大限に活かせる。

参照元