WSL2 + Docker Desktop + PhpStorm でPHP開発環境を作ってみる ~前編~

WSL

はじめに

PHP、Ruby、PythonなどLinuxベースの環境で動作するシステムを開発するにはLinux環境上でIDEを使って開発するのが理にかなっており、開発環境と本番環境のOSが違うことによる不具合も抑えることが出来ます。

Windows10ではLinux環境のWSL2が使えるようになりました。
カーネルもLinuxのものが使えるので、完全なLinuxが動いています。
また、Docker DesktopもWSL2対応版が正式リリースされましたので、改めて設定手順をまとめようと思います。

本記事では、現在私がメインで使っているPHP開発環境について説明します。
Docker、Git、ソースコードなどはWSL2に置き、XdebugやUnitテストをWindows側のIDEから操作します。

前編:WSL2の設定~Dockerインストール   ← いまここ
後編:PhpStormの設定

前提条件

  • 開発機はWindows10 PCとする
  • 開発環境としてDockerを利用する
  • Windows側にPHPやGitなどを入れない
  • IDEはJetBrains系のものを使う(PhpStormなど)
  • Dockerの操作はターミナルから行う

ゴール

本記事では下記の設定を行います。

  • 前編
    • WSL2の有効化
    • WSL2の環境整備
    • Docker Desktop WSL2のインストール
  • 後編
    • PhpStormのインストール
    • Xdebug、PhpUnitの設定 

環境について

今回インストールした環境について

  • ホスト
    • Windows10 Professional
      • バージョン20H2(OSビルド 19042.1151)
    • メモリ:16GB
  • WSL2
    • Ubuntu 20.04
  • Docker Desktop 3.5.2
  • IDE
    • PhpStorm 2021.2
    • (Intellij IDEAや他のJetBrainsのIDEであれば設定方法は同じと思われます)

補足:今回の手順はWindows 10 Professionalで確認しましたが、Home版でも同じ手順だと思います。

IDEをWSL2に入れる方法と比較したメリット/デメリット

以前、IDEをWSL2内にインストールして、X-Server経由で操作する方法を説明しました。

IDE含めて、環境をすべてLinux内にまとめれるので互換性が抜群です。

上記の方法と比較して、今回説明する方法の個人的なメリットは下記になります。

  • IDEの動作がもっさりしない
  • 日本語変換がWindowsのものが使える
  • WSL側のインストールが簡単(X-server系のインストール/設定が不要)
  • WSL側のメモリ割り当てを少なくできる(IDEを動かさないため)

Linux側のアプリをX-Server経由でGUI表示させるので動きが遅くなることがあります。
本体やグラボのメモリを増設すれば違うのかもしれませんが、限られた資源では難しかったです。

現在、X-server機能が標準で使えるWSLgというものがプレビュー版で公開されていますが、以前試したところ動きがもっさりしすぎていたため選択肢から外しました。

また、日本語変換がWindowsのものが使えるのが大きいです。
普段と同じ辞書が使えますし、落ちるといったトラブルもありません。

WSL2のセットアップ

WSL2のインストール

下記を参照してください。
書かれている手順に沿ってインストールします。

WSL のインストール
コマンド wsl --install を使用して Linux 用 Windows サブシステムをインストールします。 Windows コンピューター上で、好みの Linux ディストリビューションによって実行される Bash ターミナルを使用します。Ubuntu、Debian、SUSE、Kali、Fedora、Peng...

プレビュー版では「簡略化されたインストール」のようにコマンド1つでセットアップ出来るらしいですが、今回は「手動インストール」の手順に沿って行います。

インストールコマンドの実行は管理者用のPowerShellで行います。
実行方法はいくつかありますが、Windowsの検索欄から「powershell」と入力し、「管理者として実行する」を押すことで実行できます。

①「手動インストール」の項目から、下記コマンドを実行します。

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

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

②ここで一度再起動します。

③Linux カーネル更新プログラム パッケージをダウンロードしてインストールします。

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

④WSL 2 を既定のバージョンとして設定します。

wsl --set-default-version 2

WSL2が有効化されました。

⑤Linuxディストリビューションをインストールします。

バージョンの書かれていないUbuntuだと、LTSがリリースされる度に勝手にアップデートされていくようなので、バージョン付きのものをインストールしました。

