laradockでXdebugを使おうとしたらエラーと戦うことになった話

どうもやまうちです。

PhpStormとLaradockを使ってXdebugの導入をしようと思っていたところエラーとの戦いになりました。
`docker-compose up --build nginx mysql workspace`
これをしたらめっちゃエラー出ました(；´Д｀)
エラー出ると冷静になります。
間違えました、放心状態になります。
かっこよく言うと茫然自失です（今調べました）。

とはいえXdebugの導入がスタートラインなので立ち止まるわけには行きません。
結果としては無事導入できました。
ということで今回の記事は解決記録です。

## この記事を書くまでの話
※いきなり本編の裏話的な話なので次まで飛ばしても1ミリの支障もございません

「今週はデバッグの記事書くぞ～！」
と意気込む午後10時。
Qiitaを開き導入文を書き始める。
ちょっと知識を得て調子に乗っているボクは、デバッグをまだ使っていない後輩たちを~~煽るために~~奮い立たせるために、手を止めることなく導入文を書き終えた。
叩くキーボードの音に心地良ささえ感じていた。

その余韻に浸かっているさなか、ボクは気づいた。
「そういや職場のPCにはデバッグ環境あるけど、自宅PCにはねえな」
「軽く導入でもするか－－－」
ナッパがあいさつがわりに「クン」と東の都を消したときのように、
ボクもXdebugの導入を「クン」した。

その「クン」が戦いの合図になるとも知らずに・・・。

## 環境
- Winddows10 pro
- Docker for windows
- Laradock
- PhpStorm


## PhpstormにXdebugを導入

何も見ずに導入できるハズもなくググりました。
そこでたどり着いたこの記事を参考に導入を進めました。

