はじめに

編集

WindowsでLinuxの機能を活用できる環境「Windows Subsystem for Linux」(WSL)をご存知でしょうか。 WSLを使えば、WindowsとLinuxの長所を組み合わせて、新しい可能性が広がります。

本書では、WSLの導入からさまざまな活用方法まで、WSLの基礎から応用まで幅広く解説します。 WSLにはバージョン1(WSL1)とバージョン2(WSL2)の2つがあり、本書ではその両方をカバーしています。

WSLの歴史

編集

MicrosoftはWSLのバージョン1(WSL1)を2016年にWindows 10にてリリースしました。WSL1はWindows上にLinux互換の実行環境を提供し、LinuxコマンドラインツールやスクリプトをWindowsで直接実行できるようになりました。

その後2019年には、WSLのバージョン2(WSL2)が公開されました。WSL2はLinux用の本物のカーネルを仮想マシン上で実行するため、WSL1に比べてパフォーマンスが大幅に向上し、より多くのLinux機能に完全にアクセスできるようになりました。

WSL1とWSL2の違い

編集

WSL1とWSL2には以下のような主な違いがあります。

  • WSL2はLinuxカーネルを実行し、WSL1よりもはるかに高いパフォーマンスを発揮
  • WSL2ではDockerデスクトップなどの本物のLinuxアプリケーションを直接実行できる
  • WSL2ではGPUアクセラレーションがサポートされている
  • WSL2ではLinuxのファイルシステムがマウントされるため、パーミッション管理が容易

WSL2は新しいバージョンですが、あくまでWSL1の上位互換です。そのため、WSL1の経験があれば、WSL2を使い始めるのも簡単です。

本書の構成

編集

本書では、WSL1とWSL2の双方をカバーしています。WSL1編WSL2編に分かれており、必要に応じてWSL1編からでも、WSL2編からでもお読みいただけます。基礎的な操作はほぼ共通していますので、一方を先に読んで徐々に他方の内容を学んでいくことも可能です。

WSL1編とWSL2編の後には、共通の参考情報として用語集やコマンドリファレンスなども掲載しています。

以降、WSLの導入から様々なユースケースまでを、豊富な実例を交えてわかりやすく解説していきます。WindowsユーザーにとってIdemなLinux環境が実現できるWSLの面白さと可能性を十分に感じていただけると思います。

さあ、WSLの新しい世界へ足を踏み入れましょう!

WSL1編

編集

はじめに

編集

Windows Subsystem for Linux (WSL1)は、Windowsの機能拡張として2016年にリリースされたLinux互換環境です。WSL1を使えば、WindowsにLinux環境を構築することができ、開発作業やシステム運用などの幅広い用途で活用できます。

WSL1はWindows上にLinuxの実行環境を提供します。LinuxのコマンドラインツールやシェルスクリプトをWindowsで直接実行できるほか、Linuxのファイルシステムをマウントしてアクセスすることも可能です。つまり、WindowsとLinuxの両方の長所を組み合わせて利用できるようになります。

WSL1を活用することで、以下のようなメリットがあります。

  • 複数のLinuxディストリビューションを簡単に実行できる
  • Windowsのツールと連携させながらLinuxの機能を活用できる
  • 複雑なデュアルブートやリモート接続の必要がない
  • パフォーマンスへの影響が小さい
  • 従来のLinuxツールやスクリプトをそのまま実行できる

一方で、WSL1にはいくつかの制限もあります。例えば、一部のLinuxシステムコールがサポートされていない、GPUアクセラレーションが利用できないなどです。

本編では、WSL1の基本的な概念から始まり、インストール手順、基本操作、WindowsとLinuxの統合、開発環境の構築などWSL1の様々な活用方法を詳しく解説します。WSL2とは異なる独自の機能や制限事項にも言及しますので、WSL1の特性を理解した上で最大限に活用できるはずです。

WSL1はWindowsにLinuxを統合する最初の試みであり、今でも使い勝手の高い環境として親しまれています。ぜひ本編を手掛かりにしてWSL1の魅力を存分に味わってみてください。

インストールとセットアップ

編集

WSL1を使い始めるための第一歩は、WindowsにWSL機能をインストールし、Linuxディストリビューションをセットアップすることです。以下の手順に従えば、WSL1環境を簡単に構築できます。

WSL機能のインストール

編集

最初にWindows 10にWSL機能をインストールする必要があります。PowerShellを管理者として開き、次のコマンドを実行します。

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

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

編集

次にMicrosoft Storeから好みのLinuxディストリビューションをインストールします。Ubuntu、openSUSE、SLES、Kali LinuxなどのディストリビューションがMicrosoft Storeで配布されています。例えばUbuntuをインストールする場合は、Microsoft Storeから「Ubuntu 20.04 LTS」を検索してインストールします。

インストール後、Ubuntuのターミナルが自動的に起動するので、Linuxユーザー名とパスワードを設定します。

WSL1の基本設定

編集

ここまでの手順でWSL1の基本的な環境は整いました。その後は、必要に応じていくつかの設定を行います。

  • Windowsの既定のLinuxディストリビューションの変更
    wsl --set-default <DistributionName>
    
  • Linux統合のWindows機能のインストール
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
  • Windows端末からLinuxを呼び出す
    wsl.exe
    

これでWSL1が使用できる状態になりました。WSL1では、Linux側のホームディレクトリはWindowsの %USERPROFILE%\AppData\Local\Packagesの中に作成されています。

今後はLinuxコマンドラインをWindowsから直接実行したり、エディタでファイルを開いたりできるようになります。また、Windowsアプリケーションもそのまま利用できます。

WSL1には制限がある一方で、開発者やエンジニアの生産性を大幅に向上させる優れた機能です。次のセクションではWSL1の具体的な活用方法やTipsを紹介しますので、ぜひ活用してみてください。

基本操作

編集

