WSL2+docker+PHPのWindows開発環境構築(3) PHPStorm編

本ページに直接来た方は[WSL2+docker+PHPのWindows開発環境構築(1) WSL2編]から読んでね。

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

----
------------------- ↓ 余談はここから ↓-------------------
[Laradock]:http://laradock.io
 [WSL2+docker+PHPのWindows開発環境構築(1) WSL2編]:https://qiita.com/dozo/items/9d9e958d4acefffb3fb8
[WSL2+docker+PHPのWindows開発環境構築(2) docker編]:https://qiita.com/dozo/items/17d0ebfb05bb4446caed
[WSL2+docker+PHPのWindows開発環境構築(3) PHPStorm編]:https://qiita.com/dozo/items/7bc21b59bae91bfd1ae1



 関連記事:

 * [Bash on Ubuntu on Windowsを使う(1)](https://qiita.com/dozo/items/07ae85ab3937d2ed675a)
 * [Bash on Ubuntu on Windowsを使う(2)：初期設定](https://qiita.com/dozo/items/6cbedf3fd057b50d0ada)
 * [Bash on Ubuntu on Windowsを使う(3)：WindowsからLinuxを使う](https://qiita.com/dozo/items/ff41ece3771affda8845)
 * [WSL2+docker+PHPのWindows開発環境構築(1) WSL2編]
 * [WSL2+docker+PHPのWindows開発環境構築(2) docker編]
 * [WSL2+docker+PHPのWindows開発環境構築(3) PHPStorm編] ← イマココ

前回docker起動までいけた。
あとはPHPStormと繋げれば良い。

('ω')ノ あとすこしやで


----
------------------- ↓ 本題はここから ↓-------------------
## Dockerの調整

タスクバーのdockerアイコンから「setting」を選択
以下にチェックを入れて「Appli&Restart」

* `Expose daemon on tcp://localhost:2375 without TLS`

![キャプチャ-202003091735.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40697/54b440d3-b0c8-c217-3dfd-a5469f16769a.jpeg)


## PHPStormの調整

### Pluginのインストール

兎にも角にもプラグイン。
`Docker`と`PHP Docker`をインストール

[File]-[Setting]-[Plugins]から以下の二つをインストール

* `Docker`
* `PHP Docker`

![キャプチャ-202003091743.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40697/e30b8c71-f766-f5d0-5e4e-c5bfd053bea0.jpeg)

(`PHP Remote Interpreter`ってのも一緒に入る)

### Docker Pluginの設定

「Build, Execution, Deployment」-「Docker」-「+」を押下
「TCP socker」にチェックを入れて「OK」を押下

![キャプチャ-202003091744.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40697/606e08cd-12c7-9d46-6af7-6ceca979fffa.jpeg)

## PHP Pluginの設定

「Languages & Frameworks」-「PHP」-「Cli Interpreter」-「...」を押下


![キャプチャ-202003091751.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40697/a3187d3f-c46b-f216-3351-1ed553aeb002.jpeg)

「Cli Interpreters」欄の「+」を押下、
「From Docker, Vagrant, Vm, WSL, Remote...」を押下する。

![キャプチャ-202003091755.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40697/8632742e-6e1a-bc3e-7849-49f52deee779.jpeg)

「Image Name」欄の「▼」を押し、
「laradock_php-fpm:latest」を選択

![キャプチャ-202003141546.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40697/0493eb2e-9035-4043-16c1-9cb420ad0638.jpeg)

コード補完が効いていたら成功だ。
これで実際の開発に入ることができるだろう。
(゜-゜) こんなに頑張らないと物作れないってどうなんだろ・・・。


このあとGitやらXdebugやら使うことになると思うが、
それは一般的なものなので今回は省く。
（過去記事のどれかでやったっけな。）


----
------------------- ↓ 後書はここから ↓-------------------
これだけやって、
ようやく使えるDockerってどうなの？
（ワイだけかな）
まぁ、AWSのデプロイ考えたらdockerなのかなぁ。
ほかの方法だとイメージを量産する感じになっちゃうし。
環境を作るって観点だけで物事を考えたらいかんか。

今回はlaradockでやったけど、
これがなければ環境作りだけで時間を食い潰してただろうな。
いまいちDocker Hubの扱い方がよくわからない。

## PHPStormのインストール先
(令和2年4月11日追記)

WSL2でファイルアクセスのパフォーマンスは向上しているが、
LinuxからWindowsのディレクトリアクセスは逆に遅くなっている。

https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-ux-changes

もし `C:\Users\magic`配下とかにGit Cloneとかした場合、
composer installとかnpm installとかがめちゃくちゃ遅くなる。
（webpackとか目も当てられない感じだった）

なので、ファイルの保存先はLinuxファイルシステム上にする一択となる。
ここで問題となるのが、
PHPStormのインストール先。
VSCodeはWSL越しのリモート開発機能が実装されていて、
WindowsにインストールしたVSCodeからLinux上へのファイルアクセスがスムーズになっている。
しかし、PHPStormを含むその他のIDEはそうなってない。

#### Linux上にPHPStormをインストールする場合

インストール方法自体はこの辺で書いてる

* [Windows Subsystem for Linux(旧bash on windows)からPhpStormを動かす](https://qiita.com/dozo/items/9bf3965614075f6319f9)
* [fcitxで作るWSL日本語開発環境](https://qiita.com/dozo/items/97ac6c80f4cd13b84558)

変更点とすれば

記事ではVcXsrvを使ってるが、
今はX410使ってる。

X11設定にはlocalhostが使えなくなってるので、
`/etc/resolv.conf`のnameserver欄のIPを使用する。

```
$ echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0" >> ~/.bashrc
```
（bash長いこと使ってないから書き方あってるかわからん・・・）

#### Windows上にPHPStormをインストールする場合

WindowsからLinux上のファイルへアクセスする流れになるが、
UNC方式(`\\wsl$\ubuntu`みたいなバックスラッシュから始まる名称)でアクセスすると、
二度目開いたときに.ideaが読み込まれなくなる変な状態になっている。
(令和2年4月11日現在、バグだと思うので修正はされると思うが)

なので代替案としてドライブレターを与えて、
そこからアクセスするようにする。

```
C:\> net use z: \\wsl$\ubuntu
```


## MySQLが起動しない

PHPとは関係ないが、
Dockerがらみ。
DockerコンテナでMySQLだけが起動しない。

```
$ docker-compose up -d --build mysql
```

シーン・・・。

(?_?) アレ？
ログ見てみよう。

```
2020-03-14 18:48:39+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-03-14 18:48:39+09:00 [Note] [Entrypoint]: Initializing database files
2020-03-14T09:48:39.973002Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-03-14T09:48:39.973444Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 22
2020-03-14T09:48:39.986553Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
2020-03-14T09:48:45.126054Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
2020-03-14T09:48:45.126403Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2020-03-14T09:48:45.126758Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-03-14T09:48:46.659592Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.
```

|ω・) ナニコレ

データディレクトリをいったん削除してもう一回起動

```
2020-03-14 18:48:39+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-03-14 18:48:39+09:00 [Note] [Entrypoint]: Initializing database files
2020-03-14T09:48:39.973002Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-03-14T09:48:39.973444Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 22
2020-03-14T09:48:39.986553Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
2020-03-14T09:48:45.126054Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
2020-03-14T09:48:45.126403Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2020-03-14T09:48:45.126758Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-03-14T09:48:46.659592Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.
2020-03-14 18:53:21+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2020-03-14 18:53:21+09:00 [Note] [Entrypoint]: Initializing database files
2020-03-14T09:53:21.968144Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-03-14T09:53:21.969067Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.19) initializing of server in progress as process 22
2020-03-14T09:53:21.987587Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2020-03-14T09:53:27.708440Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
2020-03-14T09:53:27.708719Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2020-03-14T09:53:27.709077Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-03-14T09:53:29.169116Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.
```

( ﾟДﾟ)ﾊｧ? 余計悪化した。。。
ちょっと掘り下げてみるか。。。

permissionって書いてあるから権限回りだろう・・・( ﾟдﾟ)ﾊｯ!
そういえばこのDocker設定作ったのはMac野郎だった。

```docker-compose.yml
  mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    user: "500:500"
    volumes:
・・・・
```

やっぱり。
WSL上のuserIDとdocker上のuserIDがあってない。
WSL上のUIDを確認してみよう。

```
C:\> wsl
$ id
uid=1000(dozo) gid=1000(dozo) groups=1000(dozo),・・・
```

docker-compose.ymlを調整

```docker-compose.yml
  mysql:
    image: mysql:8.0
    ports:
      - 3306:3306
    user: "1000:1000"
    volumes:
・・・・
```

Mysqlのデータを全削除。
イメージを削除して、コンテナを再構成

```
$ rm -Rf /mnt/c/Users/magic/mysql/data/*
$ docker rm bc57ea450000
bc57ea450000
$ docker rmi 9b51d9270000
Untagged: mysql:8.0
Untagged: mysql@sha256:4a30434ce03d2fa39
・・・
79e9d07a19e3a8d49010ab9c98a2c348fa116c87
$ docker-compose up -d --build mysql
Creating laradock_mysql_1 ... done
```

直った・・・。