WSL 2 に PHP と JavaScript の開発環境を作る方法
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 なら余計なものが入ってないからスッキリしてて良いじゃないかと思うかもしれませんが、
よく使いそうなコマンドやエイリアス(例えば、ll
、curl
、wget
、ssh
、scp
など)が最初から入っていないため、
それらをインストールしたり設定したりするのが地味にメンドクサイです。
余計なものは入っていないが、必要なものも入っていないという感じです。
その点 Ubuntu だと最初からいろいろコマンドが入ってるので楽です。
Ubuntu なら最初から git
や python
も入ってます。
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
コマンドを使用して実行します。
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
コマンドの向き先を変える方法は後述します。
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 Pressto 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
コマンドを使用して実行します。
sudo apt install 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
コマンドを使用して実行します。
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つです。
- 推奨版(LTS)を指定する場合は、
--lts
と指定します。 - 最新版を指定する場合は、
node
と指定します。 - 特定のバージョンを指定する場合は、そのバージョン番号を指定します。
nvm install --lts
nvm install node
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 --version
npm --version
使用する Node.js のバージョンを切り替える
使用する Node.js のバージョンを切り替えるには、nvm use
コマンドを使用します。
nvm use --lts
nvm use node
nvm use 16.0.0
Node.js をアンインストールする
nvm で Node.js をアンインストールするには、nvm uninstall
コマンドを使用します。
nvm uninstall --lts
nvm uninstall node
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
が使用できます。
[wsl2] memory=1GB
なお、この設定ファイルが反映されるのは次の起動時です。 WSL 2 を再起動させるためには、下記のコマンドを実行します。 このコマンドを実行すると、実行中のすべてのディストリビューションがシャットダウンされるので、慎重に使用してください。
wsl --shutdown
参考サイト
- Ubuntu 20.04にPHPを複数インストールして切り替える方法(PPA・apt) - Qiita
- DEB.SURY.ORG
- ***** The main PPA for supported PHP versions with many PECL ext... : Ondřej Surý
- update-alternativesの使い方 - Qiita
- apt remove、purge、autoremoveコマンドの違い
- Set up Node.js on WSL 2 | Microsoft Learn
- nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
- WindowsでWSL2のプロセス「Vmmem」のメモリ使用量を制限する – helog
- Advanced settings configuration in WSL | Microsoft Learn