YYPHP#39「PHPの魅力、設計･オブジェクト指向、Laravelをはじめたい、やりたいことの見つけ方、ANDの才能」

これは2018年06月01日に開催したPHPerイベント[YYPHP#39]のイベントレポートです。

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

[YYPHP#39]:  https://yyphp.connpass.com/event/89789/
[YYPHP]: https://yyphp.connpass.com/
YouTubeでの配信映像はこちら-> [YYPHP #39【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】 - YouTube](https://www.youtube.com/watch?v=Is_w6DN1HKM)
![](https://qiita-image-store.s3.amazonaws.com/0/889/0051f99f-b555-6064-fcc9-3280e5543a1a.png)


## 参加者14名
* PHP歴の分布
    * 1年未満: 6名
    * 2年未満: 2名
    * 2年: 1名
    * 3年: 1名
    * 5年未満: 1名
    * 10年以上: 3名

## 今日話したいこと/聞きたいこと
### PHPの魅力とは？他の言語と比べて
* VBだとWindowsサーバが必要。お金がかかる
    * monoどうですか? https://www.mono-project.com/
* 始めたきっかけは？
    * WebでDB使う仕事でPHPだったから始めた
    * 上から降ってきた仕事で、生のPHPから入った
* 他の言語と比べてどうか？ RubyとかPython
    * PHPはウェブに特化している
    * 組み込み関数がウェブに特化したものが多い
* ウェブで使いやすい
    * 機械学習ならPythonみたいなのと同じで、ウェブならPHPという感じ
* PHPだとレンタルサーバとか環境が用意しやすい。
    * RailsとかPythonだと別のミドルウェアがないと動かせないので、初学者にとってはハードル高いかも？
* 環境が簡単につくれた、というのは前はあったかも。
    * 今はDockerがあるからあんまり関係ないかもしれないが。
    * XAMPPとかMAMPなど簡単に起動できるなど便利ツールあった。


## 設計・オブジェクト指向

* 設計。どこに何をおいたらいいのか、ビジネスロジックどこにおいたらいいか
    * 疑問点
        * 最近Laravel使っている。
        * ビジネスロジック、SQLとかが全部モデルになっちゃう。MVCだと。
    * 「ドメイン駆動設計」
        * 設計の一種
        * かっこいい！
    * どのへんが気持ち悪いと思っているのか？
        * ページとかValue Objectがぐちゃっとなってる。
        * Controller以外の何かが全部モデルに入ってきている。
        * サービス層がないってことか？
            * そうです
        * サービス層を作るにはいくつかやりかたがある
            * オニオンアーキテクチャ
            * ヘキサゴナルアーキテクチャ
            * クリーンアーキテクチャ
    * データはドメインモデルを保存する手法でしかないので、それはデータアクセス層に置く。
        * ドメインモデルはピュアなクラス
    * 設計の本
        * ドメイン駆動設計の本
        * [現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法 | 増田 亨 |本 | 通販 | Amazon](http://amzn.asia/4yVJBKU)
        * [ユースケース駆動開発実践ガイド (OOP Foundations) | ダグ・ローゼンバーグ, Doug Rosenberg, 三河 淳一, 船木 健児, 佐藤 竜一 |本 | 通販 | Amazon](http://amzn.asia/0c3xYnS)
            * Javaの設計手法でNode.jsサーバサイド書いているが、この手法を使っている。
                * ちょっと変更によわいかなって感はある。
                * ユースケース、Value Object、リポジトリパターンを使っている。
                * テストしやすくしている。

* PHPのオブジェクト指向について(基本的なこと)
* 実務で皆さんがどの程度オブジェクト指向で設計しているのか知りたいです

## Laravelを始めたい
* [Laradock](http://laradock.io/)を使ったら構築が楽で良いらしい

* .env
* なんでNginx

* Laradock以外の実行環境
    * [laravel/valet](https://github.com/laravel/valet)
        * 今仕事だと環境はDockerじゃなくてValet使ってます。
    * [Laravel Homestead 5.1 Laravel](https://readouble.com/laravel/5.1/ja/homestead.html)
        * Laravel使った開発がメインなので。homestead使用しています

* valetなどと比べて、Laradockのいいところ。
    * dockerだから
    * docker-composeまでいけるから
    * 使いたいのがデフォルトで入ってる
        * Redisとか
* PCのスペック不足でDockerきついのでValetです(辛い)

## Dockerネタ

* xdebugでデバッグしたい。環境がDocker。
    * DockerはAmazon Linuxでコンテナ作った。
    * ローカルではDocker for Windowsを使っている
        * エイリアスだらけになっているので、ちゃんと設定が必要
        * [Docker for Windowsでxdebugを使う - Qiita](https://qiita.com/ryotax/items/ecad4ba2414bc262f935)
        * [PhpStorm + Xdebugでリモートデバッグ時にデバッグクライアントに繋がらない。 - Qiita](https://qiita.com/bashishi/items/e40830884d107b4055de)
        * やったことある人がいないし、即解決するのが難しい話題ですね。
    * xdebugはphpからデバッガに対して接続しに来るのではまりがちですよね

* Dockerの仕組みについて
    * docker imagesはローカルのどこに保存されている？
        * Docker for MacはxhyveのLinuxの中にある。

```
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
cd /var/lib/docker
ls 
```

```
CTRL-A CTRL-\
```

```
docker image inspect {$image_name}
```


https://github.com/docker/cli/blob/master/vendor/github.com/docker/docker/pkg/stringid/stringid.go#L69
https://github.com/moby/moby/blob/a9bd60d674f85c2161bb702404b23501d6b746c3/daemon/container.go#L128

* docker createしたら、コンテナIDとしてSHA256ができるけど、もしかして仕組みがGitのコミットに近い？
    * → IDをランダムに生成しているだけ
        * スナップショットでもなんでもない

* そういえばDocker
    * docker push/docker pull
        * GitHub = Docker Hub
    * [Dockerイメージ管理の内部構造](https://www.slideshare.net/enakai/docker-43975886)
    * [DockerはどうやってコンテナのIDを決定しているか - Qiita](https://qiita.com/reoring/items/4aad2e297da70dbddb56)

### MVVCの構成でViewModelにもロジックに応じたHTMLViewにもHTML記述するのってどう思われますか？

```php
//【ViewModel】
if(条件) {
  tmp = "<div>TEST01</div>";
} else {
  tmp = "<div>TEST02</div>";
}
```

個人的には上記のようなのは避けて、HTMLはすべてViewにまとめて、ViewModelは表示するために必要な情報を検索するに留めるののが良いのかな……と考えています。
（HTML全体の見通しが悪くなるかな……と。）

LaravelだとBledeでIF分使うなど。

```
//【View】
@if(条件)
<div>TEST01</div>
@else
<div>TEST02</div>
@endif
```
* 結論: その通りだと思います！

## エモいはなし

### やりたいことをどうやって見つけてやっていくか？(プログラミングに関係なく)

* 勉強会に参加したら見つかった
* 自分と違う世界に行ったら見つかる
* やりたいことが見つからず苦しんでいた新卒3年目、有名な人は発信量が多いので、自分でも発信してみた
* オープンソースの恩恵を受けてて、コミュニティのみんなが親切だったので、恩返ししたいと思って活動を始めた。
* とりあえず色々行動してみる。人と会ってみる。真似てみる。尊敬できる人を探す
* 「ANDの才能」vs「ORの制圧」
    * [ゼロから始める技術書執筆 by 湊川あい](https://www.slideshare.net/AiMinatogawa/by-69678890)の31ページ参照
    * スキルを作るのではなく、自分が持ってるものをANDする
        * 好きなことは意外と子供のころからやっている

### 今日のおすすめ図書

* [プログラミング言語図鑑 | 増井 敏克 |本 | 通販 | Amazon](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E5%9B%B3%E9%91%91-%E5%A2%97%E4%BA%95-%E6%95%8F%E5%85%8B/dp/4802611080)
買いました！

[れお@reprint🍌さんのツイート: "人間のDNAは50%もバナナ🍌と同じだそう。だから自分にイライラするような時も、まぁ50%はバナナ🍌だからなーと考えると楽になったりならなかったり。"](https://twitter.com/reoring/status/1000358522138251264)

## YYPHPは毎週やってます

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

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