• Windows Subystem for Linux ガイド 基本編

    写真01: Windows Subsystem for Linux(WSL)は、Windows 10/11の中でLinuxを動作させるための仕組み

この記事では、Windows Subsystem for Linux(以下WSLと表記する)のインストールから基本的な設定までを解説する。なお、記事の読者としては、ある程度Windowsを使い慣れていることを想定するが、必ずしもLinuxのコマンドになれているとは限らないレベルを想定している。

WSLの基本的なこと

WSLとは、Windows 10/11の中でLinuxのアプリケーションを実行する仕組みだ。これを利用することで、Windowsの中でLinuxが実行可能になる。また、Windows 11からは、コンソールアプリケーションだけでなく、Linux GUIアプリケーションの利用も可能になっている。現在サポート期間にあるWindows10では、エディションやハードウェアの違いに関係なくWSLが動作する。

以後の話を円滑にすすめるため、ここで、記事中で使う用語について確認しておくことにする。(表01)にWSL関連の用語をまとめたので適宜参照してほしい。

  • ■表01

WSLには、WSL1とWSL2がある。細かな違いなどについては後述するが、双方にメリットがあり、Linux環境の利用方法などによって使い分けする。本記事では、WSLという用語は、WSL1とWSL2を合わせたWindows Subsystem for Linuxの総称として利用する。WSLは、Windows10/11の中で動作するため、WSLからみてWindows側を「Win32側」と呼び、逆を「WSL側」と呼ぶ。WSLとWindowsは完全に分離されているわけではなく、WSL内からWindowsのプログラムを起動することもできるし、Windows側からWSL側のコマンドを起動することもできる。コマンドラインなら、Win32側コマンドとWSL側のコマンドをパイプ記号でつないで連続処理させることも可能だ。

また、重要な点として、WSL側(Linux)では、ほぼすべての場面で、大文字小文字が区別されることには十分注意されたい。Win32側では、ファイル名やコマンド名などで大文字小文字を区別しないため、区別をあまり意識することがないが、Linux側では、厳密に区別されることに注意が必要だ。

WSLで利用するディストリビューションを選択する

Linuxは、Linuxカーネルと、さまざまなオープンソースソフトウェアを組み合わせ、オペレーティングシステムとして利用できる状態にした「ディストリビューション」という形態で配布が行われており、Linuxといっても複数のディストリビューションがある。WSLの場合、標準的なディストリビューションをWSL向けに変更する必要があり、対応したディストリビューションがMicrosoftストアで配付されている。これらを通常のLinuxディストリビューションと区別するために、本記事ではWSLディストリビューションと呼ぶ。(表02)にMicrosoftストアで入手可能な無償のWSLディストリビューションを示す(このほかに有償のものも存在する)。

  • ■表02

どれを選べばいいのか、まったくわからない場合には、「Ubuntu」を選ぶのが無難である。Ubuntu系のWSLディストリビューションには、現在「Ubuntu」、「Ubuntu-16.04 LTS」、「Ubuntu 18.04 LTS」、「Ubuntu 20.04 LTS」があるが、LTS(Long Term Support)版は、利用するソフトウェアなどが特定の実行環境が必要になる場合などに選択するものなので、通常は選択する必要はない。なお、現時点のUbuntuは、「Ubuntu 20.04 LTS」とほぼ同等のものになっている。

WSL1とWSL2

どのWSLディストリビューションもWSL1、WSL2のどちらでも動作させることができる。ただし、WSLでは同一のWSLディストリビューションは、1つしか存在させることができないため、WSLディストリビューションは、WSL1またはWSL2のどちらかを選択しなければならない(同一のWSLディストリビューションをWSL1とWSL2の両方で動かすことはできない)。

(表03)にWSL1とWSL2の比較を示す。基本的には、利用範囲の広いWSL2を選択すればよいが、実行Linuxアプリケーションや実行環境などによりWSL1を選択するほうがよい場合がある。

  • ■表03

WSLのインストール

Windows 10 Ver.2004(20H1。May 2020 Update)以降から、WSLのインストールは、wsl.exeコマンドを使って行うことが可能になっている。一般向けのWindows 10では、すでにVer.2004以前のものはサービスが終了しているため、現在利用できるWindows 10/11では、wsl.exeコマンドでのインストールが可能である。ここでは、その前提でインストール方法を解説する。また、wsl.exeのコマンドライン書式を(表04)に示す。

  • ■表04

