YYPHP#6イベントレポート「clean-code-php、Concrete5をKusanagiのDockerコンテナで動かす」

![YYPHP-ロゴ.png](https://qiita-image-store.s3.amazonaws.com/0/889/0051f99f-b555-6064-fcc9-3280e5543a1a.png)

これは2017年9月13日に開催したPHPerイベント[YYPHP#6]のイベントレポートです。

[YYPHP]は一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開発ツールを触ってみたり、フレームワークについての情報交換をすることもあります。開催は**毎週**水曜19:00に高田馬場にて。

![貼り付けた画像_2017_09_13_23_23.png](https://qiita-image-store.s3.amazonaws.com/0/889/daacac8a-6634-c364-ede6-68ee584d8b28.png)


今回は5名の方が参加してくれました！参加くださった皆さんありがとうございます。是非次回もお越し下さい〜！

[YYPHP#6]: https://yyphp.connpass.com/event/65848/
[YYPHP]: https://yyphp.connpass.com/

それでは、YYPHPで話題になったことをおさらいしたいと思います。

## clean-code-php

[PHP: Clean Code (clean-code-php) 蜜柑薬 - Qiita](http://qiita.com/tadsan/items/c47eb327684530721e8a)をちょっと眺めました。

## Concrete5+kusanagiのDocker環境を作る

Concrete5+kusanagiのDocker環境を作ることにチャレンジしました。

### Kusanagiとは

* [KUSANAGI – 超高速WordPress仮想マシン [高速化チューニング済みWordPressサーバ]](https://kusanagi.tokyo/)
* KusanagiでWordPressを動かすと10倍速い。セキュリティも強い。
* Nginx、MariaDB、HHVMやPHP7をチューニングしているVMイメージ(AWSやVMwareなど)なので、WordPressにかぎらずPHPアプリだったらパフォーマンスが上がる。
* Concrete5は激重だが3倍くらい速い。
* Dockerのほうはまだまだ開発中とのことで、本物のKusanagiとは違う。

### Docker環境の作り方

* [primestrategy/kusanagi-nginx - Docker Hub](https://hub.docker.com/r/primestrategy/kusanagi-nginx/)に載っているdocker-composeのYAMLをそのまま使う。

```
mkdir kusanagi-concrete5
cd kusanagi-concrete5
touch docker-compose.yml
```

docker-compose.ymlに下記を書く。

```yml:docker-compose.yml
version: '2'

services:
  kusanagi-data:
    container_name: kusanagi-data
    image: busybox
    restart: always
    stdin_open: true
    tty: true
    volumes:
      - /var/lib/mysql
      - /etc/nginx/conf.d
      - /etc/httpd/conf.d
      - /etc/kusanagi.d
      - /home/kusanagi
    command: /bin/sh

  kusanagi-nginx:
    container_name: kusanagi-nginx
    image: primestrategy/kusanagi-nginx:1.10.0-1
    environment:
      PROFILE: kusanagi
      FQDN: kusanagi.example.jp
      WPLANG: ja
      BCACHE: "off"
      FCACHE: "off"
    volumes_from:
      - kusanagi-data
    links:
      - kusanagi-php7:php
      - kusanagi-mariadb:mysql
    ports:
      - "80:80"
      - "443:443"

  kusanagi-mariadb:
    container_name: kusanagi-mariadb
    image: mariadb:10.0.24
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
      MYSQL_USER:     user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: wordpress
    volumes_from:
      - kusanagi-data

  kusanagi-php7:
    container_name: kusanagi-php7
    image: primestrategy/kusanagi-php7:7.0.6-1
    links:
      - kusanagi-mariadb:mysql
    volumes_from:
      - kusanagi-data
```

```
docker-compose up -d
```

この状態でブラウザhttp://localhost を開く。下記の設定でWordPressは動かせる。

![](https://i.imgur.com/3XccJ0M.png)


もしタイムアウトのエラーが出たら、


> ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

次のようにタイムアウトの設定をする。


```
COMPOSE_HTTP_TIMEOUT=240 docker-compose up
```

kusanagi-nginxコンテナの `/home/kusanagi/kusanagi/DocumentRoot` がドキュメントルートなので、ここにConcrete5を配置すればいい。


次のコマンドでnginxコンテナに入る。

```
docker-compose exec kusanagi-nginx bash
```

コンテナ内で次のコマンドを実行して、WordPressを消し、そこにConcrete5をダウンロード&配置。

```
rm -rf /home/kusanagi/kusanagi/DocumentRoot &&
yum install -y unzip wget &&
wget https://www.concrete5.org/download_file/-/view/96959/ -O concrete5-8.2.1.zip &&
unzip concrete5-8.2.1.zip &&
mv concrete5-8.2.1 /home/kusanagi/kusanagi/DocumentRoot
cd /home/kusanagi/kusanagi/DocumentRoot
chmod 777 /home/kusanagi/kusanagi/DocumentRoot/application/{files,config}
chmod 777 /home/kusanagi/kusanagi/DocumentRoot/packages
```

2017-09-13現在、primestrategy/kusanagi-php7:7.0.16-1が最新でこれでないとpdo_mysqlがないのと、GDのいろいろが入ってないのでDockerfileを作ってビルドする。

```dockerfile:Dockefile
FROM primestrategy/kusanagi-php7:7.0.16-1

RUN apk add \
			--no-cache \
			freetype \
			libpng \
			libjpeg-turbo \
			freetype-dev \
			libpng-dev \
			libjpeg-turbo-dev\
		&& docker-php-ext-configure gd \
			--with-gd \
			--with-freetype-dir=/usr/include/ \
			--with-png-dir=/usr/include/ \
			--with-jpeg-dir=/usr/include/ \
		&& docker-php-ext-install gd
```

```yaml:
  kusanagi-php7:
    container_name: kusanagi-php7
    build: . #ここ
    links:
      - kusanagi-mariadb:mysql
    volumes_from:
      - kusanagi-data
```

kusanagi-php7をビルドしなおし、

```
docker-compose build
```

コンテナを起動しなおす。

```
docker-compose up -d
```

この状態でブラウザhttp://localhost を開き、Concrete5のインストーラ画面が表示されたら成功。


## 便利テク

YYPHPで話題なった便利テク。PHPとは関係ないもの。

### 便利テク: シェルの便利なキーバインド

* ターミナルで↑を押すと、一個前のコマンドが保管される。
* 知っている人は当たり前ですが、知らない方は感動してました。

### 便利テク: iTerm2でCommand+/で焦点を表示できる

プロジェクタでiTerm2を出す時、どこにカーソルがあるか強調するときに便利。

![](https://i.imgur.com/XNy622y.png)

プロジェクタでみるとこんなかんじ。

![YYPHP-2017-09-13-00013.jpg](https://qiita-image-store.s3.amazonaws.com/0/889/97e8eac2-5855-d0cb-8188-1eba80357624.jpeg)



## YYPHPは毎週やってます

PHPについてワイワイ話したい方は、[YYPHPのイベント情報](https://yyphp.connpass.com/)をチェックしてみて下さい。

以上、YYPHP#6のレポートでした。次回もワイワイやっていきたいと思います！ では、また来週！