Windows上のLinux開発環境構築ガイド:WSL 2とUbuntuのインストール・設定・運用

概要WSL 2は,Windows上でLinux環境を実現するための仮想化技術です.利用にあたっては,BIOS/UEFIでの仮想化機能の有効化が前提となります.WSL 2を利用するには,まずWindowsで必要な機能を有効化し,次にLinuxディストリビューション(本記事ではUbuntuを例とします)をインストールします.インストール後,`bash`コマンドでLinuxシェル(Bash)を起動し,Linuxコマンドを実行できます.また,`wsl`コマンドを使ってWSL自体の管理を行います.運用時には,`.wslconfig`設定ファイルを用いることでメモリ使用量,スワップ領域,CPUコア数などを調整できます.WSL 2上にインストールしたUbuntuに開発ツールを導入すれば,コンパイラの動作確認やプログラムのテストが可能です.Windows 11ではWSLg機能により,LinuxのGUIアプリケーションも追加設定なしで利用できます.

主なwsl コマンド:

目次

  1. WSL 2の有効化
  2. WSL 2 の設定と .wslconfig ファイル
  3. Ubuntu (Linux ディストリビューション) のインストール
  4. 基本的な使い方: bash と wsl コマンド
  5. Ubuntu の初期設定
  6. 開発環境のセットアップ例 (C/C++/Python)
  7. ネットワーク設定 (ポートフォワーディング・ファイアウォール)
  8. トラブルシューティング
  9. WSLgによるGUIアプリの利用 (Windows 11)

サイト内の関連ページ

関連する外部ページ

WSL 2の有効化

前提:Windows Updateの実行

まず,WSL 2をスムーズに動作させるため,Windows Updateを実行し,システムを最新の状態にしておくことを推奨します.

注意:更新による予期せぬ問題に備え,重要なデータは事前にバックアップしてください.更新によりシステムの安定性が損なわれ,起動不能になる可能性もゼロではありません.バックアップは様々なシステムトラブルからの復旧に有効です.

以下のコマンドを実行してWindows Updateを開き,更新プログラムを確認・適用してください.

powershell -command "Start-Process ms-settings:windowsupdate"

更新後,再起動が要求された場合は Windows を再起動してください.

管理者権限でのコマンドプロンプト起動

以降のコマンド操作は,管理者権限で起動したコマンドプロンプトまたはPowerShellで行います.(例:Windowsキーを押し「cmd」と入力し,表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択)

必要なWindows機能の有効化 (コマンド操作)

以下のコマンドを実行して,WSL 2に必要なWindows機能を有効化します.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Windows Pro エディションの場合は,追加で以下も実行します.

dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart

(オプション: 必要に応じてHyper-V関連機能を有効化)

dism.exe /online /enable-feature /featurename:HypervisorPlatform /all /norestart

(補足: 有効化可能な機能名の一覧は `powershell Get-WindowsOptionalFeature –Online` で確認できます.)

再起動

機能の有効化を完了するため,Windowsを再起動します.

shutdown /r /t 0

GUIでの有効化手順 (代替)

コマンド操作でエラーが発生する場合や,GUIでの操作を希望する場合は,以下の手順で機能を有効化することも可能です.

  1. 「コントロールパネル」を開く
  2. 「プログラム」を選択
  3. 「プログラムと機能」を選択
  4. 画面左側の「Windows の機能の有効化または無効化」を選択
  5. Windows の機能の有効化または無効化」で,以下の項目にチェックを入れ,「OK」をクリックします.
    • Linux 用 Windows サブシステム (または Windows Subsystem for Linux)
    • 仮想マシンプラットフォーム
    • (Windows Pro エディションの場合) Hyper-V

注意:既存のチェック項目は変更しないでください.システム安定性維持のため,必要な機能のみを追加で有効化します.

WSL 2 の設定と .wslconfig ファイル

WSL 2は仮想マシン上で動作するため,特にリソースを多く消費する開発作業などでは,メモリやCPUコア数の割り当てを調整することが推奨されます.これは %UserProfile%\.wslconfig (例: C:\Users\ユーザー名\.wslconfig)ファイルで行います.

.wslconfig 設定例

[wsl2]
memory=4GB    # WSL 2が使用できる最大メモリ (例: 4GB)
swap=2GB      # スワップファイルサイズ (例: 2GB)
processors=4  # WSL 2が使用できるCPUコア数 (例: 4)

設定のポイント:

