🐈
Laravel・Xdebug・webgrindをDockerで動かす
サンプルコード
Laravel・Xdebug・webgrind をDockerで動かす最小構成
バージョン | |
---|---|
Laravel | 11.22 |
PHP | 8.3 |
Xdebug | 3.3 |
webgrind | 1.9 |
プロファイル出力方法
コンテナ起動
ルートディレクトリ直下で docker compose up -d
を実行しコンテナを起動
docker compose up -d ログ
% docker compose up -d
WARN[0000] /Users/project/xdebug-webgrind-sample/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Building 3.4s (18/18) FINISHED docker:orbstack
=> [webgrind internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 161B 0.0s
=> [phpfpm internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 349B 0.0s
=> [webgrind internal] load metadata for docker.io/jokkedk/webgrind:1.9.3 3.2s
=> [phpfpm internal] load metadata for docker.io/library/php:8.3-fpm 2.2s
=> [phpfpm internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [phpfpm 1/5] FROM docker.io/library/php:8.3-fpm@sha256:12824476a7ec5dbec790fcbcff7153a8535988fbcbeed850cfe7a9fbeecfaee6 0.0s
=> [phpfpm internal] load build context 0.0s
=> => transferring context: 70B 0.0s
=> CACHED [phpfpm 2/5] RUN apt-get update 0.0s
=> CACHED [phpfpm 3/5] COPY php8.3.ini /usr/local/etc/php/php.ini 0.0s
=> CACHED [phpfpm 4/5] RUN pecl install xdebug-3.3.2 0.0s
=> CACHED [phpfpm 5/5] RUN docker-php-ext-enable xdebug 0.0s
=> [phpfpm] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:4f8cafb20ad02d9997bf9374dec14748ffdbc52036b5178fd580f1fd8ced4ede 0.0s
=> => naming to docker.io/library/xdebug-webgrind-sample-phpfpm 0.0s
=> [phpfpm] resolving provenance for metadata file 0.0s
=> [webgrind internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [webgrind 1/2] FROM docker.io/jokkedk/webgrind:1.9.3@sha256:0594c485d78f5526d99b675751b911380da2ac06f8fb1c0dce1eddd9276f3693 0.0s
=> => resolve docker.io/jokkedk/webgrind:1.9.3@sha256:0594c485d78f5526d99b675751b911380da2ac06f8fb1c0dce1eddd9276f3693 0.0s
=> CACHED [webgrind 2/2] RUN apt-get update && apt-get install -y python3 graphviz 0.0s
=> [webgrind] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:860f158e4aca9f7e918a730586c910c0b7633adc7b3b9d822056b86984ff3c80 0.0s
=> => naming to docker.io/library/xdebug-webgrind-sample-webgrind 0.0s
=> [webgrind] resolving provenance for metadata file 0.0s
[+] Running 3/3
✔ Network xdebug-webgrind-sample_default Created 0.0s
✔ Container xdebug-webgrind-sample-webgrind-1 Started 0.2s
✔ Container xdebug-webgrind-sample-phpfpm-1 Started 0.2s
サンプルコードを実行しプロファイル出力
-
docker exec -it phpfpm bash
を実行し、php-fpmコンテナに入る - コンテナ内で
php artisan app:sample
を実行し、サンプルコマンドの実行
root@ff10193c6cde:/var/www/html# php artisan app:sample
Result: 666666166.45884
- xdebug-resultディレクトリにプロファイル結果(cachegrind.***)が出力される
(マウントしているためローカルマシンからも確認ができる)
出力したプロファイル
webgrindでプロファイルの読み取り
- http://localhost:8080 にアクセスし、webgrindを開く
- xdebug-resultディレクトリ配下にプロファイルがある状態で画面右上のupdateボタンをクリック
- プロファイルが読み取られ一覧が表示される
(サンプルコマンド内で実行したApp\Console\Commands\heavyComputation
のプロファイル結果が表示されていればOK)
webgrindでプロファイルのグラフ化
- Shaw Call Graphボタンをクリックすると新しいタブでプロファイルがグラフ化されて表示される
Discussion