WSL1をインストールしたら、次はLinuxコマンドラインの基本操作を覚えましょう。WSL1では、WindowsのコマンドプロンプトやPowerShellからLinuxコマンドを直接実行できます。

WSLの起動と終了

編集

WSLを起動するには、コマンドプロンプトやPowerShellで次のコマンドを実行します。

wsl

WSL用の新しいコンソールウィンドウが開き、インストールしたLinuxディストリビューションのシェルが起動します。デフォルトのシェルは一般的にbashですが、zshなど他のシェルも利用可能です。

WSLを終了するには、シェルでexitと入力するか、コンソールウィンドウを閉じます。

ファイルシステムの操作

編集

WSL1ではWindowsのファイルシステムがLinux側からアクセス可能です。WindowsのドライブはLinuxの /mnt/ ディレクトリにマウントされています。例えば、C:\ドライブは/mnt/cにマウントされています。

# Windowsのドキュメントフォルダへ移動
cd /mnt/c/Users/YourUsername/Documents

WSLのLinux側のホームディレクトリは/home/YourUserNameにあり、Windowsの %USERPROFILE%\AppData\Local\Packages にマップされています。

WindowsアプリとLinuxコマンドの連携

編集

WSL1を便利に使うコツは、WindowsアプリとLinuxコマンドを組み合わせて使うことです。例えば、エクスプローラーでファイルを開き、そのパスをコピーします。次にWSLのターミナルでcdコマンドにパスを貼り付けると、そのディレクトリに簡単に移動できます。

cd 'コピーしたWindowsのパス'

WindowsのアプリからLinuxコマンドの出力を渡したり、LinuxコマンドからWindowsアプリを呼び出したりと、柔軟な使い方ができます。

パッケージ管理とアップデート

編集

WSL1ではパッケージマネージャーを使って、Linuxのソフトウェアやツールを簡単にインストールできます。DebianやUbuntuではapt、Fedoraではdnf、openSUSEではzypperなどのパッケージマネージャーを利用します。

# Debianの例
sudo apt update
sudo apt install nodejs

また、Linux側のアップデートも忘れずに実行しましょう。

# Debian のディストリビューション自体のアップデート
sudo apt dist-upgrade

WSL1では基本的なLinuxコマンドの操作ができますが、一部のシステムコールが制限されているため、注意が必要です。次のセクションではWindowsとの統合方法や、開発環境の構築について解説します。

WindowsとLinuxの統合

編集

WSL1の大きな利点の1つは、WindowsとLinuxを統合して使えることです。WindowsアプリやツールからLinuxの機能にアクセスしたり、LinuxコマンドからWindowsのリソースを活用したりできます。この統合によって、開発環境が大幅に強化されます。

ファイルシステムの共有

編集

WSL1ではWindowsのファイルシステムがLinux側にマウントされているため、WindowsとLinuxでファイルを自由に共有できます。WindowsのCドライブは /mnt/c にマウントされているので、たとえばWindowsのユーザーフォルダは /mnt/c/Users/YourUsername からアクセス可能です。

Linuxでファイルを編集し、その結果をWindowsのアプリで確認したり、WindowsのIDEでコードを書いてLinuxの実行環境でビルド・テストしたりと、様々な使い方ができます。

X Window System

編集

WindowsではGUIのLinuxアプリを直接実行することはできませんが、X Window Systemを使えばLinuxのGUIアプリをWindowsで表示することができます。X Serverとして、VcXsrv や X410がよく使われています。

X ServerをインストールしてFirewallの設定を行った後、WSL上で export DISPLAY=:0 を実行すれば、LinuxのGUIアプリをWindows上で動作させられます。IDEなどの開発ツールもLinuxからWindows側で動かせるでしょう。

クリップボードの統合

編集

WSL1ではWindowsとLinuxのクリップボードが統合されています。WindowsでCopy/Cutしたテキストは、WSL上のLinuxコマンドラインでCtrl+Shift+Vでペーストできます。逆にLinuxでCopy/Cutしたテキストは、Windowsのアプリでそのままペーストできます。

Bashの統合

編集

Windowsのコマンドプロンプトからbashを直接実行することもできます。PowerShellを使う場合は bash と入力します。コマンドプロンプトの場合は bash.exe を実行する必要があります。この機能を使えば、WindowsのコマンドラインからLinuxの豊富なコマンドツールにアクセスできるようになります。

Linuxシステムコールの制限

編集

一方で、WSL1にはいくつかの制限もあります。WSL1はWindows NTカーネルをベースにしており、一部のLinuxのシステムコールがサポートされていません。そのため、Dockerなどの一部のLinuxアプリケーションは動作しません。GPUアクセラレーションも制限されています。

このようにWSL1はWindowsとLinuxを統合しつつも、Linuxの完全な互換性は持っていません。ただし開発環境を強化するのに十分な統合機能を持っており、次のセクションでは開発環境の構築方法を解説します。

開発環境の構築

編集

WSL1を使えば、Windows上でパワフルなLinux開発環境を手軽に構築できます。WSL1にはいくつかの制限がありますが、通常の開発作業を行うのに十分な機能が備わっています。

コンパイラとツールのインストール

編集

WSL1では、Linuxのパッケージマネージャーを使ってコンパイラやツールをインストールできます。例えばDebianであれば以下のようにしてGCCやMakeなどの開発ツールを入れられます。

sudo apt update
sudo apt install build-essential

Node.js、Python、Rubyなどのスクリプト言語の実行環境や、GitやDockerなどのツールも同様の方法でインストール可能です。必要なツールを自由に揃えられるのがWSL1の強みです。

IDEの設定

編集

WSL1ではWindowsのIDEを使いつつ、コーディングやデバッグ時にLinuxの機能を活用できます。例えばVisual Studio CodeのRemote - WSLプラグインを使えば、WSL上のファイルシステムに直接アクセスしてコーディングできます。

他にもEclipseやIntelliJ IDEAなど、各種IDEにもWSL1向けの拡張機能が用意されています。WindowsのIDEとWSL1のLinux環境を統合することで、デュアルシステムのような使い勝手が得られます。

