YYPHP#84「良いって聞くけどLaravelって実際どうなの？」「俺のチームのGitワークフローのレビューをしてくれ！」「外部キー制約の話をしよう」「DDDやデザインパターンを学ぶのにオススメの書籍」「LinkedIn Learningが意外と良さそうな動画学習コンテンツがありそうな件」「PhpStormのプラグインdeep-assoc-completionが便利すぎる件」「最近のWindowsが良さそう」

これは2019年05月17日に開催したPHPerイベント[YYPHP#83]のイベントレポートです。

[YYPHP#84]: https://yyphp.connpass.com/event/122135/
[YYPHP]: https://yyphp.connpass.com/

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

__今回の配信動画__

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">YYPHP第84回 〜PHPerための雑談イベント〜 生配信開始しました！ <a href="https://t.co/gcLKKq4Kw3">https://t.co/gcLKKq4Kw3</a></p>&mdash; suin❄️PHPでオブジェクト指向 (@suin) <a href="https://twitter.com/suin/status/1129331796745760768?ref_src=twsrc%5Etfw">2019年5月17日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


__過去回の配信動画__

https://www.youtube.com/playlist?list=PLpOeTEye3Bg6PodrLHHC72jWMJYZz8VbG

## 雑談

### Laravelが良さそうって聞くけど実際どうなの？ (こうら)

* どんなフレームワーク使ってる？

* 使ったことあるFW
    * FuelPHP
    * CakePHP
    * Laravel
    * どれも広く浅く触っているので、良さに気がついてないと感じる
* みなさんどういうフレームワーク使われています？
    * FuelPHP: 2
    * CakePHP: 5
    * Laravel: 6
    * Sabel: 2
    * Symfony: 3
    * Phalcon: 0
* Laravelがなぜいいと思う？
    * トレンド的にはPHPのフレームワークでLaravelが一番勢いがあって、ユーザも多くなってきている。
    * 日本語の情報が多くなってきている。
    * Ruby on Railsよりも手早く作れるようになってきている気がする。
        * ログインを扱うgemがいくつかあってベストがどれかいちち調査しないと行けない
        * Laravelは公式でちゃんと用意されている。
        * そういうところで迷わなくて良い。
* なぜLaravelの人気が高くなってきている？
    * Laravelがちゃんと作られているからだと思う
        * コードがキレイ
* CakePHP3は
    * DIの機構がデフォで入ってない
    * LaravelではDIの機構がデフォである
    * Vue.jsなどフロントエンドとの統合が自分でやらなくていい
* Laravelはネットワーク効果が聞いてる気がする
    * 色んな人が携わっているので、ライブラリとか情報とか、エコシステムが発展している

### 俺のチームのGitワークフローのレビューをしてくれ！ (しのだ)

* 俺のチームのGitワークフロー
    * A Successful Git Branch Model
    * [A successful Git branching model » nvie.com](https://nvie.com/posts/a-successful-git-branching-model/)
    * どこでどのようなテストを実施するかという言及はない。
        * 単体テスト、結合テスト、受け入れテストなど
    * 問題点
        * releaseブランチが早くはリリースされて、masterブランチに入らないと、開発のライフサイクルが遅くなる。
        * developブランチがちゃんと動くものにしておこうとすると、featureブランチでちゃんとテストしないといけない
            * だが、featureブランチではそこまでちゃんとテストできない
            * Seleniumとかまで動かせない
        * developブランチが安全である保証がない
    * どのように解決したか
        * featureブランチをreleaseブランチにマージするようにした
        * [GitFlowは使わない！シンプルな「GitFeatureFlow」を紹介します - ぐるなびをちょっと良くするエンジニアブログ](https://developers.gnavi.co.jp/entry/GitFeatureFlow/koyama)
* Q&A
    * Git Flowって複雑すぎて、100人とかそれ以上じゃないと効果が出ない気がしますが、Git Flowはどのくらいの規模を想定しているのですか？
        * 8人がmaxだと思う
            * 8人だと重すぎません？
                * 重すぎるかどうかは、扱う製品の安全性をどこまで大事にするか次第
    * Git Flowは知っているけどやってないってことですか？
        * Gitの管理にコストが出ないことがある
        * 管理のコストにメリットが見合わないことがある
    * Seleniumテスト導入した人？
        * 実行時間はどのくらい？
            * 数時間かかる
            * ナイトリー(1日1回)
        * feature単位ではやってなかった
    * Seleniumテストって何？
        * ブラウザを動かして行うテスト
        * 準備が大変
            * Windowsとサーバを用意しないといけない
            * 並列できるようにいくつかマシンも用意しないといけない
        * なので、各自でやるのは難しいのが現状
    * 何人でやっている？
        * 一番多いときで6人
        * アルバイトで週2の人も

### 外部キー制約の話をしよう。 (よだか)

* 外部キー制約は必ずつけるべきなの？
* `SELECT FOR UPADATE`をつけるだけでは？
* `DELETE ON CASCADE`を使うだけ
* みなさん貼る派ですか？
    * RDBは高い整合性を保てるのがセールスポイントなので絶対つける
* 基本は貼っておいたほうがいい    
    * 不便だからはらないというのは違う気がする。
* 貼らなかったケース
    * データ量がかなり多くなってDBを分けなければんらなくなったとき
* 大きいデータになったらNoSQLとかもあるかも

### DDDやデザインパターンを学びたい (よだか)

DDDはすごく難しいという話を聞いた。
Eric Evansの本は難しいと聞いた。
デザインパターンを学ぶにあたって初心者にオススメの本を教えて。

* [ドメイン駆動設計 基本を理解する](https://www.slideshare.net/masuda220/ss-59756718)
* [アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技 | ロバート・C・マーチン, Robert C. Martin, 瀬谷 啓介 |本 | 通販 | Amazon](https://www.amazon.co.jp/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E5%A5%A5%E7%BE%A9-%E7%AC%AC2%E7%89%88-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E9%96%8B%E7%99%BA%E3%81%AE%E7%A5%9E%E9%AB%84%E3%81%A8%E5%8C%A0%E3%81%AE%E6%8A%80-%E3%83%AD%E3%83%90%E3%83%BC%E3%83%88%E3%83%BBC%E3%83%BB%E3%83%9E%E3%83%BC%E3%83%81%E3%83%B3/dp/4797347783)
* [PHPによるデザインパターン入門 | 下岡 秀幸, 道端 良, 畑 勝也 |本 | 通販 | Amazon](https://www.amazon.co.jp/PHP%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E4%B8%8B%E5%B2%A1-%E7%A7%80%E5%B9%B8/dp/4798015164)
    * [書籍「PHPによるデザインパターン入門」の原稿テキストを公開します - Do You PHP はてブロ](http://shimooka.hateblo.jp/entry/20100301/1267436385)
* デザインパターンは
    * デザインパターンが考えられたときには無かった技術があったりするので、今は重複しているものもある
    * デザパタ通用するかは、言語や技術によって異なる
        * Iteratorとかは言語に組み込まれている場合もある
* 初心者がDDDを学び始めるというのは
    * やっておいても損はないけど、デザインパターンを使いすぎちゃうと逆に駄目かも
    * やってみないとわからない
        * やってみた人から学ぶのも大事かも
* DDDがちゃんとぴったりはまるプロジェクトが多くない気がする
    * 悩むことがすごい増えるので足取りは遅くなることはある
    * 開発期間に余裕がないと
        * DDDの要素をちょっとずつ入れていくのがいいかも
* オブジェクト指向力をちゃんとつけることが優先
    * DDDはオブジェクト指向の応用なので

### LinkedIn Learningが意外と良さそうな動画学習コンテンツがありそうな件 (suin)

PHP関連

* [「PHP 基本講座」コースへようこそ！: PHP 基本講座](https://www.linkedin.com/learning/php-essential-training/543022)
* [「PHP 入門」コースへようこそ！: PHP 入門](https://www.linkedin.com/learning/learning-php/522667)

DB

* [「プログラミングの基礎：データベース 」へようこそ: プログラミングの基礎：データベース](https://www.linkedin.com/learning/programming-foundations-databases-3/2912091)
* [「PHP+MySQL 入門」コースへようこそ！: PHP+MySQL 入門](https://www.linkedin.com/learning/learning-php-and-mysql/522501)
* [「MySQL 入門」コースへようこそ！: MySQL 入門](https://www.linkedin.com/learning/learning-mysql/521820)

JavaScript

* [「TypeScript 入門」コースへようこそ！: TypeScript 入門](https://www.linkedin.com/learning/learning-typescript/558254)
* [「Vue.js 入門」コースへようこそ！: Vue.js 入門](https://www.linkedin.com/learning/learning-vue-js-2/622429)
* [「React.js 入門」コースへようこそ！: React.js 入門](https://www.linkedin.com/learning/learning-react-js/540567)
* [「ECMAScript 6でReact.jsのアプリケーションを作ろう」コースへようこそ！: ECMAScript 6でReact.jsのアプリケーションを作ろう](https://www.linkedin.com/learning/building-a-game-app-with-react-js-and-ecmascript-6/629188)
* [「ECMAScript 6 入門」コースへようこそ！: ECMAScript 6 入門](https://www.linkedin.com/learning/learning-ecmascript-6-2/691269)
* [「JavaScriptで関数型プログラミングを学ぶ」コースへようこそ！: JavaScriptで関数型プログラミングを学ぶ](https://www.linkedin.com/learning/learning-functional-programming-with-javascript-2/682215)
* [「Ajax 入門」コースへようこそ！: Ajax 入門](https://www.linkedin.com/learning/learning-ajax/543627)

オブジェクト指向

* [オブジェクト指向プログラミングの特徴: Java オブジェクト指向プログラミング講座](https://www.linkedin.com/learning/java-object-oriented-programming/547009)
[「プログラミングの基礎：オブジェクト指向」コースへようこそ！: プログラミングの基礎：オブジェクト指向](https://www.linkedin.com/learning/programming-foundations-object-oriented-design-2/740019)
* [オブジェクトは人が認識した概念: UML 入門](https://www.linkedin.com/learning/learning-uml/528133)

### Composerのはなし (かきうち)

* composerを本番サーバにインストールしなくても、作ったアプリは動くのか？
    * 動く
    * vendorディレクトリ
        * gitのrepositoryに入れておくとconflictをする場合もある
    * 安全性をとるならvendorもgitに入れるべき
    * プロジェクトの方針は決めておいたほうがいい
* 本番サーバにcomposerをインストールしなくてもアプリが動く理由は？
    * composerはただのコマンドだから
    * composerがコード生成したら、もうcomposerコマンドはいらない

### レビューとかがない環境なので自分が書いてるコードがどうなのか客観的に見れない。実務に使える技術習得どうしたらいいのか。 (りょう)

* いい師匠、メンターを見つける。
    * 勉強会、
    * YYPHPのSlackでレビュー依頼を出す
* IDE
    * インスペクション
* もっとうまいやりかたが無いのかと思う。
    * フレームワークもそうだし、設計も。

### PhpStormのプラグインdeep-assoc-completionが便利すぎる件 (suin)

![](https://raw.githubusercontent.com/klesun/phpstorm-deep-keys/master/imgs/screenshot.png)

* [klesun/deep-assoc-completion: A phpstorm plugin for associative array key typing and completion](https://github.com/klesun/deep-assoc-completion)
    * 配列のキーを`ctrl`+`space`を押すと補完してくれる。
    * PHPコードを読み取って配列のキーを補完してくれる。
    * DocCommentに配列の構造を定義するとそれも解釈してくれる。
    * 最近、なんと静的解析ツールの[Phan]や[Psalm]の記法にもサポートした。
        * バージョン2019.05.08.001から。
        * [Support PSALM/phan phpdoc notation · Issue #77 · klesun/deep-assoc-completion](https://github.com/klesun/deep-assoc-completion/issues/77)

[Phan]: https://github.com/phan/phan
[Psalm]: https://psalm.dev/


## 雑談開始前の雑談

### 最近のWindowsが良さそう

* 最近のWindowsが良さそう
* WSL2
    * デモ動画見ました？
        * 爆速ですごかった
    * WSL1でDocker試したけど動かなかった
    * WSL1はNTカーネルのシステムコールに置き換えてたっぽい
    * WSL2は本物のLinuxカーネル
* Windows Terminal
    * オープンソース
* MacからのWindowsへのスイッチコストがすごそう
* 最近Mac離れがある
* 自分のMacを会社に持ち込んでるんですか?
    * Yes(の人がいた)
    * BYOD Bring in Your Own Device


## YYPHPは毎週やってます

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

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