質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

183閲覧

laravelでphp artisanコマンドの処理が進まないのを解決したい

ryuichi-works

総合スコア20

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2024/03/14 16:35

編集2024/03/14 16:51

実現したいこと

  • php artisanコマンドの処理が進まないのを解決したい

前提

フロントをnextjs、バックエンドをlaravelのapiでdockerを用いて開発しています。

発生している問題・エラーメッセージ

現状はvscodeのdev container拡張機能でdockerコンテナにアタッチして開発をしていたところ、php artisan listコマンドなどを実行時に処理が進まず、postmanでのリクエスト及びフロントエンドからのリクエストの処理も処理が進まなくなってしまいました。
ですがこの状態からvscodeでxdebugを使ったデバッグ状態でphp artisanコマンドを実行すると正常に実行されます。postmanリクエスト及びフロントエンドからのリクエストも正常に処理されます。

補足)
上記の不具合はdev containerでアタッチしたvscode上で発生しており、仮にdev containerでアタッチせずにローカルのvscodeのターミナルでdocker execコマンドでコンテナ内に入りphp artisanコマンドを実行するとうまく処理されpostman及びフロントからのリクエストも処理されます。

  • コンテナアタッチ先のvscodeのターミナルの状態
root@〜〜〜:/var/www/html/strii-backend# php artisan list Cannot load Xdebug - it was already loaded

artisanコマンド一覧表示を期待しますが、この状態で処理が進まなくなってしまいます

該当のソースコード

バックエンドに関するDockerfile

docker