Git/GitHubの利用

編集

WSL1ではGitを簡単にインストールでき、Linuxコマンドラインからコードのプッシュ・プルを行えます。GitHubとの連携も問題ありません。WSLにGit環境を用意すれば、WindowsのGUIツールを使うよりもブランチの操作が多様にできるでしょう。

# Gitのインストール
sudo apt install git

# GitHubへのSSH接続設定
ssh-keygen
cat ~/.ssh/id_rsa.pub # 公開鍵をGitHubに登録

デバッグ環境の設定

編集

デバッグツールとしてgdb、lldb、valgrindなどをWSL上で動作させることができます。コマンドラインからデバッグ情報を確認できるほか、IDEのグラフィカルデバッガーとも連携可能です。

一部の機能に制限がありますが、基本的なデバッグ作業はWSL1上で行えます。例えばVisual Studio CodeのC/C++拡張機能を使えば、WSL1上のgdbとシームレスに連携してデバッグできます。

このようにWSL1では、Linuxの開発ツールを活用しつつWindowsのGUIアプリやIDEと連携した開発が可能です。開発言語やフレームワーク、ミドルウェアなども自由に選択でき、Windowsに閉じることなく柔軟な環境を構築できるでしょう。

次のセクションでは、WSL2との違いやWSL1の制限、トラブルシューティングなどについても解説します。

高度なトピック

編集

WSL1は便利な機能を多数備えていますが、一方でいくつかの制限も存在します。本セクションではWSL1の制限事項と、それらへの対処法や回避策について解説します。

システムコールの制限

編集

WSL1はWindowsカーネルの上に構築されているため、一部のLinuxネイティブのシステムコールが実装されていません。具体的には以下のようなものがサポートされていません。

  • Dockerを含むLinuxの仮想化機能
  • Linuxのカーネルモジュール
  • UNIX Domain Socketを含むIPC
  • ptrace()を使うアプリケーション

この制限のため、例えばDockerを直接WSL1上で実行することはできません。一方で、WSL2やVMware、VirtualBoxなどの仮想マシンを利用すれば、Dockerを動作させられます。

GPUアクセラレーションの制限

編集

WSL1ではGPUアクセラレーションが直接サポートされていません。そのため、GPUを活用した並列計算やディープラーニングなどの用途には適していません。この制限を回避するには、仮想マシンの利用やクラウドリソースの活用などの対策が必要です。

ファイルシステムのパフォーマンス

編集

Windowsファイルシステムへのアクセスにおいて、WSL1のパフォーマンスは必ずしも高くありません。頻繁な大量のファイル入出力を伴う作業では、パフォーマンスが制限となる可能性があります。

この問題を緩和するには、作業ディレクトリをWSLのLinux側のファイルシステムに移動する、アクセス量の大きいファイルをダウンロードしてWSLのLinux側に置くなどの工夫が考えられます。

WSLの再構築

編集

WSL1の環境が破損したり、メジャーアップデートの影響でWSLが動作しなくなった場合は、WSL1の再構築が必要になる場合があります。このとき、WSL上のデータはすべて失われますが、Windowsデータやユーザープロファイルはそのまま維持できます。

再構築の際は次のコマンドを実行します。

wsl --unregister <DistributionName>
rm -rf ~\AppData\Local\Packages\<DistributionName>*

これでWSLのディストリビューションがリセットされ、再度インストールして設定を行う必要があります。

WSL1にはいくつか制約がありますが、上記のような対処法を講じることで、制限の影響を最小限に留められます。WSL1の特性を理解し最大限活用することで、Windows上で高い生産性を発揮できるはずです。次のセクションでは、WSL1のベストプラクティスやTipsを紹介します。

トラブルシューティング

編集

WSL1を活用する上で、さまざまなトラブルに遭遇する可能性があります。本セクションでは、WSL1で発生しがちな典型的な問題とその対処法について解説します。

一般的なエラー

編集
  • WSLが起動しない/実行ファイルが見つからない
    • WSL機能がインストールされていることを確認する
    • Linuxディストリビューションが正しくインストールされていることを確認する
    • wsl --list --verbose でインストール済みのディストリビューションを確認する
  • パーミッション付与に失敗する
    • WSL1ではファイルシステムがメタデータを維持できないため発生する
    • wsl.exe --mkdir /tmp のようにディレクトリを再作成する
    • sudo umount /tmp && sudo mount -t drvfs D: /tmp でマウントし直す
  • ネットワークに接続できない
    • WSLのネットワークが仮想マシンモードになっていないかを確認する
    • wsl.exe --set-default-uid $(id -u) を実行してUIDを修正する
    • Windows側のファイアウォールなどのネットワーク設定を確認する

ログの確認

編集

WSL1のログは以下のパスで確認できます。

  • イベントビューアーの「Microsoft > Windows > WSL」
  • %TEMP%\wsllogs.txt

ログを見ることで、エラーの原因を特定できる場合があります。

情報の収集

編集

トラブルシューティングを行う際は、以下の情報を収集しておくとよいでしょう。

  • wsl --status の出力
  • wsl.exe --versionuname -a の出力
  • 発生している具体的な問題の再現手順

これらの情報があれば、WSLコミュニティでサポートを求めるときに役立ちます。

WSL1の再インストール

編集

それでも問題が解決しない場合は、WSL1の完全な再インストールを試す必要があります。ただし、この操作ではWSL上のすべてのデータが失われるため、あらかじめデータのバックアップを行ってください。

再インストール手順は以下の通りです。

  1. wsl --unregister <DistributionName> を実行
  2. %USERPROFILE%\AppData\Local\Packages からディストリビューションのフォルダを削除
  3. Microsoft Storeから目的のLinuxディストリビューションを再インストール
  4. 必要な設定を再度行う

