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%ディレクトリに作成または開く。管理者権限のコマンドプロンプト(手順:Windowsキーまたはスタートメニューで「cmd」と入力し、右クリックメニューなどから「管理者として実行」を選択)で以下を実行すると便利である。
    cd %UserProfile%
    notepad .wslconfig
    
  2. メモ帳で、必要な設定を記述し、ファイルを上書き保存する。
  3. 設定を反映させるために、WSL 2を再起動する。管理者権限のコマンドプロンプト(手順:Windowsキーまたはスタートメニューで「cmd」と入力し、右クリックメニューなどから「管理者として実行」を選択)で以下を実行する。
    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 )を参照のこと。