LoginSignup
4
5

More than 1 year has passed since last update.

[Windows+WSL2]VSCode のphp...executablePath にDocker コンテナ内のPHPを指定する

Posted at

経緯

新しく購入したWindows PC でVSCode を使い始めたら、PHP 関連の拡張機能に「php のパスが正しく通ってませんよ」と指摘される。

Cannot validate since a PHP installation could not be found. Use the setting 'php.validate.executablePath' to configure the PHP executable.

Screenshot_2.png

Windows 自体にPHPを入れていれば問題ないのだけど、PHPは開発用Docker コンテナの中に入っているのみ。
PHPファイル自体、開発外で使うこともないので、VSCode にもローカルのWindows 環境ではなく
開発環境を参照しておいてほしい。

ので、コンテナ内のPHPへパスを通します。

環境

  • Windows 11
  • WSL2 (コマンドプロンプト/Powershell でubuntu コマンドが使える状態)
  • Docker (WSL2内でdocker コマンドが使える状態)

やったこと

  1. WSL2 内にコンテナのPHPを実行させるスクリプトを作成
  2. Windows のVSCode で開いているプロジェクトのルートディレクトリにバッチファイルを作成
  3. パスとしてバッチファイルの場所を指定

1. WSL2 にスクリプトを配置

ubuntu コマンドでWSL2 環境へ入ります。

/usr/local/bin へphp という名前のファイルを作成:

sudo touch /usr/local/bin/php

権限を変更:

sudo chmod +x /usr/local/bin/php

php の中身を変更:

sudo vim /usr/local/bin/php

以下のように記載します。

php.
path=$(printf '%s\n' "${PWD##*/}")
cd /mnt/c/User/(プロジェクトのルートディレクトリ)
command="docker exec (コンテナ名) php "$@""
echo "Running php on docker (コンテナ名)"
$command

コンテナ名は起動中であれば、プロジェクトのルートディレクトリとかでdocker container ps とすれば確認できます。

スクリプト内でdocker コマンドを使っているので、WSL2 にはDocker が入っていることが必要になります。
WSL2 上の準備はこれでオーケー。

一旦、WSL2 を抜けます。

exit

ubuntu run でphp を参照できることを確認します。

ubuntu run php -v

PHP のバージョンが返ってくればオーケー。

Running php on docker (コンテナ名)
PHP 8.0.16 (cli) (built: Mar  1 2022 00:31:45) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.16, Copyright (c) Zend Technologies
    with Xdebug v3.1.4, Copyright (c) 2002-2022, by Derick Rethans
    with Zend OPcache v8.0.16, Copyright (c), by Zend Technologies

2. Windows ローカルにバッチファイルを配置

バッチファイルはVSCode で開いているプロジェクトのルートディレクトリに配置します。

以下の内容でphp.bat を作成します。

php.bat
ubuntu run php %1

%1 には引数が入ります。
試しに、バッチファイルを作成したディレクトリで次を実行します。

./php.bat -v

引数として-v を与えています。
先程と同様のPHP バージョン情報が返ってくればオーケーです。

3. バッチファイルの場所をパスとして指定

最後に、VSCode のsettings.json 内の必要な箇所にバッチファイルのパス./php.batを指定して完了です。

settings.json
...
    "php.debug.executablePath": "./php.bat",
...
    "php.validate.executablePath": "./php.bat"
}

動作確認

一度VSCode を閉じて再起動します。
最初に出たような通知が出ないことを確認します。

参考

以下のページが元になっています。

ここではWindows ではなくLinux 環境で動いているコンテナが対象となっていたため、Linux 上のシェルを直接パスに指定しています。
今回は更にそのシェルへ向かうバッチファイルをWindows 上に作成し、無理やりWindows 環境に応用しました。

シェルと同様の動作をするバッチファイルを作ればもっと事態は簡単かもしれません。
あと、スクリプトの中身はほぼ引っ張ってきただけなので、path=$(printf '%s\n' "${PWD##*/}") とかecho "Running php on docker (コンテナ名)" とかの記述はひょっとしたら要らないんじゃないかな、やっぱ。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5