WSL1の問題は上記の対処法で解決できることが多いですが、それでも解決しない場合はWSLのフォーラムやコミュニティでサポートを求めましょう。WSLの最新情報やTipsも収集でき、問題の早期解決にもつながるでしょう。

ベストプラクティスとTips

編集

WSL1を効率的に活用するためのベストプラクティスとTipsを紹介します。

WSL1の適切な用途の選定

編集

WSL1にはシステムコールの制限などいくつか制約がありますが、それでも広範な用途で活躍します。WSL1に適した代表的な使い道は次のようなものです。

  • コマンドラインツール/スクリプトの実行環境
  • 従来のLinuxベースのアプリケーションの実行
  • ウェブ開発環境の構築
  • GitHubを活用したソースコード管理
  • CIツールやビルドツールの実行環境

一方で、WSL1には以下のような制限があるため、用途を避けるべきでしょう。

  • Dockerなどの仮想化環境の実行
  • GPUアクセラレーションを必要とするワークロード
  • リアルタイム性が求められるシステム

WSL1の性能も決して高くはありません。大規模なコンパイルやデータ処理などは、WSL2やリモートの高性能サーバーなどを使う方が適切です。

LinuxとWindowsの最適な使い分け

編集

WSL1を最大限活用するには、WindowsとLinuxのリソースを賢く使い分けることが重要です。

  • ソースコード編集などはWindows IDEを使う
  • コマンドラインツール・スクリプトの実行はLinux側で行う
  • GUIアプリケーションはWindows側で実行する
  • データ編集・ファイル管理はWindows Explorerで行う
  • バックグラウンドタスクはLinux側のスクリプトで実行させる

また、Linuxの長所を最大限に活かすため、シェルのエイリアスや関数を積極的に設定してスムーズなコマンドライン操作を実現しましょう。

WSL1の設定の最適化

編集

WSL1を快適に使うためには設定の最適化も重要です。例えば以下のような項目を適切に設定することで、使いやすさが大きく向上します。

  • デフォルトのディストリビューション、ユーザー、シェル
  • Windowsファイルパスのマウント設定
  • Windowsのホスト設定(メモリ、vCPU、スワップファイル)
  • エディタやIDEのRemote接続設定
  • 自動起動、バックグラウンド実行設定

WSL1を活用する上での細かなTipsも紹介しましょう。

  • WSL上のファイルをWindowsアプリで直接開く explorer.exe .
  • pbcopyやpbpaste でクリップボードを使いこなす
  • tmuxやScreen.exeを使ってWSLのセッションを復元する
  • WSLショートカットをタスクバーに固定してすぐに起動できるようにする

このように、WSL1をカスタマイズしてプロダクティビティを最大化することができます。最後に、WSLコミュニティで最新の情報を収集し続けることが重要です。WSL1の最新ニュースや新機能については公式ブログをチェックするなどして、活用の幅を広げていきましょう。

WSL2編

編集

はじめに

編集

Windows Subsystem for Linux 2 (WSL2)は、Microsoftが2019年に公開した、LinuxをWindowsに統合する次世代の仮想化環境です。WSL2はWSL1の後継となる新しいアーキテクチャを採用し、Linuxの機能をよりネイティブに実行できるようになりました。

WSL2の最大の特徴は、LinuxカーネルとLinuxシステムコールを完全にサポートする点にあります。WSL2では、Hyper-Vを利用してLinuxカーネルを軽量な仮想マシン内で実行するため、これまでWSL1では実現できなかった機能が利用可能になります。

具体的には、以下のような機能強化が図られています。

  • 完全なシステムコールのサポートにより、ほぼすべてのLinuxアプリケーションが動作する
  • Dockerを含むLinuxの仮想化機能が利用できる
  • GPUアクセラレーションがサポートされる
  • ファイル入出力のパフォーマンスが大幅に向上

WSL2によって、WindowsマシンにLinuxの開発環境や運用環境を構築することが現実的になりました。WindowsとLinuxの長所を最大限に組み合わせられるようになったと言えるでしょう。

一方で、WSL2はHyper-Vを使う仮想化環境のため、WSL1に比べてメモリの消費量が大きくなるというトレードオフもあります。また、WSL2はWSL1の上位互換ですが、既存のWSL1環境を移行する際の注意点もあります。

本編では、WSL2の新しい機能とメリットを十分に説明しつつ、インストールからセットアップ、基本操作、高度な活用方法までを詳しく解説していきます。WSL1の経験があれば、その上にWSL2の知識を付け加えられる構成になっています。

WindowsユーザーがLinuxの環境を手軽に利用できるようになったWSL2の素晴らしさを存分にご体感いただければ幸いです。

インストールとセットアップ

編集

WSL2を使い始めるために、まずはインストールとセットアップの手順を説明します。

WSL2の要件

編集

WSL2を利用するには、以下の要件を満たす必要があります。

  • Windows
    • Windows 10
      X64
      バージョン 1903 以降 (Build 18362.1049+)
      ARM64
      バージョン 2004 以降 (Build 19041+)
    または
    • Windows 11
  • 64ビットCPU
  • 仮想マシンプラットフォーム機能が有効化されていること
  • 4GB以上の空きRAM

WSL2の有効化

編集

WSL2を使えるようにするには、PowerShellを管理者として実行し、以下のコマンドを実行します。

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

再起動が求められるので、再起動を行います。

WSL2のデフォルト設定

編集

次に、WSL2をデフォルトのバージョンとして設定します。

wsl --set-default-version 2

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

編集

Microsoft Storeから好みのLinuxディストリビューションをインストールします。WSL2に対応したディストリビューションには「WSL2に対応」と明記されています。

例えばUbuntu 22.04をインストールする場合は、ストアから「Ubuntu 22.04 LTS」を検索し、「WSL2に対応」と書かれているエントリをインストールします。

WSL2の起動とセットアップ

編集

インストール後に自動的にUbuntuが起動しない場合は、以下のコマンドで起動します。

wsl -d Ubuntu-22.04

初回起動時にLinuxのユーザー名とパスワードを設定します。