設定方法

  1. テキストエディタ(メモ帳など)で .wslconfig ファイルを %UserProfile% ディレクトリに作成または開きます.管理者権限のコマンドプロンプトで以下を実行すると便利です.
    cd %UserProfile%
    notepad .wslconfig
    
  2. メモ帳で,必要な設定を記述し,ファイルを上書き保存します.
  3. 設定を反映させるために,WSL 2 を再起動します.管理者権限のコマンドプロンプトで以下を実行します.
    wsl --shutdown
    

    次にWSLを起動した際に設定が反映されます.

Ubuntu (Linux ディストリビューション) のインストール

ここでは,WSL 2上に Ubuntu Linux ディストリビューションをインストールする手順を説明します.

  1. 管理者権限のコマンドプロンプトで,まず利用可能なLinuxディストリビューションを確認します.
    wsl --list --online
    
  2. 次に,WSLカーネルを最新の状態に更新します.これにより,インストール時の問題を未然に防ぐことができます.
    wsl --update
    
  3. Ubuntu 24.04をインストールします.(他のバージョンやディストリビューションをインストールする場合は,-d オプションに続けて一覧表示された名前を指定します)
    wsl --install -d Ubuntu-24.04
    

    インストール中に,Ubuntuで使用するユーザー名とパスワードの設定を求められますので,指示に従って入力してください.これらはLinux環境内で使用します.

基本的な使い方: bash と wsl コマンド

bashコマンドの使用(Linux環境の操作)

bashコマンドを実行すると,デフォルトに設定されているLinuxディストリビューションのシェル(Bash)が起動し,Linuxコマンドを実行できます.通常は,インストール時に設定したユーザー権限で起動します. exitコマンドでシェルを終了します.

bash
pwd
exit

bash -c "コマンド" の形式で,シェルを起動せずに単一のLinuxコマンドを実行することも可能です.

bash -c "pwd"

主要なLinuxコマンドについては,関連ページ「Linux基本コマンドとその活用法」を参照してください.

wslコマンドの使用(WSLシステムの管理)

ディストリビューション管理

WSL 2 のシャットダウン

実行中のすべてのWSLインスタンスを停止します.`.wslconfig` の変更を反映させる際や,動作が不安定な場合に使用します.

wsl --shutdown

ディストリビューションのエクスポート(バックアップ)とインポート(復元)

ディストリビューションの状態をtarファイルにバックアップします.

wsl --export Ubuntu-24.04 ubuntu-backup.tar

バックアップファイルから新しいディストリビューションとして復元します.

wsl --import MyUbuntu C:\WSL\MyUbuntu ubuntu-backup.tar

使用コマンドの使い分け

Ubuntu の初期設定

Ubuntuインストール後,いくつかの初期設定を行うことを推奨します.以下のコマンドはUbuntuのBashシェル内で実行します (`bash` コマンドでシェルを起動).管理者権限が必要なコマンドには `sudo` を付けます.

apt パッケージリポジトリのミラーサーバー変更 (任意)

ダウンロード速度向上のため,パッケージのダウンロード元を日本のミラーサーバーに変更します.(変更しない場合はこの手順をスキップしてください)

# /etc/apt/sources.list 内のサーバーアドレスを置換 (必要に応じて /etc/apt/sources.list.d/ubuntu.sources も確認)
sudo sed -i 's|//archive.ubuntu.com|//jp.archive.ubuntu.com|g' /etc/apt/sources.list
sudo sed -i 's|//security.ubuntu.com|//jp.archive.ubuntu.com|g' /etc/apt/sources.list

