WSL(Windows Subsystem for Linux)
目次
-
- 4.1. インストールされているディストリビューションの確認
- 4.2. Linux ディストリビューションの実行
- 4.2.1. デフォルトユーザー
- 4.2.2. デフォルトディストリビューション
- 4.3. Linux ディストリビューションの停止
-
- 5.1. ディストリビューションのインストール
- 5.2. ディストリビューションのエクスポート
- 5.3. ディストリビューションのインポート
- 5.4. ディストリビューションの削除
-
- 6.1. PostgreSQL サーバーの作成
- 6.1.1. PostgreSQL のインストール
- 6.1.2. postgres ユーザーにパスワードを設定
- 6.1.3. 外部からの接続を許可
- 6.1.4. 接続確認
- 6.1.5. 外部からプログラムで接続
- 6.2. Oracle サーバーの作成
- 6.2.1. Podman のインストール
- 6.2.2. Oracle Database イメージの取得
- 6.2.3. コンテナを起動
- 6.2.4. Oralce の起動確認
- 6.2.5. 外部からプログラムで接続
- 6.1. PostgreSQL サーバーの作成
はじめに
WSL(Windows Subsystem for Linux)とは、Windows 上で Linux 環境を直接実行できる機能です。デュアルブートや従来型のフルスペックの仮想マシンを使わずに、Linux のコマンドラインツールやアプリケーションを Windows 上で利用できます。
WSL の軽量仮想マシンの特徴
- ユーザーが仮想マシンを意識する必要がない:WSL は Windows と統合されており、VM の起動・停止を手動で行う必要がありません。
- ファイルシステムの統合:Windows と Linux 間でファイルを簡単にやり取りできます。
- リソース管理が自動: WSL は必要に応じてメモリや CPU を使い、VM のように固定割り当てではありません。
- 起動が早い: 軽量 VM のため起動が早いです。
- Windows との統合: ファイルシステムがホスト OS である Windows と統合されていて、相互にファイルを参照・編集できます。
個人的には軽量であることが一番のメリットと考えています。従来型の仮想マシンで Linux 環境を構築するよりも手軽に素早く環境をセットアップできますので、開発向けに Linux 環境が必要な場合には重宝すると思います。
インストール
WSL を使用して Windows に Linux をインストールする方法
PowerShell から以下のコマンドを実行します。
wsl --install
ユーザー名とパスワードを入力すれば完了です。 以下の例ではユーザー名に korochin を入力しています。
PS C:\hoge> wsl --install
インストール中: Ubuntu
Ubuntu がインストールされました。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: korochin
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.153.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This message is shown once a day. To disable it please create the
/home/korochin/.hushlogin file.
korochin@koro-P6-I7G60:~$
WSL のファイルシステム
WSL の Linux ファイルシステムとホスト OS の Windows ファイルシステムはシームレスに統合されており、Windows エクスプローラーで Linux ファイルシステムのフォルダやファイルを閲覧したり、Windows アプリでファイルを編集することもできます。
また、Linux から Windows ファイルシステムへのアクセスも可能で、/mnt/c/
や /mnt/d/
のようにWindows のドライブがマウントされています。
Windows エクスプローラーから以下のパスで Linux システム全体のファイルが閲覧できます。
\\wsl.localhost\Ubuntu
WSL 内からは以下のコマンドで、Windows エクスプローラーでカレントディレクトリを表示できます。
explorer.exe .
Linux ファイルシステムの実体は一つの仮想ディスクファイルで以下のパスに作成されるようです。
(初回の WSL インストールで作成される Ubuntu ディストリビューションの場合)
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
ディストリビューションの起動と停止
インストールされているディストリビューションの確認
※Windows を再起動した場合、WSL の Linux は停止しています
wsl --list --verbose
または
wsl -l -v
PS C:\hoge> wsl -l -v
NAME STATE VERSION
docker-desktop Stopped 2
* Ubuntu Stopped 2
*
が付いてるものが「デフォルトのディストリビューション」になります。
Linux ディストリビューションの実行
wsl [--distribution, -d <ディストリビューション名>] [--user, -u <ユーザー名>]
--distribution, -d <ディストリビューション名>
指定されたディストリビューションを実行します。--user, -u <ユーザー名>
指定されたユーザーとして実行します。
例)
wsl --distribution Ubuntu --user korochin
wsl -d Ubuntu -u korochin
デフォルトユーザー
ユーザー名を省略すると「デフォルトユーザー」で実行されます。デフォルトユーザーは、そのディストリビューションを初めてインストールしたときに作成したユーザーになります。
wsl -d Ubuntu
PS C:\hoge> wsl -d Ubuntu
korochin@koro-P6-I7G60:/mnt/c/hoge$ whoami
korochin
デフォルトユーザーは Windows のレジストリ 1 に登録されています。デフォルトユーザーの変更はレジストリの直接修正以外に /etc/wsl.conf
に以下の行を追加する方法がありますので、こちらのほうがよいでしょう。
# /etc/wsl.conf
[user]
default=デフォルトユーザー名
デフォルトディストリビューション
ディストリビューション名を省略するとデフォルトのディストリビューションが実行されます。
wsl -u korochin
ユーザー名も省略すると「デフォルトディストリビューションをデフォルトユーザーで起動」になります。
wsl
デフォルトディストリビューションの変更方法は以下です。
wsl --set-default <ディストリビューション名>
Linux ディストリビューションの停止
以下のコマンドでディストリビューションを停止します。
ディストリビューション名は省略できません。
wsl --terminate <ディストリビューション名>
PS C:\hoge> wsl --terminate Ubuntu
この操作を正しく終了しました。
PS C:\hoge> wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
docker-desktop Stopped 2
以下のコマンドで WSL を終了します。
実行中のすべてのディストリビューションと WSL システムが終了します。
wsl --shutdown
ディストリビューションの管理
ディストリビューションのインストール
新しいディストリビューションをインストールするには以下のコマンドを使用します。
wsl --install <ディストリビューション> [--name <ディストリビューション名>] [--location <インストールフォルダ>]
例)
wsl --install Ubuntu --name Ubuntu-hoge --location D:\wsl\ubuntu-hoge
利用できるディストリビューションの一覧は wsl -l -o
で確認できます。
PS C:\hoge> wsl -l -o
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
AlmaLinux-8 AlmaLinux OS 8
AlmaLinux-9 AlmaLinux OS 9
AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10
AlmaLinux-10 AlmaLinux OS 10
Debian Debian GNU/Linux
FedoraLinux-42 Fedora Linux 42
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7
Ubuntu Ubuntu
Ubuntu-24.04 Ubuntu 24.04 LTS
archlinux Arch Linux
kali-linux Kali Linux Rolling
openSUSE-Tumbleweed openSUSE Tumbleweed
openSUSE-Leap-16.0 openSUSE Leap 16.0
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_10 Oracle Linux 8.10
OracleLinux_9_5 Oracle Linux 9.5
openSUSE-Leap-15.6 openSUSE Leap 15.6
--location
を省略した場合、%LOCALAPPDATA%\wsl
にディストリビューションごとに割り当てられた GUID でフォルダが作成され、そこにインストールされます。
--install
は毎回ディストリビューションのダウンロードが走るので、同じ環境を複数作成する場合には後述する import
を使用したほうが早いです。
ディストリビューションのエクスポート
wsl --export <ディストリビューション> <ファイル名>
でディストリビューションを tar ファイルにエクスポートします。
wsl --export Ubuntu ubuntu.tar
ディストリビューションのインポート
tar ファイルをインポートして新しいディストリビューションを作成します。
--import
の第2引数(仮想ディスクの作成先フォルダ)は省略できません。
wsl --import Ubuntu-2 D:\wsl\ubuntu-2 ubuntu.tar
--vhd
オプションを使用すると仮想ディスクファイルを直接インポートして新しいディストリビューションを作成できます。tar ファイルのインポートより早いのでディストリビューションを複製したい場合には、この方法がおすすめです。
wsl --import Ubuntu-3 D:\wsl\ubuntu-3 --vhd D:\wsl\ubuntu-2\ext4.vhdx
ディストリビューションの削除
wsl --unregister <ディストリビューション名>
ディストリビューション名は省略できません。
応用例
PostgreSQL サーバーの作成
1PostgreSQL のインストール
sudo apt update
sudo apt install postgresql
sudo service postgresql start
2postgres ユーザーにパスワードを設定
初期状態ではデータベースの postgres ユーザーにパスワードが設定されていません。
外部から接続するためにはパスワードが必要なので、パスワードを設定します。
sudo -i -u postgres psql
ALTER USER postgres WITH PASSWORD '<パスワード>';
\q
3外部からの接続を許可
pg_hba.conf を編集して外部接続時の認証方式を設定(scram-sha-256
: パスワード認証)します。
/etc/postgresql/16/main/pg_hba.conf
に以下の行を追加します。
※この設定(0.0.0.0/0)は全てのアドレスに適用される設定になるので注意してください。
host all all 0.0.0.0/0 scram-sha-256
postgresql.conf を編集して外部からの接続要求を受け付けるようにします。
/etc/postgresql/16/main/postgresql.conf
に以下の行を追加します。
※この設定は全てのアドレスからの接続を許可する設定になるので注意してください。
listen_addresses = '*'
設定を反映させるために PostgreSQL サーバーを再起動します。
sudo systemctl restart postgresql
4接続確認
仮想マシンの IP アドレスを確認します。
ip addr
例)
korochin@koro-P6-I7G60:/mnt/c/hoge$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:25:a7:cd brd ff:ff:ff:ff:ff:ff
inet 172.24.25.30/20 brd 172.24.31.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe25:a7cd/64 scope link
valid_lft forever preferred_lft forever
- lo:
10.255.255.254/32
これは WSL が内部通信に使用する特殊なアドレスです。IP アドレスとしては使用できません。 - etho:
172.24.25.30/20
172.24.25.30
が仮想マシンの IP アドレスになります。このアドレスは環境によって変わることがあります。
IP アドレスを指定して接続してみましょう。
sudo -i -u postgres psql -h 172.24.25.30 -U postgres
パスワードを入力して接続します。
ここではパスワードを postgres
としました。
korochin@koro-P6-I7G60:/mnt/c/hoge$ sudo -i -u postgres psql -h 172.24.25.30 -U postgres
Password for user postgres:
psql (16.10 (Ubuntu 16.10-0ubuntu0.24.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=#
postgres=#
のプロンプトが表示されれば接続OKです。
5外部からプログラムで接続
Windows ホストから PostgreSQL サーバーに C# のプログラムで接続します。
dotnet add package Npgsql
using Npgsql;
var connectionString = "Host=172.24.25.30;Port=5432;Username=postgres;Password=postgres;Database=hoge";
using var connection = new NpgsqlConnection(connectionString);
connection.Open();
connection.Close();
Oracle サーバーの作成
動作確認したディストリビューションは OracleLinux 9.x です。
1Podman のインストール
sudo dnf install -y podman
2Oracle Database イメージの取得
sudo podman pull container-registry.oracle.com/database/free:latest
3コンテナを起動
パスワードには強度のあるものを設定しないと起動に失敗します。
ここではパスワードを Ora23c#Hoge
にしました。
sudo podman run -d --name oracle23c \
-p 1521:1521 \
-e ORACLE_PWD=Ora23c#Hoge \
-v oracle_data:/opt/oracle/oradata \
container-registry.oracle.com/database/free:latest
4Oralce の起動確認
Podman で起動中のコンテナ oracle23c の中に bash シェルで入ります。
podman exec -it oracle23c bash
sqlplus で接続します。
sqlplus system/Ora23c#Hoge@localhost:1521/FREE
以下のようなプロンプトが表示されればOKです。
SQL*Plus: Release 23.0.0.0.0 - Production on Mon Oct 13 07:30:43 2025
Version 23.9.0.25.07
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Last Successful login time: Mon Sep 22 2025 06:26:57 +00:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.9.0.25.07
SQL>
5外部からプログラムで接続
Windows ホストから Oracle サーバーに C# のプログラムで接続します。
dotnet add package Oracle.ManagedDataAccess.Core
using Oracle.ManagedDataAccess.Client;
var connectionString = "User Id=system;Password=Ora23c#Hoge;Data Source=172.24.25.30:1521/FREE;";
using var connection = new OracleConnection(connectionString);
connection.Open();
connection.Close();
参考資料
公式:Windows Subsystem for Linux に関するドキュメント
脚注
-
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss
内にディストリビューションごとに GUID が割り当てられていて、DefaultUid の値がデフォルトユーザーのUID(通常は1000)です。↩