WSL2の動作確認

編集

WSL2が正しくインストールされたかは、次のコマンドで確認できます。

$ uname -r
5.15.146.1-microsoft-standard-WSL2

カーネルバージョンにWSL2が含まれていれば、WSL2で動作していることが確認できます。

これでWSL2の基本的なセットアップは完了です。WSL2の新機能を最大限に活用するには、さらにいくつかの設定を行う必要があります。次のセクションでは、そうした高度な設定方法を説明します。

WSL2を使えば、WSL1の制約を大幅に緩和しつつ、WindowsとLinuxを融合した開発環境を構築できます。この新しい仮想化環境の恩恵をフルに活用していきましょう。

lightweight utility virtual machine
WSL2では最新の仮想化技術を活用し、Linux カーネルを軽量な仮想マシン(lightweight utility virtual machine)内で実行しています。

従来の仮想マシンのイメージとは異なり、WSL2の仮想マシンは以下のような特徴を持っています。

  1. 高速な起動
    WSL2の仮想マシンは2秒以内で起動するため、待ち時間がほとんどありません。
  2. 小さなリソース消費
    WSL2は最小限のリソースのみを消費するよう最適化されています。
  3. 自動的な管理
    ユーザーが手動で仮想マシンを設定したり管理したりする必要はありません。WSL2がすべてを自動的に処理します。
  4. Windowsとのシームレスな統合
    この仮想マシンはWindows上で完全に統合されており、ユーザーにとってはWindowsアプリと同様の使い勝手が提供されます。

このように、WSL2ではLinuxカーネルの恩恵を最大限に活かしつつ、従来の仮想マシンが抱えていた使いにくさは解消されています。軽量な仮想マシンを内部で動作させることで、WSL1の制約を払拭し、パフォーマンスとLinux互換性を大幅に向上させています。

ユーザーは仮想マシン自体を意識することなく、WSL1と同様の手軽さでLinux環境を利用できます。背後ではMicrosoftが、この仮想マシン上でLinuxカーネルを適切に動作させるための最適化を行っています。

このlightweight utility virtual machineの採用により、WSL2はWSL1の上位互換としての役割を果たし、ついにWindowsでもLinuxネイティブの開発が可能になったと言えるでしょう。

基本操作

編集

WSL2のインストールとセットアップが完了したら、次はWSL2の基本操作を習得しましょう。WSL1と同様に、WindowsからLinuxコマンドを直接実行できますが、WSL2ではより多くの機能が使えます。

WSL2の起動と終了

編集

WSL2を起動するには、コマンドプロンプトやPowerShellで次のコマンドを実行します。

wsl

WSL用の新しいコンソールウィンドウが開き、インストールしたLinuxディストリビューションのシェルが起動します。デフォルトでWSL2が使われますが、特定のディストリビューションを指定して起動することもできます。

wsl -d Ubuntu-22.04

WSL2を終了するには、シェルで exit と入力するか、コンソールウィンドウを閉じます。

ファイルシステムの操作

編集

WSL2でもWindowsのファイルシステムがLinux側からアクセス可能です。WindowsのドライブはLinuxの /mnt/ ディレクトリにマウントされています。

# Windowsのドキュメントフォルダへ移動
cd /mnt/c/Users/YourUsername/Documents

WSL2のLinux側のホームディレクトリは /home/YourUserName にあり、Windowsの %USERPROFILE%/AppData/Local/Packages にマップされています。WSL1と同様の構造ですが、WSL2ではパフォーマンスが大幅に改善されています。

Linuxシステムコールのサポート

編集

WSL2はLinuxカーネルを実行しているため、ほとんどすべてのLinuxシステムコールがサポートされています。これにより、Dockerなどの仮想化ツールやGPUアクセラレーションを活用できるようになります。

# Dockerのインストール
sudo apt install docker.io

# Dockerの動作確認
sudo docker run hello-world

WSL2の機能強化

編集

WSL2では次のような機能強化が図られています。

  • GPUアクセラレーション
  • 高速ファイルシステムIOパフォーマンス
  • フルシステムコール互換性
  • 更新されたLinuxカーネル
  • Linuxの実行ファイルのマウント

これらの機能によって、WSL1よりもネイティブに近い、高パフォーマンスなLinux環境が実現しています。次のセクションでは、これらの機能を最大限活用する方法を説明します。

WSL2の基本操作はWSL1とほとんど変わりませんが、実行しているのはLinuxの本物のカーネルであり、Desktop/GUIアプリも動作するなど、多くの制限が解消されています。是非WSL2の新機能を存分に活用して、開発スタイルの変革を体感してください。

WindowsとLinuxの統合

編集

WSL2では、WindowsとLinuxの統合がさらに進化しています。WSL1と同様にWindowsのファイルシステムやクリップボードとの連携が可能ですが、さらに以下のような新機能が追加されています。

GPUアクセラレーション

編集

WSL2ではGPUアクセラレーションがサポートされ、WindowsマシンのGPUリソースをLinuxから活用できます。これにより、機械学習、画像/動画編集、3Dグラフィックス処理などGPUを活用するワークロードが可能になります。

# GPU情報の確認
nvidia-smi

# OpenCLの利用
apt install ocl-icd-opencl-dev
cp /mnt/c/Windows/System32/opencl.dll /tmp

Linuxカーネルのアップデート

編集

WSL2ではLinuxカーネルの完全なサポートが追加されたため、新しいカーネルの機能を利用できます。カーネルのアップグレードは自動的に行われるか、wsl --updateでマニュアルでアップグレード可能です。

# カーネルの更新
wsl --update

# カーネルのアップグレード確認 
uname -r

Linuxの実行ファイル 実行

編集

WSL2では、Linuxの実行ファイル(ELF)をWindowsのコマンドプロンプトやPowerShellから直接実行できます。ELFファイルがあればWindowsから呼び出すことができ、Linuxの高機能なコマンドラインツールをネイティブに活用できます。

