BackWPupプラグインでエラーが出るので

BackWPupプラグインでエラーの通知が来た。BackWPupはWordPressの自動バックアッププラグイ。実はエラーを出ていても、しばらく放っておいたけど。

エラーが出ていると何か気持ち悪いので対応する。BackWPupの管理画面に入ると、「mysqliがどうしたこうしたと」警告が出ていた。これを手がかりに対応する。

BackWPupのジョブを直接実行すると

「エラー: ステップを中止: 回数が多すぎます」

とエラーメッセージが表示する。こちらを手がかりにしたほうが簡単に対応方法が見つかった。

要はPHPのバージョンが古くてmysqliのPHP拡張モジュールを対応していないからMySQLに接続しようとするとタイムアウトになっているとのことだった(だいぶ意訳)。

このWordPressのサイトはさくらインターネットのレンタルサーバーを使っているけど、最初にPHP7を入れたはずだけどと思ってphp -vを打ってみると5.6だった。つまりPHPのバージョンが古いのが原因だった。

さくらインターネットのサーバーコントロールでPHPのバージョンを7.2に切り替えてみる。実はこれは危険。思いつきで切り替えてはダメ。案の定WordPressのサイトにアクセスすると、画面が真っ白になってしまう。

「ああ、やってもうた・・・」と思ったけど気を取り直して、さくらインターネットのサーバーコントロールからPHPのバージョンを5.6に戻してみる。これは無事にアクセスできて元通り。この辺りはレンタルサーバーの気軽で簡単なところ。もし、専用サーバーだったら、PHPのバージョンを元に戻すは大変だろうな。

おそらくプラグインが悪さしているのだろうと思って、めぼしいプラグインを無効にしておく。PHPを7.2に切り替えると、今度は無事にアクセスできる。

一つづつプラグインを有効にしてみて、PHP7.2に対応していないプラグインを探してみる。インストールしていて対応していていないプラグインは、

  • Google+Blog
  • spam-byebye

の2つだった。

spam-byebyeは、もう古いしWordPressのJetPackでスパムコメントの対応はできていそうなのでもう必要ない。

痛いのはGoogle+Blogである。こいつはいくらかお金を払ってインストールしたもの。Google+(みなさん使っていないと思うが、実は自分が利用している唯一のSNS)から記事を自動的に取得して投稿してくれる連携プラグインである。このままではGoogle+Blogプラグインを有効にするとサイトにアクセスできなくなるので、したかないけど無効にしておく。Google+Blogプラグインのサポートサイトを見てみると、Error 502になるので、既にサポート終了になってしまっている。WordPressからG+へは自動投稿できているからよしとする。

以上でPHP7.2の対応完了。本件の始まりだったBackWPupプラグインのエラーはなくていた。ジョブを直接実行してみると正常にバックアップができていた。

ThinkPadの携帯ネットワークが不安定なので

まだまだThinkPadの携帯ネットワークが不安定である。これはThinkPadを買ったのが失敗したかと思った。わざわざWAN対応でカスタマイズしたのにな。

と、言ってられないので再度対応を考える。レノボのサポートサイトに行っても快活方法は見つからない。Q&Aのサイトはあるけど、サポートはユーザーコミュニティでやっているみたい。

ここから余談。

レノボにすればサポートは、「何かあったらユーザーコミュニティで質問しろよ。詳しいパワーユーザーが答えてくれるぜ。」って感じなのかな。しかし、パワーユーザーっていうのが曲者で、回答内容を見てみると、「あんたの質問内容じゃあ情報が足りない。」とか「あんたの質問は何を言っているかわからない」とか「そのそもこのコミュニティで質問するべきことではない。」とか、初心者からだと凹むような回答が多い。しかもこんな回答とするのが上位の回答数のユーザーと来たもんだから始末が悪い。

まあ、こんなユーザーコミュニティに頼らないで、自力で解決しなければいけないかと思ってしまったりする、これはレノボによる”ユーザースキルパワーアッププログラム”かもしれないな。

さて話しは戻るが。

結局、今のところの解決策として、最新のWANドライバをアップデートすること。2018年7月24日リリースのワイヤレスWANドライバにアップデートしておいた。とりあえずこれでまたまた様子を見ておく。

