WSL 2 に PHP と JavaScript の開発環境を作る方法

この記事は最終更新日から 1年以上 が経過しています。

Windows 上の Docker を高速化するためには WSL 2 を使うと良いというのは、以前の記事「Windows の Docker 環境を高速化する方法」で書きました。 そこで、今回はその WSL 2 上に PHP と JavaScript の開発環境を作る方法を、備忘録としてメモしておきます。 WSL 2 の使い方がわからないという方は、まずは「WSL(Windows Subsystem for Linux)の使い方」を参考にしてください。

どのディストリビューションを使用するか

まずはどのディストリビューションを使用して開発環境を作ると良いのか考えましょう。

WSL 2 でインストールできる有効なディストリビューションの一覧を表示するには、 wslコマンドに -l オプションと -o オプションを付けて使用します。

wsl -l -o
出力内容
The following is a list of valid distributions that can be installed.
Install using 'wsl.exe --install <Distro>'.

NAME               FRIENDLY NAME
Ubuntu             Ubuntu
Debian             Debian GNU/Linux
kali-linux         Kali Linux Rolling
SLES-12            SUSE Linux Enterprise Server v12
SLES-15            SUSE Linux Enterprise Server v15
Ubuntu-18.04       Ubuntu 18.04 LTS
Ubuntu-20.04       Ubuntu 20.04 LTS
Ubuntu-22.04       Ubuntu 22.04 LTS
OracleLinux_8_5    Oracle Linux 8.5
OracleLinux_7_9    Oracle Linux 7.9

インストールできるディストリビューションはいろいろありますが、個人的には Ubuntu がオススメです。

Debian なら余計なものが入ってないからスッキリしてて良いじゃないかと思うかもしれませんが、 よく使いそうなコマンドやエイリアス(例えば、llcurlwgetsshscp など)が最初から入っていないため、 それらをインストールしたり設定したりするのが地味にメンドクサイです。 余計なものは入っていないが、必要なものも入っていないという感じです。 その点 Ubuntu だと最初からいろいろコマンドが入ってるので楽です。 Ubuntu なら最初から gitpython も入ってます。 Ubuntu は Debian を使いやすくしてあるディストリビューションなので、当然と言えば当然なのかもですね。

また、Ubuntu の場合は、デフォルトでバージョン番号付きの安定版 "Ubuntu-18.04"、"Ubuntu-20.04"、"Ubuntu-22.04" も別途インストールして使用できるため、複数の環境を使いたくなっても困りません。 ちなみにバージョン番号のついてない "Ubuntu" は現行の安定版で、新しい安定版がリリースされたら、そのバージョンに更新されるようです。 バージョン番号から推測すると、おそらく次は 24.04(つまり2024年の4月)ですかね。 現状では、バージョン番号のついてない "Ubuntu" は 22.04 です。 つまり、"Ubuntu" と "Ubuntu-22.04" はほぼ同じものということになります。 何故か Ubuntu だけ同じ環境が2つ使えるみたいな状態なので、この2つのどちらかを使うのが良いと思います。

ということで以降、この記事では、Ubuntu の使用を前提として説明していきます。 他のディストリビューションの場合は、手順が異なることがありますので注意してください。

apt を最新化する

Ubuntu のパッケージ管理ツールは apt です。 なのでまずは apt を最新化しましょう。 最新化するには、apt update コマンドと apt upgrade コマンドの2つを使用します。

apt update コマンドは、インストール可能なパッケージの"一覧"を最新化します。 最新化するのは一覧だけで、パッケージの最新化は行われません。

apt upgrade コマンドは、パッケージ一覧を元にパッケージの最新化を行います。 こちらのコマンドを実行するとパッケージが実際に最新化されます。

なので、apt update コマンドを実行してから、apt upgrade コマンドを実行すると良いでしょう。 この2つのコマンドには、root 権限が必要ですので、sudo コマンドを使用して実行します。

パッケージの"一覧"を最新化する
sudo apt update
パッケージを最新化する
sudo apt upgrade

2つのコマンドを同時に実行したい場合は、&& で繋げて実行すると良いでしょう。

パッケージの"一覧"を最新化し、パッケージを最新化する
sudo apt update && sudo apt upgrade