インストールは、以下のコマンドで行う。 なお、「-d」オプション以下を省略すると、Ubuntuを既定のWSLディストリビューションとしてインストールする。


wsl.exe --install -d ディストリビューション名

たとえば、Ubuntuをディストリビューションとして利用する場合には、「wsl.exe --install -d Ubuntu」などと実行する。なお、このコマンドは、初回のみ、WSLのインストールを行い、以後は、WSLディストリビューションのインストールコマンドとして利用できる。

コマンドでインストール可能なディストリビューションは、以下のコマンドで確認できる。


wsl.exe -l --online

原稿執筆時点では、上記のコマンドで、8つのディストリビューションが表示される(写真02)。ただし、WSLディストリビューションのインストールは、Microsoftストアからも行うことができるが、Microsoftストアに表示されるWSLディストリビューションと上記コマンドの結果は若干異なっている。たとえば、openSUSE Leap 42は、コマンドには表示されるが、Microsoftストアには表示されない。逆に、Alpine Linuxは、Microsoftストアには表示されるが、コマンドでは表示されない。

  • 写真02: Linuxには、複数のディストリビューションがあり、WSLでは、ディストリビューションを複数インストールすることができる。コマンドラインのwsl.exeからインストールできるディストリビューションは8つ。このほか、Microsoftストアからインストールできるものもある

WSLディストリビューションのインストールが開始されると、コンソールウィンドウが開き、ユーザー名の入力が求められる。これは、ディストリビューション内で利用するLinuxのユーザー名である。特にWin32側のユーザー名と同じにする必要もないので、アルファベットの小文字または数字(2文字目以降)を使った簡単なものにする(あとで変更も可能)。ユーザー名やパスワードに利用できる文字は、ディストリビューションに依存する(正確にはディストリビューションが採用するユーザー追加プログラムに依存)。

次にパスワードを設定する。このパスワードも、管理者権限が必要なコマンドなどで利用するだけなので、覚えやすく打ちやすいものにしておく。ここでもアルファベットおよび数字を使ったパスワードがお勧めである。設定が終了すると、Linuxのプロンプトが表示されて、WSLが利用可能になる。

なお、ここで、WSLの終了に関して注意しておく。WSLは、ターミナルウィンドウを閉じることでも終了させることができる。WSL自体はこれで問題が出ないように作られているが、内部で動作しているプログラムから見ると、突然システムが終了することに相当する。このため、できるだけbashなどのシェルプロンプトが出ている状態でexitコマンドなどを使ってWSLを終了させることが望ましい。これは、wsl.exeの--shutdownや--terminateオプションを使うときも同様である。

Windows11では、MicrosoftストアからWSLのプレビュー版をインストールすることが可能になっている。ただし、これはあくまでも「プレビュー版」であり、日常的な利用を想定した「安定版」ではないことに注意を願いたい。この記事では、Windows 10/11とともにインストールされる安定版のWSLを前提としている。

WSLディストリビューションの基本設定

WSLディストリビューションをインストールすれば、基本的にWSLは利用できるようになるが、インストールされた直後のWSLディストリビューションは残念ながら「素」の状態だ。そこで、最低限の設定を行うことにする。

最低限必要なものは、日本語化(日本語ロケールの設定)である。ロケールとは言語と地域に関連する表記方法などを登録した情報でLinuxでは多くの場合ロケールデータベースに登録され、アプリケーションがこれを利用する。ロケールを日本語用とすることで対応アプリケーションが日本語で表示を行うようになる(ロケールに対応しないアプリケーションも存在する)。

ロケールの設定方法などについては、ディストリビューションごとに違いがある。WSLディストリビューションでは、パッケージマネージャーに独自のapkを使うalpine Linuxを除くと、dpkg系のUbuntu、Debianなどとrpm系を使うSUSE系に分かれる(前掲の表02を参照)。

日本語のロケールがあるかどうか以下のコマンドで判断できる(写真03)。


locale -a
  • 写真03: WSLディストリビューションによっては初期状態で日本語のロケールに対応していないことがある。利用できるロケールを調べるには“locale -a”コマンドを使う

ただし、大量の出力があった場合には、以下のコマンドを使って、“ja_JP”を含む行のみを取り出す。


locale -a | grep ja_JP