# Linuxコマンド実行例
/mnt/c/linux-tools/bin/gcc.exe /mnt/c/source.c
/mnt/c/linux-tools/bin/ruby.exe /mnt/c/myscript.rb

X Window System

編集

WSL2ではLinuxの完全なGUIサポートが追加されました。X WindoWs Serverを設定すれば、LinuxデスクトップやGUIアプリをWindows上で動作させられます。

VcXsrvなどをインストールした後、WSL内で以下を設定します。

# X Window System 設定
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
startxfce4 & # デスクトップ環境起動例

WSLg: GPUベースのLinuxアプリサポート

編集

さらに最新のWindows Insiders Previewビルドでは、WSLgと呼ばれる新機能により、GPUベースのLinuxアプリケーションを直接Windowsデスクトップで実行できるようになります。WSL2のGPUアクセラレーション機能が大幅に強化され、従来のLinux向けグラフィカルアプリの活用が可能になります。

以上のように、WSL2ではWindowsとLinuxの統合がさらに深化しています。これにより、高度なワークロードをWindowsマシン上でスムーズに実行できるようになります。次のセクションでは、開発環境の構築について解説します。

開発環境の構築

編集

WSL2はWSL1に比べて格段に強化されたLinux互換機能を提供するため、よりネイティブに近い開発環境を構築できます。WSL2上では、Dockerを含む本格的な開発スタックの利用が可能になります。

コンパイラとツールのインストール

編集

WSL2ではWSL1と同様に、Linuxのパッケージマネージャーを使ってコンパイラやツールをインストールできます。GCC、Make、CMake、Ninja、Dockerなど、本格的な開発に必要なツールが簡単に揃えられます。

 
# Ubuntu例
sudo apt update
sudo apt install build-essential cmake ninja-build docker.io

Docker環境の構築

編集

WSL2ではDockerがネイティブにサポートされているため、Windows上でDockerコンテナを利用した開発が可能になります。WSL2上でDockerをインストールし、イメージのビルド、コンテナの起動、Docker Composeの利用などができます。

# Dockerのインストール
sudo apt install docker.io

# Docker Composeのインストール 
sudo apt install docker-compose

# イメージのビルド
docker build -t myapp .

# コンテナの実行
docker run -p 8000:80 myapp

IDE/EditorとのIntegration

編集

WSL2ではLinuxの実行ファイル(ELF)をWindowsから直接実行できるため、LinuxIDEをWindowsデスクトップで動作させることができます。Visual Studio Code、Eclipse、IntelliJ IDEAなどの人気のIDEがWSL2で利用可能です。

各IDEではWSL2向けの拡張機能やプラグインが用意されています。例えばVS Codeでは「Remote - WSL」拡張機能を使えば、WSL2上のソースコードをWindowsのVS Code UIから編集できます。

GitHubを含むクラウドサービスの活用

編集

WSL2ではGitHubを含むクラウドサービスを、WindowsやLinux デスクトップアプリと同等に活用できます。リポジトリの作成、ブランチの確認など、すべての操作がGUIとCLIの両方から行えます。

 
# GitHubへの接続設定
git config --global user.name "Your Name"
git config --global user.email you@example.com
ssh-keygen -t ed25519 -C "you@example.com"

# リポジトリの操作
git clone git@github.com:username/repo.git
code repo # VS Codeでリポジトリを開く

デバッグとテスト

編集

WSL2では、gdb、lldb、valgrindなどの本格的なデバッグ・テストツールがすべて利用可能です。これらはGUIツールからも呼び出せ、効率的なデバッグ作業が行えます。コーディングからデバッグ、テスト、リリースまでの一連の開発フローをWindows上で完結できます。

このように、WSL2では本格的な開発スタック全てが利用でき、WindowsデスクトップからLinuxネイティブの環境を活用できます。次のセクションでは、WSL2の高度な機能について解説します。

WSL2の新機能

編集

WSL2には、WSL1にはない多くの新機能が導入されています。本セクションでは、WSL2の主な新機能について解説します。

Linuxカーネルの更新

編集

WSL2ではLinuxカーネルを実行しており、Microsoft側でカーネルのアップデートが適宜リリースされます。wsl --updateを実行することで、最新のカーネルにアップグレードできます。

# WSL2のカーネルバージョン確認
$ uname -r
5.10.102.1-microsoft-standard-WSL2

# カーネルのアップグレード
$ wsl --update

新しいカーネルにアップグレードすることで、最新のLinux機能やバグフィックスが適用されます。セキュリティアップデートなども含まれるため、定期的なアップグレードが推奨されます。

GPUアクセラレーション

編集

WSL2においてGPUアクセラレーションがサポートされたことは、大きな機能強化です。WSL2上でGPUの機能を活用できるため、機械学習、画像/動画編集、3Dレンダリングなどが可能になります。

# GPUのインストール
sudo apt install nvidia-driver-515

# GPU情報の確認
nvidia-smi

# CUDA Samplesの実行
git clone https://github.com/nvidia/cuda-samples.git
cd cuda-samples/Samples/0_Introduction/moduleQuery
make
./moduleQuery

WSLg - GPUベースのLinuxアプリサポート

編集

さらに最新のWindows Insiders Previewビルドでは、WSLgと呼ばれる新機能により、GPUベースのLinuxアプリケーションをWindowsデスクトップ上で直接実行できるようになります。従来のLinuxデスクトップアプリケーションの利用が可能になります。

# Ubuntu Desktopのインストール
sudo apt install ubuntu-desktop

# Ubuntuデスクトップ環境の起動
# DISPLAY変数を適切に設定した後に実行
ubuntud

ファイル入出力の高速化

編集

WSL2ではWindows側のファイルシステムに対するファイル入出力のパフォーマンスが大幅に改善されています。WSL1と比べて最大20倍高速になる場合があります。

 
# 読み込みのベンチマーク
wsl --distribution Ubuntu --exec 'sysbench --test=fileio --file-total-size=1G cleanup'