WSL 2 の Ubuntu に好きなバージョンの PHP をインストールする

PHP の Composer などを CLI で実行したい場合、 Docker のコンテナに入ってそこから PHP を実行するよりも、WSL 2 の Ubuntu に PHP をインストールしてそこから実行した方が楽かもしれません。 そういった場合は、WSL 2 の Ubuntu に PHP をインストールしてみましょう。

apt で PHP をインストールするには、apt install php-cli コマンドが使用できるのですが、 残念なことに、このコマンドでは PHP のバージョンが指定できず、最新の安定版になってしまいます(現在は PHP 8.1)。

そこで、好きなバージョンの PHP をインストールできるように、apt に少し手を加えます。

apt に PHP 用のリポジトリを追加する

apt は登録されているリポジトリの中からパッケージを探して、そのパッケージをインストールするという仕組みになっています。 デフォルトの apt でいろいろなバージョンの PHP をインストールできない理由は、そのリポジトリの中に登録されていないからです。 そこで、apt に PHP 用の PPA(Personal Package Archive)を追加します。 PPA というのは、個人用のパッケージのリポジトリです。

Debian の開発者を長年(2000年からなので、つまり20年以上)やっている "Ondřej Surý" さんという方が、PHP 用のリポジトリを用意してくれています。 PPA は個人用とはいえ、"Ondřej Surý" さんのリポジトリは、ほとんど公式のようなものですので安心して大丈夫です。 このリポジトリを apt に追加すると、いろいろなバージョンの PHP をインストールすることができるようになります。

PHP 用 のリポジトリを追加するには、add-apt-repository コマンドに ppa:ondrej/php を指定します。 root 権限が必要ですので、sudo コマンドを使用して実行します。

sudo add-apt-repository ppa:ondrej/php

使用できる PHP のパッケージを確認する

PHP 用のリポジトリを追加したら、apt で使用できる PHP のパッケージが大量に増えていますので確認しましょう。

apt search ^php[0-9.]{3}

PHP をインストールする

CLI 版の PHP のパッケージ名は、"phpX.X-cli" の形式です(例:PHP 8.0 の場合は、"php8.0-cli")。 "-" が付いていないパッケージ(例:PHP 8.0 の場合は、"php8.0")は Web 版のパッケージで、Apache なども含まれているので注意してください。

パッケージをインストールするには、apt install コマンドを使用します。 root 権限が必要ですので、sudo コマンドを使用して実行します。

例:PHP 8.0(php8.0-cli パッケージ)をインストールする場合
sudo apt install php8.0-cli

インストールできたか確認する

PHP が1つしかインストールされていない場合、 下記のコマンドを実行してバージョン番号が表示されれば、ちゃんとインストールできています。

php --version

複数のバージョンの PHP がインストールされている場合、 下記のコマンドを実行してバージョン番号が表示されれば、ちゃんとインストールできています。

コマンド名が php ではなく、php8.0 となっていることに注目してください。 これは、複数のバージョンの PHP がインストールされている場合、php コマンドの向き先を変えられるようになっているためです。 例えば、php コマンドの向き先を、php8.0 コマンドに変えると PHP 8.0 が使用され、php8.1 コマンドに変えると PHP 8.1 が使用されるといった感じです。 php コマンドの向き先を変える方法は後述します。

例:PHP 8.0(php8.0-cli パッケージ)の場合
php8.0 --version

使用する PHP のバージョンを切り替える

複数のバージョンの PHP をインストールしている場合、update-alternatives コマンドを使用すると、 php コマンドでどのバージョンの PHP が使用されるのかを切り替えることができます。 なお、PHP が1つしかインストールされていない場合は意味がありません。

現在の状態を確認するだけなら root 権限は必要ありませんが、 切り替える場合は root 権限が必要になりますので、sudo コマンドを使用して実行します。

"*" が付いているのが、現在使用している PHP のバージョンになります。

sudo update-alternatives --config php
出力内容
There are 3 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php8.2   82        auto mode
  1            /usr/bin/php8.0   80        manual mode
* 2            /usr/bin/php8.1   81        manual mode
  3            /usr/bin/php8.2   82        manual mode