参考記事：[Laradock+PhpStormでXdebug - けけずんセルフハッキング](https://kkznch.hatenablog.com/entry/2018/01/02/143508)

1. xdebug.iniを編集
2. .envを編集
3. `docker-compose up --build nginx mysql workspace`を実施
4. エラー出る
5. (；・∀・)

`docker-compose up --build nginx mysql workspace`こいつでエラーか。
ちっ、しゃーねーなぁ。

### workspaceのエラー
こんなエラーが出ました。

```
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ERROR: Service 'workspace' failed to build: The command '/bin/sh -c if [ ${INSTALL_XDEBUG} = true ]; then     apt-get install -y php${LARADOCK_PHP_VERSION}-xdebug &&     sed -i 's/^;//g' /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/2
0-xdebug.ini &&     echo "alias phpunit='php -dzend_extension=xdebug.so /var/www/vendor/bin/phpunit'" >> ~/.bashrc ;fi' returned a non-zero code: 100
```

これから分かることは
1. workspace関連のエラー
以上！！
要するになんもわからん！！！！ｗｗｗｗｗｗｗｗｗｗｗｗｗｗ
いや草も生えねえよ、こんなエラー。

とりあえずググってこのページにたどり着く。
[Php 7.2 XDebug install error · Issue #1847 · laradock/laradock · GitHub](https://github.com/laradock/laradock/issues/1847)

英語アレルギーの症状が出ているがそんなこと言っている場合でもなく、冷静にボタンを押す。
このページを翻訳しますか？ [翻訳] ﾎﾟﾁ
__読めるっ！読めるぞおおおお！！！！！__

### laradock/workspace/Dockerfileを編集する
なんかこんなことが書いてあった。

> edit file laradock/workspace/Dockerfile line 261
> `apt-get install -y php\${LARADOCK_PHP_VERSION}-xdebug && \`
> to
> `apt-get update && apt-get install -y php\${LARADOCK_PHP_VERSION}-xdebug && \`
> then run docker-compose build workspace

何を言ってるのかはわからないが()、なんかそれっぽいのでDockerfileの該当箇所を編集してみた。
そして`docker-compose up --build nginx mysql workspace`

お！挙動が変わった！うまくいっ・・・ん？

### php-fpmのエラー
またエラー。

```
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ERROR: Service 'php-fpm' failed to build: The command '/bin/sh -c if [ ${INSTALL_IMAGEMAGICK} = true ]; then     apt-get install -y libmagickwand-dev imagemagick &&     pecl install imagick &&     docker-php-ext-enable imagick ;fi'
returned a non-zero code: 100
```
上の方にもっと色々出てたけど、とりあえずこちら↑のみ掲載。
例のごとく何言ってるのかわからないので、ググる。
そしてQiitaの記事にたどり着く。
[laradock(Docker)+PhpStorm環境のxdebug導入でphp-fpmのエラーが起きる - Qiita](https://qiita.com/Gummy/items/f07692d3280a6e672a85)

### laradock/php-fpm/Dockerfileを編集
`laradock/php-fpm/Dockerfile`のImageMagickのこれ↓を

```
RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
    apt-get install -y libmagickwand-dev imagemagick && \
    pecl install imagick && \
    docker-php-ext-enable imagick \
;fi
```
こう↓しろって書いてあったからする

```
RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
    rm -rf /var/lib/apt/lists/* && \
    apt-get update && \
    apt-get install -y libmagickwand-dev imagemagick && \
    pecl install imagick && \
    docker-php-ext-enable imagick \
;fi
```

んで`docker-compose up --build nginx mysql workspace`
よし！いい感じ！今度こそうまｋ・・・おいいいぃぃぃ！！

### nginxのエラー
今度はこんなエラー

```
adduser: group 'www-data' in use
ERROR: Service 'nginx' failed to build: The command '/bin/sh -c apk update     && apk upgrade     && apk --update add logrotate     && apk add --no-cache openssl     && apk add --no-cache bash     && adduser -D -H -u 1000 -s /bin/ba
sh www-data' returned a non-zero code: 1
```

まあ似たような内容のエラー。
workspaceのエラーとphp-fpmのエラーの経験を活かして頑張ろうとしたけど、1ミリもわからずにググった。
[Laradockコンテナのビルドで ”adduser: group 'www-data' in use” が発生したときの対応【メモ】 - I am a software engineer](https://imanengineer.net/laradock-build-faild-adduser-group-www-data-in-use/)

### laradock/nginx/Dockerfileを編集
記事にはこう書いてた。

```
RUN apk update \
     && apk upgrade \
     && apk add --no-cache openssl \
-    && apk add --no-cache bash \
-    && adduser -D -H -u 1000 -s /bin/bash www-data
+    && apk add --no-cache bash
+
+RUN set -x ; \
+    addgroup -g 82 -S www-data ; \
+    adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1
 
 ARG PHP_UPSTREAM_CONTAINER=php-fpm
 ARG PHP_UPSTREAM_PORT=9000
```
昔の自分ならよくわからん書き方だが、今なら分かるっ！
ということで`laradock/nginx/Dockerfile`のこれ↓を

```
RUN apk update \
    && apk upgrade \
    && apk --update add logrotate \
    && apk add --no-cache openssl \
    && apk add --no-cache bash \
    && adduser -D -H -u 1000 -s /bin/bash www-data
```
こう↓した

```
RUN apk update \
    && apk upgrade \
    && apk --update add logrotate \
    && apk add --no-cache openssl \
    && apk add --no-cache bash

RUN set -x ; \
    addgroup -g 82 -S www-data ; \
    adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1
```

んで、`docker-compose up --build nginx mysql workspace`
うまく行きました！！！

### あとは進むだけ
[Laradock+PhpStormでXdebug - けけずんセルフハッキング](https://kkznch.hatenablog.com/entry/2018/01/02/143508)
あとはこの↑記事通り進んで無事にデバッグできるようになりました。
ということでデバッグに関する記事はまた後日・・・。

### エラーとの戦い
とりあえず無事にXdebugの導入という目標は達成したわけですが、
エラーに関しては裏側で何が起きてて、Dockerfileを編集したことどう変わったのかはわかりません！！！(；・∀・)
それはおいおい知識を付けていきますm(_ _)m

エラーが発生したらググる！
ボクがやっているレベルくらいの話であれば、たいていこれで解決できるはずです。
解決しないときはググり力が足りていないんだと思います。

どういうワードで検索したら良いかわからないことはよくあると思います。
とりあえずそれっぽいワードなんでもいいので調べましょう。
そしたらそれっぽいワードを拾えたりするので、それをまたググる。
そんなことをしてたら答えに近づいていけます！

先輩が教えてくれた記事を共有しますので、読んでみてください。
[Vue.js未経験のベテランプログラマーに作業依頼したところ難なくこなしてしまうのですが、隠れて努力してるのでしょうか？それとも経験により新しいフレームワークにも対応できてしまうのでしょうか？に対する阿部 誠 (Makoto Abe)さんの回答 - Quora](https://jp.quora.com/Vue-js%E6%9C%AA%E7%B5%8C%E9%A8%93%E3%81%AE%E3%83%99%E3%83%86%E3%83%A9%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%AB%E4%BD%9C%E6%A5%AD%E4%BE%9D%E9%A0%BC%E3%81%97%E3%81%9F%E3%81%A8%E3%81%93/answers/184097586?ch=10&share=b28d19af&srid=j9oLu)

エラーに負けずに戦おう！