ドライバの置き場所とかは以下のレノボのサポートサイトで

https://support.lenovo.com/jp/ja/solutions/ht117260

自分のThinkPadの必要なドライバは、ここのリンクからダウンロードできるようだ。あらかじめレノボのユーザーアカウントを作成して、自分のThinkPadをマイプロダクトに登録すること。登録まで多少わかりにくくて手間取るかもしれないけど、がんばって登録してね。

ダウンロードサイトでドライバの自動更新ができるみたいだけど、あらかじめLenovo Service BridgeというThinkPadのシリアルナンバーとか中身をスキャンするソフトをインストールする必要がある。しかしながら、あらかじめインストールされていても、どういう訳かLenovo Service Bridgeが起動してくれない。そのときは、仕方ないので一度Lenovo Service Bridgeを削除してから再インストールしたら無事にスキャンが始まった。

ThinkPadは何かあったら解決が難しいと痛感した。まだまだ問題があるかもな。

追記(2018/07/31)

やはりWANでつながらない。つながっているけどスリープから復帰したときとか、明示的に携帯ネットワークをOFFにするとつながらなくなる。携帯ネットワークでつなぐためには、ThinkPadの再起動が必要になる。再起動すれば、二回に一回はつながるようになる。

さて、Lenovoのサポートをお願いしようかとサポートサイトに行ってみると、連絡先の電話番号が見つからない。自分のThinkPadを登録したマイプロダクトのぺーじには、ユーザーコミュニティと有償サポート、国際サポートのリンクしか出てこない。散々探してみると、どうやら購入後30日しかレノボからテクニカルサポートを受けられないようだ。30日以降は有償になる。とにかくレノボのサポートサイトはわかりにくい。Q&A情報からは必要な情報を取得できなかった。

どうやらレノボは技術的なユーザーサポートは、ユーザーコミュニティに任せてしまっているようだ。ユーザーコミュニティを覗いてみても、そんなに満足できるような回答をされていない。レノボもこのユーザーコミュニティはレノボが運営しておらず、レノボからの回答ではないと謳っている。これではThinkPadを買ってもあとでトラブルがあっても正常に戻すことは一般の人では難しいかもしれない。

ThinkPadの携帯ネットワークで圏外になるけど

新しくThinkPadを買ったけど、一つトラブルが発生している。

今回購入したThinkPadはSIMカードを入れて携帯ネットワークで接続できるようになっている。しかし、Window10の一旦携帯ネットワークの接続を切ると、そのまま圏外になってしまう。すぐにつなごうとすると接続できない。しかし、しばらく(30秒~1分ほど?)待つとと、接続できるようになるときがある。なるときがあるというも、できないときは圏外のまま。そのときは、確実に携帯ネットワークをオフにして、再度オンにしてからしばらく待つ。これで接続できることがあるという面倒くさいネットワーク接続である。

ThinkPadに入れているSIMはOCNモバイルOneだけど、同じSIMを入れているZenPhone3ではモバイルネットワークをOFFにして、すぐにONにしても接続できるから圏外でもOCN側の問題で無いかと思う。そうすると、ちょっと待って再接続というのはThinkPadか、はたまたWindow10の仕様か? それともOCNモバイルOneとThinkPadの組み合わせの問題か? 今回初めてWindow10にSIMカードというのは初めてだから、そんなもんだと言われたら仕方ないけど。

このまま1分も待つのも不便だから、Lenovoのサポートに連絡して他に事例が出ていないか聞いてみようかな。Googleさんに聞いてみても事例が出てこなかったので、おそらくそんな症状はないと言われそうだけど。まあ、接続できるコツみたいなものを見つけたから、時間がかかるが何とかなると言うものかもしれない。

せっかくZenPhoneのテザリングを使わないで、いつでもどこでもネットワークにつながるようにと、プラスアルファのお金をかけてThinkPadをカスタマイズしたのにちょっと残念。

追伸

結局、携帯ネットワークをいちいち切断しないで、つなぎっぱなしにしておけというのが解決策かもしれないな。Wi-Fiがつながればそちらが優先になるし。WANを切断して確実にモバイル料金がかからないしようとするのはダメかもしれない。もし、確実に切断したいのであれば、再接続に時間をかかるのを我慢しなければいけないということ。

 