WSLネットワーキングの強化

編集

WSL2のネットワークスタックは完全にLinux互換となり、WinsockなどのWindows APIを介さずにLinuxネイティブのネットワーク処理が可能になりました。

# ポート接続の確認
sudo apt install net-tools
netstat -antp

従来WSLではbash.exeのプロセスツリーの制限などから一部ネットワークツールが動作しませんでしたが、WSL2においてはネイティブのネットワーク処理が可能になります。

このようにWSL2では、WSL1の主な制約がほとんど解消されるとともに、LinuxをWindowsに完全に統合する新機能が数多く追加されています。GPUアクセラレーションの実現など、開発者にとってはIdemな環境が実現しつつあります。次に、そうした新機能を最大限に活用するTipsを紹介します。

Docker/Kubernetesの活用

編集

WSL2はDockerをネイティブでサポートしているため、Windows上でコンテナ仮想化の恩恵を活用できるようになりました。さらに最近ではKubernetes環境の構築もサポートされ、本格的なクラウドネイティブ開発が可能になっています。

Dockerの利用

編集

WSL2にDockerをインストールするだけで、Windowsマシン上でDockerコマンドを実行できるようになります。

# Dockerのインストール
sudo apt install docker.io

# Dockerサービスの起動
sudo service docker start

# Hello Worldコンテナの実行
sudo docker run hello-world

WSL2上のDockerは高速なファイルシステムIOとGPUアクセラレーションなども活用できます。さらに、Docker DesktopクライアントをWindowsにインストールすれば、GUIからコンテナ管理もできます。

Docker Composeの利用

編集

複数のコンテナを組み合わせた開発環境を構築する場合は、Docker Composeを活用すると便利です。yaml形式で定義したアプリケーションスタックを、1コマンドで起動できます。

# Docker Composeのインストール
sudo apt install docker-compose

# チュートリアル用Composeファイルを作成
docker-compose up -d

# 起動しているサービス一覧
docker-compose ps

Docker Composeはマイクロサービスアーキテクチャでのアプリケーション構築に適しています。WSL2上でコンテナ開発を行う場合は、Docker Composeの利用が強く推奨されます。

Kubernetes環境の構築

編集

さらに最近では、WSL2上でKubernetes環境を構築してコンテナオーケストレーションを実現できるようになりました。マイクロサービスやクラウドネイティブアプリの開発に最適です。

# KubernetesのインストールとノードのJoin
sudo apt install kubeadm 
kubeadm init
kubectl apply ...

# デプロイとサービスの作成
kubectl create -f deployment.yaml
kubectl expose deployment...

# GUIクラスタ管理ツールの利用
kubectl apply -f https://bit.ly/lens-repo

Lensなどのビジュアルツールからクラスタを管理できるほか、Azure Kubernetes ServiceやAmazon EKSなどのクラウドクラスタと統合することもできます。

このようにWSL2では、開発の最前線を行くコンテナ技術とクラウドネイティブ開発の環境が実現しています。従来Linuxマシンでのみという制約がくずれ、Windowsマシン上での本格的な活用が可能になりました。次のセクションでは、ネットワークの高度な設定に進みましょう。

ネットワーク高度設定

編集

WSL2ではネットワークのスタックがLinuxネイティブとなり、より高度なネットワーク設定や運用が可能になりました。従来WSLではネットワーク機能に制限があり、Linuxのネットワークツールが一部動作しないといった問題がありました。しかしWSL2では完全なLinux互換性が実現し、本格的なネットワーク運用が可能です。

ネットワーク構成の確認

編集

WSL2のネットワーク構成は、仮想マシンと同等のPrivate NATに基づいています。ipコマンドでIPアドレスを確認できます。

# Windows側のIPアドレス確認
ipconfig

# Linux側のIPアドレス確認
ip addr

# デフォルトゲートウェイ確認
ip route | grep default

WSL2のLinux環境は、Windowsホストマシンと同じネットワークにいるため、両者が通信可能になっています。

ファイアウォールの設定

編集

WSL2では標準のLinuxコマンドを使ってファイアウォール設定できます。UFW(Uncomplicated Firewall)などのツールを活用しましょう。

# UFWのインストールと有効化
sudo apt install ufw
sudo ufw enable

# ポート開放
sudo ufw allow 80/tcp
sudo ufw allow 3000

# ステータス確認
sudo ufw status

静的IPアドレスの割り当て

編集

必要に応じて静的IPアドレスを割り当てることもできます。WSL2はIPアドレス取得にDHCPを使っていますが、/etc/wsl.confに静的IPを設定できます。

# /etc/wsl.confの設定例
network=yourstaticIP/24 
gateway=x.x.x.x
dns=x.x.x.x

DNSサーバーの構築

編集

WSL2では本格的なDNSサーバーをセットアップすることも可能です。DNSのパケットフォワーディングなども問題なく動作します。

# Bindのインストール
sudo apt install bind9

# 設定ファイルの編集
sudo nano /etc/bind/named.conf.local
zone "example.com" { ... }

# Bindの再起動
sudo sysmtecd restart bind9

Webサーバーの公開

編集

WSL2のLinux環境からWebサーバーを公開することができ、さまざまなアプリケーションの実装や検証が可能になります。Apacheなどをインストールしてファイアウォールルールとポートフォワーディングを設定すれば公開できます。

# Apacheのインストール
sudo apt install apache2

# ホストポート8000のトラフィックをApacheにフォワーディング
socat tcp-listen:8000,reuseaddr,fork tcp:localhost:80

このように、WSL2ではLinuxのネットワーク機能を存分に活用できます。ネットワークツールやプロトコル、セキュリティ運用などを本格的に検証・評価するための環境が、Windowsマシン上に構築できるようになりました。

ネットワークに関するこれらの機能は、WSL1では実現が難しかったものです。WSL2の強力なLinux互換性により、包括的なネットワーク機能をWindowsマシンに持ち込めるようになった点は大きな進化です。

