WindowsのWSL(Windows Subsystem for Linux)でUbuntuを動かす場合、実際には開発用途などで使うことが多い。Visual Studio CodeでWebアプリケーションの開発を行い、WebサーバをUbuntuで動かすといったケースだ。

今回はそうしたケースの基本として、UbuntuでWebサーバを動かしてWindowsからアクセスする場合のとっかかりを紹介する。この辺りを押さえておくと、いろいろ応用が効くようになる。

Ubuntuを起動

Ubuntuを起動する。スタートメニューから「Ubuntu on Windows」を選択すればよい。

  • スタートメニューから「Ubuntu」を起動

    スタートメニューから「Ubuntu」を起動

  • Ubuntu / Windows Terminal

    Ubuntu / Windows Terminal

「Ubuntu on Windows」を選択すると、上のようなターミナルアプリケーションが起動してくる。ここでUbuntuのコマンドを実行する。

ローカルにWebサーバがほしい

まずは、何も考えずにWebブラウザから「http://127.0.0.1/」にアクセスする。WindowsでもUbuntuでもWebサーバを運用していなければ、次のようにWebブラウザにはエラーが表示される。

  • http://127.0.0.1/にアクセスしてエラーが表示されたサンプル

    http://127.0.0.1/にアクセスしてエラーが表示されたサンプル

Windowsで直接Webサーバを運用すると、上記のアクセスによりWebページが表示されるようになる。これがWSLで動作するUbuntuにおいても適用される仕組みになっており、UbuntuでWebサーバを走らせておくと、「http://127.0.0.1/」のようにローカルにアクセスする方法でUbuntu上のWebサーバにアクセスできる。これがなかなかに便利で強力だ。

Webサーバのインストールと実行

今回は、Ubuntuで動かしているWebサーバにWindowsからアクセスできることを確認してみよう。まず、次のようにaptコマンドを実行してWebサーバをインストールする。インストールするWebサーバはなんでもよいのだが、ここではnginxをインストールして試用する。

Ubuntu on WSLにWebサーバ(nginx)をインストール

sudo apt install nginx
  • インストール実行中

    インストール実行中

Webサーバはインストールしただけでは動作しない。本来は設定を行うのだが、最初はデフォルトのままでよいと思う。まず、次のようにserviceコマンド経由でインストールしたnginxを起動する。

Webサーバ(nginx)を起動

sudo service nginx start

Webサーバ(nginx)を起動したあとで、WindowsからWebブラウザで「http://127.0.0.1/」にアクセスする。今度は次のようにエラーにならずにコンテンツが表示されることを確認できる。

  • http://127.0.0.1/にアクセスしてコンテンツが表示されたサンプル

    http://127.0.0.1/にアクセスしてコンテンツが表示されたサンプル

起動したWebサーバ(nginx)は次のコマンドで終了することができる。

Webサーバ(nginx)を終了

sudo service nginx stop

試しに、次のようにWSLで動作しているUbuntuを一旦完全に終了(シャットダウン)してみる。

WSLで動作するUbuntuをシャットダウンするサンプル

wsl --shutdown

この状態で、先ほどと同じようにWebブラウザからWebサーバにアクセスすると次のようになる。

  • http://127.0.0.1/にアクセスしてエラーが表示されたサンプル

    http://127.0.0.1/にアクセスしてエラーが表示されたサンプル

当然ながら、Webサーバが動作していないのでアクセスはエラーになる。

ここでポイントとなるのは、仮想環境で動作しているUbuntu上のWebサーバにアクセスするにあたって、Windowsのローカルを指し示す「127.0.0.1」というIPアドレスが使えている点にある。

通常、仮想環境にはそれぞれ個別のIPアドレスが割り振られることが多く、WindowsからはそうしたIPアドレスを使ったアクセスが行われる。WSL (正確にはWSL verion 2)も仮想環境でLinuxを動作させる技術なので同じ状況になるのだが、WSLではこの部分のアクセスが「127.0.0.1」というローカルアドレスで行えるようになっている。まるでWindowsで直接動作しているかのように利用できる。

Linuxのサーバがローカルで動いているかのような挙動が便利

デスクトップ(ワークステーション)として使われることの多いWindowsに対し、Linuxはサーバを運用するオペレーティングシステムや、アプライアンスやIoTデバイスのオペレーティングシステムとして使われることが多い。さまざまなサーバを動作させることができ、インストールもセットアップも簡単で、提供されているドキュメントやナレッジ集も多い。

先ほど示した例のように、WSLで動作するUbuntuで動作するサーバは、Windowsで直接動いているかのように振る舞うことができる。これはUbuntu/WSLを利用する大きな利点だ。これまでは仮想環境であったり物理マシンにLinuxサーバをセットアップしておく必要があったが、Ubuntu/WSLであればローカルの環境で同じことが行える。

参考