YubiKeyを買ったけど

今さらながら二段階認証のためにYubiKeyを購入した。今までは二段階認証にはGoogle認証アプリを使っていた。

サービスの中にはを二段階認証に使えないサービスもある。Evernoteとかセキュリティの設定画面でYubiKeyの設定がなさそうなのだけど、どこかにあるのかな?

Googleのログインは簡単になった。それとDropboxも。GoogleとDropboxはYubiKeyとGoogle認証アプリが併用できる。

パスワード管理のサービスを使っているけど、こちらはGoogle認証で二段階認証を設定しているところにYubiKeyの設定をすると、YubiKeyだけになってGoogle認証が使えなくなる。YubiKeyの設定を解除するとGoogle認証が使えるようになる。このことをサポートに聞いたら、これが仕様だそうだ。複数の二段階認証の入口を許さないことでセキュリティを高めているということなのか。

パスワード管理はYubiKeyを使わずに今まで通りGoogle認証アプリを使うことにする。6桁コードの認証コードを入れるのは面倒だけど、スマートフォンを無くさないと思うけど、小さなYubiKeyを無くしそうで心配だから。でも、スマートフォンって壊れるよね。結局どちらも心配だけど、これはいずれ考えるということで先送り・・・。

まだまだYubiKeyを使いこなせないという感じかな。一番の問題は、どうやってYubiKeyを持ち運ぶかということ。普段は家にいるし、自宅が電子キーなのでキーフォルダなんて持っていないしな。

デジサート社証明書再発行したけどIISにインストールできない件

お客さんから「さくらインターネットからSSLの証明書を再発行しろってメールが来たけどやっておいて。」と連絡があった。デジサート社(旧シマンテック社)が発行したSSLサーバー証明書を、Chromeで失効されてしまうので再発行しなければいけないそうだ。

デジサート社証明書再発行対応について

転送されてきたメールに書いてあったさくらインターネットの指示通りにサーバー証明書を取得の手続きを行う。しかし、発行ステータスが手続中のままで一日経っても進まない。さくらインターネットのサポートに問い合わせると、認証ファイルを再度アップしなければいけないそうだ。説明書をよく読んでいなかったし(どこかに書いてあるかわからない)のが大きな敗因だった。サポートからは「認証できていないから。」の一言だったのはやさしくないサポートだった。認証ファイルを設定しなけれいけないなんて、とんと忘れていたので(更新の一年に一回しか作業しないし)、認証ファイルをアップし直すということまで、たどり着くまで時間がかかった。最初はIPアドレスの許可かファイヤウォールの設定かと思った。

無事に認証されてサーバー証明書をダウンロードできるようなった。今度はWindows ServerのIISにイントールしようとしたらできなかった。IISの「証明書要求の完了」でインポートしようとしたところ、問題なくインポートできてサーバー証明書一覧に表示されるのがが、他のページに遷移したり更新をすると一覧から消えてしまい、バインド設定ができなかった。

再度、さくらインターネットに問い合わせたところ、自分のところのサーバーではないからサポートできないと回答されてしまう。その回答メールの中に

今回の証明書再発行はGoogle とデジサート社との不仲が原因であり、
ChromeやFirefoxなどで、ある期間にデジサート(シマンテック)から発行された
証明書をエラー扱いにするというものでございます

と書かれているので、何だか会社同士の勝手なふざけた理由で、こちらが作業しなければいけないようだった。これに関しては、さくらインターネットのサポートには、「ふざけんな。」と返送しておく。

このトラブルの件を調べたところ、同じ現象が報告されている。

IIS7でSSL証明書がインストールできない

このような現象が発生したら、そのままIISでは証明書を入れられない。OpenSSLのコマンドで.pfxファイルを作ってからインポートしてあげないといけないようだ。面倒くさそう。

今回のサイトはブラウザでアクセスするようなサイトではないしテストサイトみたいなものだから、これからどうしようか考える。他社のSSL証明書にしたほうが速いし安いかな。

「完全に保護されていません」と警告された

ずっと無償で面倒を見ているサイトがあって、そろそろSSLに対応してあげないといけないと思い立って実施する。もちろん無償。