インストールはMicrosoftStoreから行ってください。

Microsoft Storeが使えない環境の場合は下記ページを参考にしてディストリビューションのダウンロード、インストールを行ってください。

以前のバージョンの WSL の手動インストール手順
wsl install コマンドを使用するのではなく、古いバージョンの Windows に WSL を手動でインストールする手順について段階的に説明します。

⑥その後、インストールしたUbuntuを起動すると初期設定が始まります。

ユーザー名、パスワードを聞かれるので、入力するとセットアップ完了です。

⑦Windows Terminalのインストール

デフォルトのUbuntuターミナルでは心もとないので、Windows Terminalをインストールしました。(任意)

Microsoft Storeからインストール出来ます。

設定などはこちらが詳しいでしょうか。

Windows Terminal Tips - Qiita
Windows TerminalWindowsの新しいTerminalアプリケーション。WindowのTab化や様々な設定が可能。デフォルトでコマンドプロンプト、PowerShell、WSL、Az…

WSLの設定

①WSL2のメモリ使用量の上限を設定

公式説明によると、WSL2が使えるメモリは「Windows搭載メモリの50%」か「8GB」のどちらか少ない方だそうです。

50% of total memory on Windows or 8GB, whichever is less; on builds before 20175: 80% of your total memory on Windows

https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig

メモリ搭載量が8GBの場合は4GBが割り当てられます。

また、CPUのコア数はWindowsで使える分がすべて割当てられるようです。

もし、その制限を超えて割り当てたい、もしくは少なくしたい場合は設定ファイルを作成します。

設定ファイルはWindowsのユーザフォルダ(C:\Users\<yourUserName>)に、「.wslconfig」を作成し下記のように記載します。
(ユーザフォルダはエクスプローラーのアドレス/パス欄に「shell:UsersFilesFolder」を入力すれば開けます)

「.wslconfig」の設定例

[wsl2]
memory=4GB
processors=4

設定ファイル作成後はWSL2を再起動します。

Powershellを開いて「wsl –shutdown」を実行

参考:

WSL2の2つの設定ファイル「.wslconfig」と「wsl.conf」 (1/2)
WSL2には、2つの設定ファイルがある。1つは、win32側でWSL2全体の設定をする「.wslconfig」。もう1つは、WSLディストリビューションごとの設定をする「wsl.conf」だ。

②日本語化

ターミナルで日本語を表示すると文字化けすることがあるため、日本語化しておきます。

WSL2上で下記コマンドを実行してください。

$ sudo apt install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF8

その他ツールのインストール

①Node.js

IDEからLinterツールなどを実行するにはWSL2側にNode.jsをインストールしていたほうが都合がよいため、インストールします。

nvmを用いてインストールしました。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash
$ source $HOME/.bashrc

●Node.js(LTS)のインストール

$ nvm install --lts

● yarnのインストール
※指定したnodeのバージョン配下を指定してインストールします。

$ node -v
v14.17.4
$ nvm use 14.17.4
$ npm install -g yarn

●インストールされたことを確認

$ node -v
v14.17.4
$ npm -v
6.14.14
$ yarn -v
1.22.11

②Fish Shell

シェルにfishをインストールします。
コマンドやディレクトリ名の補完機能が便利です。
テーマ「clearance」を使っています。

また、aliasなどの設定はbashで設定しているため、.bashrcの末尾に”exec fish”を記載してbash経由で起動しています。

① fishのインストール

インストールは公式の情報を参考にしました。

$ sudo apt-add-repository ppa:fish-shell/release-3
$ sudo apt-get update
$ sudo apt-get install fish

② テーマの変更

