Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
26
Help us understand the problem. What is going on with this article?
@yamazaki

PHP on Laradock w/ Visual Studio Code(VS Code)でデバッグ環境 (特にon Mac)

More than 3 years have passed since last update.

Laravelの開発環境は、Laradockでサクサクっと作れるようになったけど...

実際に開発を進めていくとデバッグ作業は当然つきもの。

過去、もう10年以上前だけれど、SIerにいた時は、VB6やVB.NET, Javaで有償のIDEを利用するのが当たり前だったから、デバックといえばステップ実行で処理途中の変数の中身を見たりなんてのは普通の開発環境だった。

でも、ウェブ業界に来て、開発はテキストエディタ、しかも、デバックの際はコードの途中に printecho などを書いて地道に調べていく... なんともアナログな環境に驚いた。

昔話はまぁ、そんな感じだけど、最近はテキストエディタも高機能化していて、意外と手軽に有償のIDEと同じようなデバッグ環境を作れるようなので、今回は、それに挑戦した時のメモ。

Laradockの設定

まずは、公式のページと、あまたあるウェブの情報を多数拾って読んだけれど、今回エディタで選択したVisual Studio CodeとLaradockのドンピチャな設定例が見つからなくて少しテコづった。総合的に情報を把握して、いくらか設定の試行錯誤をして成功したので、同じ環境の人の参考にはなるんじゃないかと。(全然、難しい内容じゃないので、慣れている人は手順なんていらねーって話かもしれないがw)

20,30のページは見たけれど、最終的に参考になったのは、以下、公式と、どこぞの誰かのブログ。

Laradockも当然デバック環境を意識して作り込みされているので、設定を少し変えるだけでエディタのデバッグと連携することができるようになっている。

Xdebugの有効化

ということで、まずは、以下の.envの設定でXdebugを有効にする。

$LARADOCK_ROOT/.env
WORKSPACE_INSTALL_XDEBUG=true
PHP_FPM_INSTALL_XDEBUG=true

.envファイルの最後の方には、以下のような設定もあり、エディタによっては必要になるかもしれないので把握はしておくと良いかも。

$LARADOCK_ROOT/.env
DOCKER_HOST_IP=10.0.75.1
PHP_IDE_CONFIG=serverName=laradock

Xdebugの設定

Xdebugの設定も必要で、対象ファイルが2つある。

  • $LARADOCK_ROOT/php-fpm/xdebug.ini
  • $LARADOCK_ROOT/workspace/xdebug.ini
$LARADOCK_ROOT/*/xdebug.ini
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.cli_color=1

; Mac特有の設定
; xdebug.remote_host=dockerhost
xdebug.remote_host=docker.for.mac.localhost

上記最後のデバック情報を戻すホストマシンのIPが曲者で、WindowsとMacでDockerのネットワーク構成が異なるため、xdebug.iniの設定も違いがあるので、要注意。

色々設定を変えてみて試したけれど上手くいかず、一晩寝かせてGoogle検索して辿り着いた以下のサイトからヒントを得て、ポインタの公式サイトを見てみたら答えが書いてあった。

公式サイトに、まんま書かれていた。

I want to connect from a container to a service on the host
The Mac has a changing IP address (or none if you have no network access). From 17.06 onwards our recommendation is to connect to the special Mac-only DNS name docker.for.mac.localhost which will resolve to the internal IP address used by the host.

Dockerのバージョン17.06以降、コンテナからホストへアクセスする際は、「docker.for.mac.localhost」で名前解決してIPを特定することを推奨する、だそうな。

ということで、Xdebugのレスポンスは、docker.for.mac.localhostを指定。
これが一番ハマった。


追記: Aug. 29, 2017

コンテナから見たホストマシンのIPに関して、以下に、少し詳しく書かれていた。

が、情報が少し古いと思われる。今は、「任意のIPアドレスエイリアスをMac(Dockerホスト)のループバックアドレスに割り当てる」必要ななく、docker.for.mac.localhostで解決。


コンテナの再構築

以上、設定変更だけでなく、Xdebugの追加インストールなどもあるため、変更を反映するにはコンテナの再構築が必要なので、以下のコマンドを実行。

docker-compose build workspace php-fpm

もしくは、以下のコマンドでプロセス立ち上げると同時にビルド実行。

docker-compose up -d --build nginx mysql

Visual Studio Codeの設定

デバッグの拡張はいくつかあるようだけど、以下が一番有名そうなので、これをインストール

で、VS Codeのデバッグで設定ボタンをクリックするか、ソースファイルのルートディレクトリに、.vscode/launch.jsonを作成して、以下のように記述。

$LARAVEL_PROJECT/.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "serverSourceRoot": "/var/www/laravel",
            "localSourceRoot": "${workspaceRoot}",
            "log": true,
            "port": 9000
        }
    ]
}

serverSourceRootは、実際にコンテナ内に配置しているプロジェクトのディレクトリを指定。
localSourceRootは、VS Codeで開くディレクトリのどこが上記のserverSourceRootと同じ階層となるのかを指定する部分なので、VS Codeで開くディレクトとイコールであれば、${workspaceRoot}で良い。

以上

26
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
26
Help us understand the problem. What is going on with this article?