さくらインターネットのレンタルサーバー上でWordPressを使って動かしているので設定は簡単。あっという間に設定は完了。しかしながら

「このサイトへの接続は完全には保護されていません

となる。テーマに埋め込んだSNSのリンクがHTTPになっていたので、面倒だからリンクを削除する。

Chromeでアクセスすると、相変わらず

「このサイトへの接続は完全には保護されていません

となる。EdgeやFirefoxでは問題なく暗号化されているなっている。

ChromeでF12を押して開発者ツールを動かすと、コンソールでHTTPでアクセスしているところがある。よく見てみるとCSSの背景画像の指定だった。相対アドレスで画像ファイルをしているのでおかしいと思って、もっとよく見ているとCSSファイルをキャッシュしていた。そういえば、CSSとかJavaScriptのファイルをキャッシュするWordPressのプラグインを入れていた。プラグインの機能でキャッシュを削除する。

今度はChromeで無事に

「この接続は保護されています。」

となった。これで作業完了。

Fire HD 8 タブレットを工場出荷時の設定にリセット

Fire HD 8 タブレットはGoogle Playを入れて無理矢理Androidタブレットとして使ってきたけど、遅くて辛抱できなくなってきたので元に戻すことにした。やはり、このスペックでは無理あるのよね。値段は安くていいけどね。

戻すのは簡単。「設定」ー「端末オプション」ー「工場出荷時の設定にリセット」から実行するだけ。あとは何かソフトウエアを勝手に実行していってWi-FiとかAmazon IDを聞いてくるから設定すればOK。

戻してみたら何とか使える感じ。Kindleで本を読むには問題ない。まさにそれがFireタブレットの本来の目的だから。

Amazonのアプリストアから、アプリを再インストールしていく。今までGoogle Playからしかインストールできないと思い込んでいたけど、そんなことはないのよね。Evernote、Dropbox、Pocket、Facebook、Twitter、Skype・・・。主なよく使うだろうアプリは用意されているので問題ない。Google Playに対応しなくてよかったかもしれない。

ただ痛いのはデフォルトのキーボード入力はちょっと使いづらい。普段はATOKのパスポート版を入れているけど、こちらはインストールできないのね。でも、このタブレットのためにあらためてATOKを買うまではね。

GmailなどのGoogleのアプリはほぼないので、Gmailの代わりに既にインストールされているEメールアプリを代わりに使う。Gmailのメールは使えるけど、微妙に違う。アーカイブしていない受信トレイのメールだけを読むのはどうするの? Silkブラウザ経由でGmailをアクセスしたほうがいいのかな? Silkブラウザは、いまだにページのフォントサイズを小さくすることがわからないから別のブラウザを探したほうがいいのかな? Yahooブラウザはダメだし。

なんてやっていくと、本来のFireタブレットの目的をまた見失っていきそうです。別にタブレットを買えばと思うけど、今さらタブレットを買ってもね・・・。

WordPressのメディアライブラリで新規追加するとHTTP エラー

ここのWordPressのサイトでメディアライブラリから画像ファイルを新規追加するとHTTP エラーが出てしまいました。心当たりは全くありません。

さて、Googleさんに聞くといろいろでてきます。

WordPress の「HTTPエラー。」でメディアアップロードができない、

「HTTPエラー」WordPressでメディアをアップロードできない現象

などなど。

Webサーバーのエラーログを見ましたが、エラーは出ていませんでした。何かfunction.phpが怪しいとのことでしたが、WordPressのテーマのままでした。

とりあえず、別のテーマにしてみると、今度はうまくファイルをアップロードできるようになりました。テーマを元に戻してみると、これも成功しました。

以上、原因不明で解決できてしまいました。結局テーマを一度別のテーマにしたら解決でした。

Happy Hack Keyboard(Lite2だけど)をやめてREALFORCEのキーボードにする

しばらくHappy Hack Keyboardを使っていたけど(Lite2だけど)、新しいシリーズにテンキーレスが出たので、東プレのREALFORCEのキーボードに買い換える。

やはり、ファンクションキーとDELキーは必要なのよね。ファンクションキーを押しながらのキーは、頭で一瞬考えないといけないから。意識高い人のようにHHKBはやはり使いこなせなかった。