テーマやプラグイン管理のツール「fisherman」をインストールします。(参考

$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

テーマはシンプルな「clearance」を選択しました。
以下はfish内で実行。

$ fish
> fisher install oh-my-fish/theme-clearance

③ 各種プラグインのインストール

  • bassのインストール
    fishでbashコマンドを使えるようにするためのプラグインです。
> fisher install edc/bass

fishでは、通常bashのスクリプトを動かすことはできないのですが、
bassを使うと下記のように動かすことができます。

> bass test.sh
> bass source config.sh
  • pecoのインストール

pecoは実行履歴などから絞り込み検索と、選択ができるようになるツールです。(参考)

いろいろな用途があるようですが、今回はhistoryの検索のみを設定しています。

> sudo apt install peco
> fisher install oh-my-fish/plugin-peco

config.fishに設定を追記する

> cat ~/.config/fish/config.fish
function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
end

設定の反映

> source ~/.config/fish/config.fish

以上で設定が完了です。
ターミナルから「Ctrl+r」を押すことで履歴を表示することが出来ます。

Docker Desktop WSL2のインストール

WSL2上でDockerを利用するために「Docker Desktop WSL2」をインストールします。

①ダウンロード

インストーラーは下記からダウンロード出来ます。

Install Docker Desktop on Windows
Get started with Docker for Windows. This guide covers system requirements, where to download, and instructions on how to install and update.

②インストーラーの起動

「Install required Windows components for WSL 2」に必ずチェックを入れておいてください。

OKを押したあと、しばらく待てばインストール完了します。

③設定

Docker Desktopの設定(ウィンドウ右上の歯車ボタン)から、必要な設定を確認します。

「User WSL 2 based engine」がチェックされていることを確認します。
(私の環境ではチェック状態で変更できませんでした)

Dockerを使うWSL2のディストリビューションを有効にします。

WSL2からDockerがインストールされたかを確認します。
バージョンを表示して表示されればOKです。

$ docker -v
Docker version 20.10.7, build f0df350

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

おわりに

今回はWSL2とDockerのセットアップまでを行いました。

Docker Desktopを使うことで、面倒なDockerのインストールも画面クリックで完了できます。

また、PhpStormもWSL2やDocker Desktopとの連携が強化されていますので、Windows環境で開発を行う場合の選択肢の一つとなるのではないでしょうか?

PhpStormの設定を記載した後編はこちらです。

補足

(2021/09/05追加)

2021/08/31にDocker Desktopを有料化するという発表がありました。

有料化ポリシー対象の規模でも、Dockerを使っているのが数チームのみ(しかも利益が出ない部門)とかだと有料化の申請が降りないかもしれませんね。

Docker Desktopを使わずWSL2に直接Dockerをインストールする場合は無料で使えます。
インストール方法はこちらを御覧ください。
PhpStorm on WSL2でWindowsに依存しない開発環境を作る(Dockerのインストール)」

なお、Windows側のPhpStormなどからWSL2のDockerをつなぐには、TCPの設定が必要です。
しかし、docker-composeの接続が上手く行かなかったため、PhpStorm自体もWSL2側にインストールしたほうが良いかもしれません。

(2022/02/23追記)

PhpStormのDocker設定では、下記メニュー「Build, Execution, Deployment → Docker → Tools」の設定でWindowsで認識できる実行ファイル(.exeファイル)を指定する必要があります。

WSL2に直接インストールしたDockerを利用する場合はPhpStormからのアクセスができなくなります。(解決方法があれば知りたいです。)

ですので、Windows側にPhpStormをインストールする場合はDocker Desktopを使ってインストールするのがベストだと思います。

コメント

  1. タムコーラ より:

    > WSL2に直接インストールしたDockerを利用する場合はPhpStormからのアクセスができなくなります。(解決方法があれば知りたいです。)

    まさしく、WSL2に直接インストールして利用しようとしていますが、ここで詰まりました。。
    もし情報あればご教授頂きたいです。。

    • Odaryo より:

      コメントありがとうございます。

      自分の環境では無料対象だったのでDockerDesktopを使い続けれたというのと、
      追記した後のタイミングでMacに移行したため、最近の調査はできていません。

      以前試した方法で、可能性を感じたものはこちらです。
      ① WSL内にPhpStormをインストールする
      ② WindowsにインストールしたPhpStormを、WSLにリモート接続して作業する

      懸念としてはこんな感じでした。
      ①は日本語環境がLinux側に依存するのと、ブラウザからのコピペができなかった(現在は解決しているかもです)
      ②はWSL側でIDEが動くのでWSL側にもそれなりのCPU/メモリを割り当てる必要があります。

      (記憶が正確でない部分もありますので、もし違っていたらご容赦ください。)

タイトルとURLをコピーしました