Press  to keep the current choice[*], or type selection number:

現在使用している PHP のバージョンを確認する

現在使用している PHP のバージョンを確認するには、php コマンドに --version オプションを使用します。 --version オプション には、エイリアス(別名) -v オプションがあります。

php --version

PHP のエクステンションをインストールする

PHP のエクステンションも必要ならそれらもインストールしましょう。 PHP のエクステンションも apt のパッケージになっています。 例えば、PHP 8.0 の Intl エクステンションのパッケージ名は "php8.0-intl"、 GD エクステンションのパッケージ名は "php8.0-gd"、 MySQL エクステンションのパッケージ名は "php8.0-mysql" といった感じです。

root 権限が必要ですので、sudo コマンドを使用して実行します。

例:"php8.0-intl" と "php8.0-gd" と "php8.0-mysql" パッケージをインストールする場合
sudo apt install php8.0-intl php8.0-gd php8.0-mysql

複数のパッケージを同時にインストールする場合は、"{}" と "," を使用するとコマンドを短く書けます。 大量のパッケージをインストールする際には便利でしょう。

例:"php8.0-intl" と "php8.0-gd" と "php8.0-mysql" パッケージをインストールする場合
sudo apt install php8.0-{intl,gd,mysql}

現在の使用している PHP で、 使用できるモジュールを確認するには、php コマンドに --modules オプションを使用します。 --modules オプション には、エイリアス(別名) -m オプションがあります。

php --modules

PHP をアンストールする

複数のパッケージをインストールした場合は、それぞれパッケージごとにアンインストールしていく必要があります。 意図せず残っていたりすることがあるので、インストールされているパッケージを確認しながら作業を行いましょう。

インストールされているパッケージを確認する

現在インストールされているパッケージを確認するには、 apt list コマンドに --installed オプションを付けて実行します。

apt list --installed

パッケージをアンインストールする

パッケージをアンインストールするには、apt purge コマンドもしくは、apt remove コマンドを使用します。

apt purge コマンドは、指定したパッケージと環境設定が削除されます。

apt remove コマンドは、指定したパッケージは削除されますが、環境設定は削除されません。

--auto-remove オプションを付けると、関連するパッケージも同時に削除されます。

root 権限が必要ですので、sudo コマンドを使用して実行します。

例:PHP 8.0(php8.0-cli パッケージと、関連するパッケージ)をアンインストールする場合
sudo apt purge --auto-remove php8.0-cli

WSL 2 の Ubuntu に好きなバージョンの Node.js をインストールする

PHP と同様に、今度は WSL 2 の Ubuntu に Node.js をインストールしてみましょう。 フロントエンドの開発に Node.js はもはや欠かせない存在でしょう。

apt で Node.js をインストールするには、apt install nodejs コマンドが使用できるのですが、 残念なことに、このコマンドでは Node.js のバージョンが指定できず、少し古いバージョンになってしまいます(現在は Node.js v12.22.9)。

しかし安心してください。 WSL 2 に Node.js をインストールする手順を Microsoft がドキュメント化してくれています。 それによると Node Version Manager(nvm)を使用するのがオススメとのことです。

Node Version Manager(nvm)をインストールする

Node Version Manager(nvm)は、Node.js のバージョン管理ツールです。 nvm を使用すると、Node.js のバージョンを簡単に切り替えることができるようになります。

nvm をインストールするには、下記のコマンドを実行します。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

このコマンドを実行したら、一旦ターミナルを閉じて開きなおしてください。 nvm はシェル関数でできているらしく、それを反映させるためだと思われます。 そのため、ターミナルを開きなおすと、nvm コマンドが使用できるようになります。 下記のコマンドを実行してバージョン番号が表示されれば、ちゃんとインストールできています。

nvm --version

nvm を使用して Node.js をインストールする

nvm がインストールできたので、nvm を使用して Node.js をインストールしましょう。 nvm で Node.js をインストールするには、nvm install コマンドを使用します。

nvm で使用する Node.js のバージョンを指定する方法は、下記の3つです。

  1. 推奨版(LTS)を指定する場合は、--lts と指定します。
  2. 最新版を指定する場合は、node と指定します。
  3. 特定のバージョンを指定する場合は、そのバージョン番号を指定します。