今回購入したのは、これ。

これの静音のAPCの黒にする。カナの表示はいらないから。だけど、黒だとキートップが見にくい。見なければ関係ないけど。

ずっと何年も量販店のキーボード売り場でキータッチを試していたけど、一番キータッチが軽いものが好きなので、結局これにした。

APCとかの機能でキーの押す深さを本来は設定するらしいけど、最初の設定だとキータッチが軽く感じる。キーの上に指を乗せてぼうっとしていたら、気が付くと連続してキーが入力されていた。REALFORCEソフトウェアでとりあえずAPCでキーの深さを3.0mmにしておく。こちらは後でAPCの設定で調整していく。

それと、Ctrlキーをデフォルトの位置に戻しておく。Caps Lockはそのままにしておくけど、こいつは使わないのでREALFORCEソフトウェアでロックしておく。HHKBを使っていたときはAの隣にCtrlキーにしていたけど、別のマシンを使うときに迷わないための措置である。と言いながらも、近いうちに替えてしまうかもしれない。まだCtrlキーの位置に慣れていないので間違える。

これから慣らさないといけない。でも意外と自分は慣れるのは早いから・・・。

Laradockを使ってCakePHP3+Xdebug+VS Codeの開発環境を構築する。

CakePHP3で作りたいものがあったので、CakePHP3の開発環境を簡単にDockerを使って構築しようと思い立った。最初は自分でdocker-compose.ymlを作成してコンテナを起動してみたけど、どうしてもXdebugでデバッグができなかった。

たまたまLaradockという本来はLaravelフレームワーク用のDockerコンテナキットを見つけた。最後にcomposerでLaravelの代わりにCakePHPをインストールできるらしいからLaradockを使ってみた。LAMP関連(今回はAではなくnginxだけど)のコンテナが全部入りだから(MySQLだけではなくて、PostgreSQLやSQL Serverもある)、自分でdocker-compose.ymlを書くよりはいいだろうと思った。

参考までにこれから構築していく自分の環境は以下の通りである。ここにLaradockを使ってCakePHP3+Xdebug+VS Codeの開発環境を構築する。。

Windows 10 Pro 64 bit
Docker version 17.12.0-ce, build c97c6d6
docker-compose version 1.18.0, build 8dd22a96

以下はいろいろと参考にしたサイトからつまみ食いしなから設定を行った部分を抜き出してまとめていく。

Laradockの設定は、こちらのサイトを途中まで参考にした。

PHPフレームワーク「Laradock」で、手軽にLaravel+Dockerな開発環境を構築する

gitのcloneでLaradockをインストールしている。次にLaradockでCakePHP3に関する設定を行うには、こちらのサイトを参考にした。

LaradockでPHPフレームワーク(Laravel・CakePHP)とCMS(WordPress・Drupal・baserCMS)の開発環境(nginx・php-fpm・mysql)を構築する

.envをコピーして設定して、これでインストール完了ですと言えないのは、コピー&ペーストインストールのいつものこと。このままではphpMyAdminからMySQLコンテナに接続できないとか、細かい問題があった。そしてXdebugでPHPのデバッグをやりたかったので、いろいろ設定を追加していく。

まずは、上記の2つのサイトを参考にしてLaradockをインストールする。自分のところでは、今までの作業でディレクトリはこのようになっている。

 /laradock-test
 ├── laradock
 └── src

.envの設定だが、設定の一番のポイントはポート番号を重ならないこと。既にローカルでPHP+Xdebugが動いていたようなので、ポート番号の指定で嵌まった。使っていないポート番号を設定しておく。以下に今回設定した.envのnginx, MySQL, phpMyAdminの設定を上げておく。

 ### NGINX
 NGINX_HOST_HTTP_PORT=8082
 NGINX_HOST_HTTPS_PORT=443
 NGINX_HOST_LOG_PATH=./logs/nginx/
 NGINX_SITES_PATH=./nginx/sites/
 NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
 NGINX_PHP_UPSTREAM_PORT=9000

## MYSQL
 MYSQL_VERSION=5.7
 MYSQL_DATABASE=default
 MYSQL_USER=default
 MYSQL_PASSWORD=secret
 MYSQL_PORT=3333
 MYSQL_ROOT_PASSWORD=root
 MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