ここで「ja_JP.utf8」(ロケール情報ファイル名。後述の表記方法とは若干違う点に注意)が表示されれば、ロケールデータベースを更新する必要はない。筆者が調べた範囲ではSUSE系のWSLディストビューションはすでに登録が済んでいた。

これに対してdpkgを使うWSLディストリビューションは、日本語ロケールを作成してロケールデータベースを更新する必要がある。Ubuntu系なら日本語用の「language-pack-ja」をインストールすることで、一部のコマンドのメッセージを日本語化でき、日本語用のロケール“ja_JP.utf8”をインストールできる。それには以下のコマンドを実行する。


sudo apt update
sudo apt install language-pack-ja

debianなどでは、以下のコマンドを起動し日本語ロケールをデータベースに登録する(Ubuntuでもこの方法が選択できる)。


sudo dpkg-reconfigure locales

起動するとロケール設定画面(写真04)が開くので、タブキーとカーソルキーで項目を選択、エンターキーで実行する。ここでリストから「jaJP.UTF-8 UTF-8」(ロケールの表記方法)を選択してエンターキーで実行し、次の画面でも「jaJP.UTF-8」を選択して、エンターキーで設定を完了する。

  • 写真04: dpkg-reconfigure localesでロケールをシステムに登録できる。このプログラムでは、カーソルキー(移動)やタブ(ボタン選択)、エンターキー(実行、選択)などが利用できる。これで日本語のロケールを登録することも可能

ほとんどのディストリビューション(alpineを除く)で日本語のロケールが登録されたかどうかは、


locale -a

を実行して「ja_JP.utf8」(ロケール定義のファイル名)が表示されるかどうかで確認できる(写真05)。また、「locale」コマンドを引数なしで実行すると現在のロケールを表示する。

  • 写真05: ロケールの登録が完了すると“locale -a”に「ja_JP.uft8」が表示されるようになる

これで、準備ができたので、ユーザーの日本語のロケールを設定する。基本的には環境変数“LANG”に日本語ロケールの標準表記である「ja_JP.UTF-8」を設定する。

それには、ユーザーのホームディレクトリにある.bashrcファイルの末尾などに以下のコマンドを追加する。Linuxのエディタになれていない場合には、nanoエディタを使うといいだろう(写真06)。SUSE系は標準では搭載されていないので、以下のコマンドでインストールしておく。


sudo zypper install nano
  • 写真06: viやemacsなどのLinuxのエディタになれていない場合には、nanoエディターを使うとわかりやすい。nanoはメモ帳のように打った文字がその場に挿入されていくエディタ。カーソルキーとコントロールキーで操作する

nano エディターは、Windowsのメモ帳などと同じく、文字が常に挿入モードで入力できる。また、コントロールキーを使ったコマンドで制御を行う。


nano ~/.bashrc

として起動し、ファイルの末尾に


export LANG=ja_JP.UTF-8

という行を追加する。最後にCtrl+Xを押し、ファイル保存の確認にYと答え、ファイル名の入力待ちではエンターキーで実行する。コマンドプロンプトに戻ったら以下のコマンドを実行して.bashrcの内容を反映させる。


source ~/.bashrc

Ubuntu系のディストリビューションは、標準でオンラインマニュアルがインストールされるので、日本語のページを追加しておくと便利だ。


sudo apt update
sudo apt install manpages-ja

これで、bashなどのマニュアルページが日本語化された。debianの場合には、manコマンド自体がインストールされていないため、上記コマンドの2行目を


sudo apt install man-db man-pages manpages-ja

とする。

SUSE系も標準ではmanコマンドがインストールされていないため、以下のコマンドを使う。


sudo zypper lu
sudo zypper install man man-pages man-pages-ja

これで、bashなど主要なコマンドの日本語マニュアルが表示できるようになる(写真07)。manコマンドに慣れてくると自分でコマンドを探して使いこなせるようになる。

  • 写真07: ロケールを設定し、日本語manページを登録すると主要なコマンドのオンラインマニュアルを日本語で表示できるようになる

WSLを使うことで、Windows 10/11で簡単にLinuxを使えるようになる。マシンを用意してLinuxをインストールするよりも簡単で、Windows側のコマンドと連携して処理を行わせることも可能。今回は、利用するのに最低限必要な設定を解説したが、今後、もう少し詳細な設定なども解説していきたい。