(注意: `sed`コマンドは強力なため,実行前に/etc/apt/sources.listのバックアップを取ることを推奨します.例: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

パッケージリストの更新とアップグレード

システムを最新の状態に保ちます.

sudo apt update
sudo apt -yV upgrade
# オプション: ディストリビューション全体のアップグレード (カーネル等も更新される場合がある)
sudo apt -yV dist-upgrade

開発環境のセットアップ例 (C/C++/Python)

ここでは例として,C/C++およびPythonの基本的な開発環境をUbuntu上にインストールし,簡単な動作確認を行います.コマンドはUbuntuのBashシェル内で実行します.

必要なパッケージのインストール

C/C++コンパイラ (gcc, g++),makeツール,Python3開発ヘッダ,pipなどをインストールします.

sudo apt -y install build-essential python3-dev python3-pip wget ca-certificates

Cコンパイラ (gcc) の動作確認

テキストエディタ(例: nano)を使って簡単なCプログラムを作成します.

nano hello.c

エディタが開いたら,以下の内容を入力または貼り付けます.

#include
int main() {
    printf("Hello, World!\n");
    printf("sizeof(size_t)=%ld\n", sizeof(size_t));
    return 0;
}

Ctrl+O を押し,Enterキーでファイルを保存します.その後 Ctrl+Xnano を終了します.

作成したプログラムをコンパイルして実行します.

gcc -o hello hello.c
./hello

以下のような出力が表示されれば成功です.

Hello, World!
sizeof(size_t)=8

Python 3 の動作確認

Python 3 のバージョンを確認し,簡単なコードを実行してみます.

python3 --version
python3 -c 'print("Hello, Python!")'

以下のような出力が表示されれば成功です.

Python 3.x.y
Hello, Python!

ネットワーク設定 (ポートフォワーディング・ファイアウォール)

WSL 2内で起動したサーバー(例: Webサーバー)にWindows側や他のPCからアクセスするには,ポートフォワーディングとファイアウォールの設定が必要になる場合があります.

ポートフォワーディングの設定

  1. WSL 2のIPアドレス確認
    まず,UbuntuのBashシェル内でWSL 2のIPアドレスを確認します.
    ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1
    

    注意:WSL 2のIPアドレスは,WSLの再起動などで変更される可能性があります.固定化する方法もありますが,ここでは基本的な設定手順を示します.接続できなくなった場合は再度IPアドレスを確認してください.

  2. Windowsでポートフォワーディング設定
    次に,管理者権限のコマンドプロンプト(またはPowerShell)で,Windowsのポートフォワーディングを設定します.以下の例では,Windowsの80番ポートへのアクセスを,手順1で確認したWSL 2のIPアドレスの80番ポートに転送します.
    netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=<WSL2のIPアドレス>
    

    <WSL2のIPアドレス> は,手順1で確認した実際のIPアドレスに置き換えてください.

    設定を削除する場合は,以下のコマンドを実行します.

    netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0
    

目的と必要性:

ファイアウォール設定

Windows Defender ファイアウォールが有効な場合,WSL 2への着信接続を許可するルールを追加する必要があります.管理者権限のPowerShellで以下のコマンドを実行します.(例: 80番ポートへのTCP接続を許可する場合)

New-NetFirewallRule -DisplayName "WSL 2 Inbound Port 80" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80

-DisplayName は任意の分かりやすい名前,-LocalPort には許可したいポート番号を指定してください.特定のインターフェース (vEthernet (WSL)) に限定するより詳細な設定も可能ですが,ここではポート番号に基づく基本的な許可ルールを示します.

目的と必要性:

トラブルシューティング

BIOS/UEFI 設定の確認

WSL 2はハードウェア仮想化支援機能を利用します.PCによっては,この機能がBIOS/UEFI設定で無効になっている場合があります.WSL 2のインストールや起動に問題がある場合は,まず以下の設定が有効になっているか確認してください(名称はマザーボードメーカーにより異なる場合があります).

目的と必要性:

BIOS/UEFIメニューへのアクセス方法はPCによって異なりますが,以下のコマンドを管理者権限のコマンドプロンプトで実行すると,再起動後にBIOS/UEFI設定画面に入れる場合があります.

shutdown /r /fw /t 0

コマンドの説明:/r(再起動),/fw(ファームウェアUIへ移行),/t 0(即時実行).

CPUの仮想化機能サポート状況確認 (Windows)

Windows上でCPUが仮想化機能をサポートし,有効になっているかを確認するには,管理者権限のコマンドプロンプトで以下のPowerShellコマンドを実行します.

powershell -c "Get-CimInstance -ClassName Win32_Processor | Select-Object Name, VirtualizationFirmwareEnabled, SecondLevelAddressTranslationExtensions"

実行結果例:

確認ポイント:

目的と必要性:

WSLおよびディストリビューション関連の問題

bashコマンド関連の問題

WSLgによるGUIアプリの利用 (Windows 11)

Windows 11ではWSLg (WSL GUI) 機能が組み込まれており,特別な設定なしにWSL 2上のLinux GUIアプリケーションを利用できます.

例えば,UbuntuにGUIテキストエディタ gedit をインストールすれば,Windowsのスタートメニューから直接起動したり,Ubuntuのターミナルから gedit コマンドを実行したりすることで,Windows上にgeditのウィンドウが表示されます.

UbuntuのBashシェルで以下を実行してgeditをインストールします.

sudo apt update
sudo apt install gedit -y

インストール後,ターミナルで以下を実行するとgeditが起動します.

gedit

WSLgの詳細については,公式リポジトリ ( https://github.com/microsoft/wslg ) を参照してください.