### PHP MY ADMIN
 # Accepted values: mariadb - mysql
 PMA_DB_ENGINE=mysql
 # Credentials/Port:
 PMA_USER=default
 PMA_PASSWORD=secret
 PMA_ROOT_PASSWORD=secret
 PMA_PORT=8083

使っていない別のポート番号に設定し直しておく。MYSQL_VERSIONは元の設定の8.0だと認証で失敗してしまったので、8.0ではく5.7に設定したら認証ができた。こちらは何か別のよい方法があるかもしれない。

WORKSPACEとPHP_FPM の設定は以下の通り。修正した箇所だけを上げておく。

 ### WORKSPACE
 WORKSPACE_INSTALL_XDEBUG=true

 ### PHP_FPM
 PHP_FPM_INSTALL_XDEBUG=true
 PHP_FPM_INSTALL_INTL=true

Xdebugを使うのでWORKSPACE_INSTALL_XDEBUGとPHP_FPM_INSTALL_XDEBUGをtrueにして(PHP_FPM_INSTALL_XDEBUGだけでもいいかも?)、PHP_FPM_INSTALL_INTLはCakePHP3で必要なのでtrueにしておく。

.envの設定の最後として、CakePHP3のインストール先のディレクトリも設定しておく。

# Point to your code, will be available at `/var/www`.
APPLICATION=../src/

nginxのドキュメントルートを修正する。設定するファイルは以下のファイルである。

.\laradock\nginx\sites\default.conf

こちらのrootの設定を、CakePHP3のリモート側のドキュメントルートのディレクトリに設定する。今回のプロジェクト名をmycakephpとしておく。

root /var/www/mycakephp/webroot;
ここで一度Docker composeを実行してコンテナを起動しておく。
docker-compose up -d nginx mysql phpmyadmin

workspaceコンテナにログインして、composerを使ってCakePHP3をインストールしておく。こちらは参考サイトの通り。

LaradockでCakePHPの開発環境(nginx・php-fpm・mysql)を構築する

ここではサイトに書いてある通り、以下のコマンドでプロジェクトmycakephpでCakePHP3をインストールした。

 $ composer self-update && composer create-project --prefer-dist cakephp/app mycakephp

nginxからCakePHP3のサイトを参照できるかチェックする。OKならCakePHP3の初期画面が見えるはず。

データベースの接続の設定を.\src\mycakephp\config\app.phpにしておく。