トラブルシューティング

編集

WSL2を活用する上で、さまざまなトラブルが発生する可能性があります。ここではWSL2で発生しがちな典型的な問題とその対処法について解説します。

WSL2の起動に失敗する

編集

WSL2を起動しようとすると以下のようなエラーが発生することがあります。

WslRegisterDistribution failed with error: 0x8007001f

この問題は、WSL2の仮想マシン機能が正しく有効化されていないことが原因です。以下の手順で確認・修正を行います。

  1. 仮想プラットフォームが有効化されているか確認
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform
  2. WSLの仮想マシン機能が適切に設定されているかチェック
    wsl --list --verbose
  3. もし VirtioFSが設定されていなければKernel Componentパッケージを最新化
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  4. 再起動後に再度確認

メモリ不足エラー

編集

WSL2はWSL1より多くのメモリを消費します。メモリ不足でWSL2が正常に動作しない場合は、以下の設定で最大メモリサイズの調整を行います。

# 最大メモリサイズを4GBに設定する例
wsl --shutdown
wsl --update --memory-reserve-mb 4096
wsl

コンテナ関連の問題

編集

WSL2はDocker、Kubernetes、Linuxの仮想化機能を完全にサポートしていますが、ネットワーク関連の問題が起こる可能性があります。

  • Dockerコンテナから外部ネットワークにアクセスできない
    • WSL2のIPアドレスを確認し、適切にファイアウォールを開ける
  • Kubernetesのサービスが公開できない
    • NodePortやLoadBalancerを適切に設定し、ポートフォワーディングする

ログの確認

編集

WSL2のログは以下のパスで確認できます。

  • kernel: %HOMEDRIVE%%HOMEPATH%\AppData\Local\MS-RESOURCES\KERNEL-lOGS
  • distro: %TEMP%\distrologs

ログを見ることで、問題の原因を特定できる場合があります。

WSL2の再構築

編集

それでも問題が解決しない場合は、WSL2の完全な再構築を試す必要があります。この操作ではWSL2上のすべてのデータが失われます。

wsl --unregister DISTRO_NAME
remove-item -recurse $env:USERPROFILE\AppData\Local\Packages\DISTRO_FOLDER

その後、Linuxディストリビューションを再インストールし、必要な設定を行います。

WSL2の問題は、WSL1と異なり仮想マシン関連のトラブルが発生しがちです。しかし上記の対処法で大半の問題は解決可能です。それでも解決しない場合はWSL2のフォーラムやコミュニティでサポートを求めると良いでしょう。WSL2は日々進化しており、最新情報を収集することも重要です。

ベストプラクティスとTips

編集

WSL2は革新的な機能を多数提供しますが、その機能を最大限に活用するにはいくつかの工夫が必要です。ここではWSL2を効率的に活用するためのベストプラクティスとTipsをいくつか紹介します。

WSL2の適切な用途選定

編集

WSL2は強力な機能を持ちますが、その分リソース消費も大きくなります。用途に応じて、WSL2かWSL1かを使い分けることが賢明です。

  • WSL2に適した用途
    • Docker/Kubernetes環境の構築
      • GPUを活用するワークロード(機械学習、メディア処理など)
      • システムコール制限に阻まれるLinuxアプリの実行
      • ネットワークツールの本格的な活用
  • WSL1でも十分な用途
      • コマンドラインツール・スクリプトの実行
      • ウェブ開発
      • シンプルなサーバープロセスの実行

WSL2で動作が遅い場合は、一時的にWSL1に切り替えるのも手です。

Windows/Linuxの長所活用

編集

WSL2を最大限活用するには、WindowsとLinuxの長所を適切に組み合わせることが重要です。

  • ソース編集・GUIアプリはWindowsで実行
  • コマンドラインツール・スクリプトはLinuxで実行
  • Dockerコンテナの管理はLinuxから行う
  • データ編集やリソース確認はExplorerやPerf Monitorなどを活用
  • WindowsとLinuxを呼び分ける運用でスムーズに作業

WSL2のカスタマイズ

編集

WSL2のパフォーマンスを最適化するには、以下の設定を見直すと良いでしょう。

  • 割り当てメモリサイズ(wsl --update --memory-reserve-mb)
  • 仮想プロセッサー数(wsl --update --processors)
  • スワップファイルの設定
  • オートスタート設定(wsl --set-default-user root)
  • マウントディスク設定(/etc/wsl.conf)

環境に合わせてシステムリソースを適切に割り当てると、レスポンスが改善します。

bash/zshの活用

編集

WSL2ではbash/zshのエイリアスや関数を効果的に設定すると、Linuxでの作業がより快適になります。

# エイリアスの設定例
alias gs="git status"
alias lr="ls -lAtr" 

# 関数の設定例
clonenpm() {
  git clone $1
  cd $(basename $1 .git)
  npm install
}

profileファイルなどに設定を書き込むと、毎回読み込まれるようになります。

Windowsアプリの統合

編集

GUIが重要な場面では、WindowsのGUIアプリとLinuxを統合することで作業がスムーズになります。

  • Visual Studio CodeのRemote - WSL拡張機能の利用
  • VSCodeでのポート転送設定
  • Windows TerminalやConEmuなどモダンターミナルの利用
  • Windows Explorers上でVSCodeを呼び出しできるように設定する

WSL2の最新情報収集

編集

WSL2は絶えずアップデートされている技術なので、定期的に最新情報を収集することが大切です。ドキュメントやブログ、動画コンテンツなどを活用しましょう。WSL2のフォーラムにも参加すると、コミュニティの知見が得られて有益です。

このように、WSL2を最大限に活用するにはカスタマイズと周辺ツールの有効利用が不可欠です。WindowsとLinuxの長所を組み合わせながら、自分なりのスタイルを確立していけば、WSL2の真の恩恵を享受できるはずです。

共通編

編集

用語集

編集

コマンドリファレンス

編集

関連リソース

編集