1FROM php:8.2-apache 2 3RUN apt-get update \ 4 && apt-get -y install git libicu-dev libonig-dev libzip-dev unzip locales vim zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev libwebp-dev \ 5 && apt-get clean \ 6 && rm -rf /var/lib/apt/lists/* \ 7 && locale-gen en_US.UTF-8 \ 8 && localedef -f UTF-8 -i en_US en_US.UTF-8 \ 9 && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ 10 && docker-php-ext-install intl pdo_mysql zip bcmath gd exif \ 11 && pecl install xdebug \ 12 && docker-php-ext-enable xdebug \ 13 && a2enmod rewrite 14 15ENV \ 16 # TZ=UTC \ 17 # TZ=Asia/Tokyo \ 18 # locale日本語設定 19 # LANG=ja_JP.UTF-8 \ 20 # LANGUAGE=ja_JP:ja 21 # LC_ALL=ja_JP.UTF-8 22 LANG=en_US.UTF-8 \ 23 LANGUAGE=en_US:en \ 24 LC_ALL=en_US.UTF-8 25 26COPY --from=composer:2.5 /usr/bin/composer /usr/bin/composer 27 28# 各種設定ファイルをコンテナの設定ファイルにコピー 29COPY php.ini /usr/local/etc/php/ 30COPY apache/000-default.conf /etc/apache2/sites-enabled/000-default.conf 31 32WORKDIR /var/www/html 33

php.ini

php

1〜〜〜 2 3[xdebug] 4xdebug.mode=debug 5xdebug.start_with_request = yes 6xdebug.client_host=host.docker.internal 7xdebug.client_port=9003 8xdebug.discover_client_host = 1

docker-compose.yml

docker

1version: '3.8' 2 3services: 4 web_backend: 5 build: ./docker/php 6 container_name: web_backend 7 tty: true 8 stdin_open: true 9 ports: 10 - 80:80 11 volumes: 12 - ./:/var/www/html/strii-backend 13 - ./docker/php/php.ini:/usr/local/etc/php/php.ini 14 - ./docker/php/apache/000-default.conf:/etc/apache2/sites-enabled/000-default.conf 15 depends_on: 16 - db 17 db: 18 image: mysql:8.2 19 container_name: db 20 environment: 21 MYSQL_ROOT_PASSWORD: 〜〜〜 22 MYSQL_DATABASE: 〜〜〜 23 MYSQL_USER: 〜〜〜 24 MYSQL_PASSWORD: 〜〜〜 25 TZ: 'Asia/Tokyo' 26 volumes: 27 - ./docker/db/data:/var/lib/mysql 28 - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf 29 - ./docker/csv:/var/lib/mysql-files/csv 30 ports: 31 - 3306:3306 32

試したこと

  • 上記に記載したphp.iniのxdebugに関する設定をコメントアウトしてdev containerにアタッチするとphp artisanコマンドの処理及びpostman、フロントエンドからの処理が正常に実行される。

  • xdebugの設定を一行ずつコメントアウトしてコンテナにアタッチし確認してみると『xdebug.start_with_request = yes』の部分のみコメントアウトの状態でphp artisanコマンドと他の処理が正常に完了するのを確認でき、これを記載した時に質問の様にphp artisanコマンドとその他処理が進まなくなってしまう。

  • xdebugの設定をコメントアウトすると解決しますが今度はxdebugでのデバッギング時にブレイクポイントで処理が止まらずデバッギングできなくなってしまうという、どちらかを解決するともう一方で不具合となってしまう状態です。

  • vscodeのdev containerでアタッチせずにローカルのvscodeのターミナルでdocker execコマンドでphp artisanコマンドが動作しているので、vscodeのdev container拡張機能に問題があるか、上記のxdebugの何らかが原因であると考えていますが解決法がわかりません。

この不具合が出るまでは普通に動作し開発ができていたのですが、今日急にこの様な問題が発生しました。問題発生前の他のエラーの解決過程でvscodeの更新をしてしまったのも原因かもしれません。
また下記画像の様にdev containerにアタッチしたvscodeでportsがAutoForwardedで増えてしまっています。
イメージ説明

php artisan list実行時の状態
イメージ説明

解決法がわかる方いましたらよろしくお願いします。

追加でコードが必要な場合は指摘していただければ幸いです。

追記

本問題発生前の状態のgithubリモートリポジトリをgit cloneして同様にdev containerでアタッチしても同じ問題が発生しています。

補足情報(FW/ツールのバージョンなど)

mac book pro 13inch(2020 intel)
macOS Monterey
vscode 1.87.2
Dev Containers v0.348.0
docker desktop 4.18.0
Docker 20.10.24
php 8.2
laravel 9系
composer 2.5
next.js 14.0.3
react 18.2.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FKM

2024/03/15 00:39

動いていた環境からPHPのバージョンを変えていませんか?
FKM

2024/03/15 00:46

あと、Xdebug3を使っているなら、判定フラグは1ではなくyesになってるようです。
ryuichi-works

2024/03/15 12:37

コメントありがとうございます。 phpのバージョンですがphp:8.2-apacheのイメージを使っており変更していないので同じだと思います。 xdebug.start_with_request = yes この部分を1に変更しましたが解決には至りませんでした。
guest

回答1

0

ベストアンサー

php.iniでxdebugを二重に読み込んでないか確認。
xdebugは勝手にphp.iniを書き換える余計なことをする。

  • LaravelでDockerならまずSailを使う。Sailには最初からxdebug関連の設定もある。Laravelの普通から外れた使い方をすると無駄な失敗する。
  • 今時ブレイクポイントなんて使わないので普段はxdebugは無効でいい。カバレッジ付きでテストを実行する時だけ有効化すれば十分。
php -dzend_extension=xdebug.soまでのパス ./vendor/bin/phpunit ...

投稿2024/03/15 03:51

pcs

総合スコア347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuichi-works

2024/03/15 13:38

pcsさん、FKMさん回答および質問ありがとうございます。 お二方の指摘をもとに色々試していたところ、xdebugを無効にすれば開発は今まで通りにdev containerでアタッチしたvscodeで可能であり、デバッグはlaravelのLogファサードでlogに出力する方法に切り替えようと考えました。 しかし、今までの開発でxdebugは機能しており便利だったのでどうになできないかと試行錯誤したところ、xdebug.start_with_request = yesをコメントアウトし、デバッグにvscodeのブレイクポイントを置くのではなくコード上に『xdebug_break();』を記載することで今までの様なコード処理が止まった状態でデバッギングできるようになり、かつphp artisanコマンド及びpostmanとフロントのリクエストも正常に処理が進む状態になりました。 この方法が最善ではないかもしれませんが、今回の質問の前の様な状態で開発が継続できそうなのでこの方法でやってみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問