推奨版(LTS)をインストールする場合
nvm install --lts
最新版をインストールする場合
nvm install node
特定のバージョンをインストールする場合(例:バージョン 16.0.0 の場合)
nvm install 16.0.0

現在インストールされている Node.js のバージョンの一覧を確認する

nvm では、複数のバージョンの Node.js をインストールして管理することができます。 現在インストールされている Node.js のバージョンの一覧を確認するには、nvm ls コマンドを使用します。 "->" が付いているのが、現在使用している Node.js のバージョンになります。

nvm ls
出力内容
        v16.0.0
->     v18.13.0
        v19.5.0

現在使用している Node.js のバージョンを確認する

現在使用している Node.js のバージョンを確認するには、nvm current コマンドも使用できます。

nvm current

もしくは、直接 node --version コマンド、npm --version コマンドでも良いと思います。

Node.js のバージョンを確認する場合
node --version
npm のバージョンを確認する場合
npm --version

使用する Node.js のバージョンを切り替える

使用する Node.js のバージョンを切り替えるには、nvm use コマンドを使用します。

推奨版(LTS)に切り替える場合
nvm use --lts
最新版に切り替える場合
nvm use node
特定のバージョンに切り替える場合(例:バージョン 16.0.0 の場合)
nvm use 16.0.0

Node.js をアンインストールする

nvm で Node.js をアンインストールするには、nvm uninstall コマンドを使用します。

推奨版(LTS)をアンインストールする場合
nvm uninstall --lts
最新版をアンインストールする場合
nvm uninstall node
特定のバージョンをアンインストールする場合(例:バージョン 16.0.0 の場合)
nvm uninstall 16.0.0

おまけ:WSL 2 のメモリ大量消費を防ぐ

WSL 2 を使用していると、Vmmem というプロセスがメモリを大量に消費してしまい、PC がめちゃくちゃ重くなるという現象が発生することがあります。 詳しい発生条件は良くわからないのですが、この記事を作成中にも数回発生しました。 そこで、そうならないように、WSL 2 の設定ファイルを作成し、メモリの使用量を制限しておくと良いでしょう。

WSL 2 の設定ファイルは、"C:\Users\<UserName>\.wslconfig" に作成します。 <UserName> の部分には Windows のユーザー名が入ります。 例えば、Windows のユーザー名が "hogehoge" の場合は、 "C:\Users\hogehoge\.wslconfig" というファイルに作成します。

フォーマットは ini です。 [wsl2] セクションの中の memory という項目で、メモリ使用量を制限できます。 単位は、MB もしくは GB が使用できます。

例:WSL 2 のメモリ使用量を 1GB に制限する場合
.wslconfig
[wsl2]
memory=1GB

なお、この設定ファイルが反映されるのは次の起動時です。 WSL 2 を再起動させるためには、下記のコマンドを実行します。 このコマンドを実行すると、実行中のすべてのディストリビューションがシャットダウンされるので、慎重に使用してください。

wsl --shutdown

参考サイト

関連記事

Docker は、構成を気軽に組み替えたりできるので、とても便利ですよね。Windows で Docker を使って開発している方も多いと思うのですが、個人的にはどうしても気が乗らない理由がありました。それは処理速度です。遅い。遅すぎる。めちゃくちゃ遅い。つらい。耐えられない。。。ということで調査しました。いろいろと調 ...
Windows で開発している際、動作確認のために Linux のプログラムやコマンドを動かしたいなと思うことがあります。そんな場合に便利なのが WSL(Windows Subsystem for Linux)です。WSL(Windows Subsystem for Linux)とは?WSL(Windows Subsy ...
WSL 2 を使用していると、1つのディストリビューションにつき1つの環境しか作れないように感じてしまいますが、実はそんなことはありません。WSL 2 のエクスポートとインポートの機能を使用すると、環境を丸ごとバックアップしたり、同じ環境を簡単に複製したりすることができます。複数の環境を作って動作確認したい場合などでは ...

記事検索

最新記事

人気記事

RSSフィード

お知らせ

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(Twitter) もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。