'Datasources' => [

    'default' => [
       :
    'host' => 'mysql',
       :
    'username' => 'default',
    'password' => 'secret',
    'database' => 'default',
       :

このような感じで.envのMySQLの設定に合わせておけば、データベースに接続が成功はずである。

phpMyAdminも確認しておく。こちらも.envのMySQLの設定通りにすればログインできてMySQLの中を参照できるはずである。もちろん、MySQLのパスワードは適当なものに変えること。

サーバ:mysql
ユーザ名: root
パスワード: root

MySQL Workbenchからも接続を確認できた。以下の接続情報でWindowsローカルで接続できた。

Hostname:localhost
Port: 3333
Username: root
password: root

最後にXdebugの設定である。Xdebugのコンテナ側の設定ファイルは次の2つである。同じ内容でコピーすれば大丈夫だった。

.\laradock\php-fpm\xdebug.ini
.\laradock\workspace\xdebug.ini

自分が設定した内容は以下の通りである。とりあえずプロフィラの設定も含めて設定しておく。

 xdebug.remote_host=172.27.7.81
 xdebug.remote_port=9002
 xdebug.idekey=Listen for XDebug

 xdebug.remote_autostart=1
 xdebug.remote_enable=1
 xdebug.remote_connect_back=0
 xdebug.cli_color=1
 xdebug.profiler_enable=1
 xdebug.profiler_output_dir="/var/www/mycakephp/tmp"

 xdebug.remote_handler=dbgp
 xdebug.remote_mode=req

 xdebug.var_display_max_children=-1
 xdebug.var_display_max_data=-1
 xdebug.var_display_max_depth=-1

ここでわからなかったのはxdebug.remote_hostの値だった。結論としてはこちらはWindowsの場合、

ipconfig

で表示されるDocker側の仮想スイッチのアドレスの値を設定しておく。Googleさんに「xdebug リモートデバッグ」で検索して、よく出てくるサイトに書かれている$_SERVER[‘HTTP_X_REAL_IP’]とか$_SERVER[‘REMOTE_ADDR’]の値ではないので注意すること。

docker-compose stop
docker-compose build php-fpm workspace

でphp-fpmとworkspaceのイメージをビルドしなおす。ビルドできたら、

docker-compose up -d nginx mysql phpmyadmin

をDocker Composeを再度実行する。nginxのドキュメントルートにphpinfo()を書いたファイルを置いてアクセスしてみて、正しくxdebugが設定されているかを確認しておく。

クライアント側の開発環境はマイクロソフトのVisual Studio Code(VS Code)を使っている。あらかじめVS Codeの拡張機能であるPHP Debugをインストールしておく。次にVS Codeのデバッグの構成ファイル(launch.json)を修正する。launch.jsonは以下のように設定した。

{
  "version": "0.2.0",
  "configurations": [

   {
    "name": "Listen for XDebug",
    "type": "php",
    "request": "launch",
    "port": 9002,
    "pathMappings": {
      "/var/www":"${workspaceRoot}/src"
     },
    "ignore": [
      "**/vendor/**/*.php"
    ]
   },
   {
    "name": "Launch currently open script",
    "type": "php",
    "request": "launch",
    "program": "${file}",
    "cwd": "${fileDirname}",
    "port": 9002
   }
  ]
 }

portは、xdebug.iniのxdebug.remote_portと同じ値にする。以下のように設定するように言っているサイトもあるが、

      "serverSourceRoot": "/var/www",
      "localSourceRoot": "${workspaceRoot}/src"

serverSourceRoot、localSourceRootとも今後推奨されない設定のようなので、pathMappingsにしておく。pathMappingsの設定は、

"pathMappings": {
    "リモートディレクトリ":"ローカルディレクトリ" 
    },

のようにリモートとローカルのパスをマッピングする設定である。ドキュメントをよく読まずにリモートとローカルを反対にしてしまったので動かなくて悩んだ。こちらはnginxのドキュメントルートのディレクトリではないことに注意する。ドキュメントルートディレクトリ外のファイル(例えば、.\src\mycakephp\src\Controller\AppController.php)をデバックしようとしたときに、pathMappingsにルートディレクトリに設定してしまうとソースファイルが見つからないと言ってくる。そこでソースファイルを格納しているディレクトリを設定しておく。

ignoreの設定をしておかないと、以下のような例外が途中で発生する。どうしてかは不明である。

例外が発生しました

Aura\Intl\Exception: Package 'default' with locale 'ja-JP' is not registered.

.\src\mycakephp\webroot\index.php とかに適当にブレークポイントを設定して、Listen for XDebug”の構成でデバッグを行う。ブレークポイントを設定したところで止まるかとチェックする。後はステップオーバーでプログラムが進むか、ステップインで別のソースを参照できるか、または変数の中身を参照できるかをチェックして完了。

以上でLaradock+CakePHP3+XdebugでVS Codeを使って快適にデバッグができるようになった。以上、再度開発環境を構築する際に忘れないようにメモを残しておく。

追記

同じ設定をMacでやってみたら、niginxコンテナが起動できなかった。原因不明・・

.\laradock\nginx\sites\default.conf にゴミが入っていたのが原因だった。dockerのログを見たら原因がわかった。

無事にMacでCakePHP3のトップページを参照できた。ただしデバッグできない。

Macでもデバッグができるようなった。ただし、xdebug.ini に

xdebug.remote_host=docker.for.mac.localhost

を設定すればOKのようだ。情報はこちらのサイトから。

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

ただし、MacでDockerはとても遅い。ブラウザが表示し終わるのに時間がかかる。こちらは問題になっているようで、将来改善されるのかな?

追記2

VS CodeのターミナルからDocker Composeすると、IO Errorが出る。普通にPower Shellで実行するとうまく行く。これは、issuesに上がっているから周知の問題なのかな?

追記3

MySQLのコンテナが起動できなかったので、解決策はこちらから

LaradockでMySQLがどうしても立ち上がらない人あつまれー!