YYPHP#51「みんなが好きなフレームワーク、どのくらいまじめにテストやってる？、PHPを使う上でこれは知っておくべきこと、1番詳しいPHPの技術書はどれですか？、Dockerのベストプラクティスについて聞きたい、アプリケーションのGitリポジトリとインフラのGitリポジトリをそろそろ一緒にしていいか？、PHPUnitのコードバレッジと実行速度の話、PHPとオブジェクト指向を知り尽くした人がこれから目指すさらなる高み」

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

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

[YYPHP#51]:  https://yyphp.connpass.com/event/100183/
[YYPHP]: https://yyphp.connpass.com/
YouTubeでの配信映像はこちら-> [#YYPHP #51【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】](https://youtu.be/1UCZoG9CAa4)

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

## 参加者16名(うちリモート6名)

* PHP歴
    * 1年未満: 4名
    * 2年未満: 1名
    * 2年: 1名
    * 3年: 1名
    * 5年: 1名
    * 4年: 1名
    * 6年: 1名
    * 8年: 1名
    * 10年以上: 5名

## みんな好きなフレームワークを聞いておこうかな

* 質問
    * メインで使っているフレームワークは何？
    * それを選んだ理由は？
* 独自FW(とても良くないと学び) → Symfony → CakePHP2(ユーザが多かったため) → Cake3
* アンケート
    * Laravel ６
        * 会社で使ってる
        * 調べたら一番使われてた
        * 流行ってたから
        * 良いものだから使ってる
            * 標準でいろいろ入ってて迷わず使える
    * CakePHP3 ３
        * ２から使ってるから
        * ２０１７年７月時点で日本語情報が多いという理由で選ばれた
            * いまはLaravelの方が多いと思う
    * Symfony3 1
        * 入った会社で採用していた
        * Ruby on Railsを参考にしたと聞いて
            * 良いところを引き継いでいて、良くないところが改善されてる
                * SQLでなくDQLで書ける
    * 独自フレームワーク ４ （作ってた ３）
        * もっと良いフレームワークが欲しかったから
        * フレームワークの仕組みを学んでるうちに作ったら面白そうで作り出した
        * 僕のほうが良いフレームワークを作れると思ったから
* なぜ独自フレームワークが良くないのか気になる
    * 自分たちでメンテしないといけない
    * 普通のフレームワークは進化していくので、陳腐化してしまう
    * 既存のフレームワークに勝つつもりでやらないとだめ
    * フレームワークの開発者が退職してしまって困る
* Laravel 5.7がリリースされた

## みなさん、どのくらいテストをまじめにやっていますか？

* モンキーテスト(アドホックテスト)しかやってない
    * [モンキーテスト（アドホックテスト）とは - IT用語辞典](http://e-words.jp/w/%E3%83%A2%E3%83%B3%E3%82%AD%E3%83%BC%E3%83%86%E3%82%B9%E3%83%88.html)
* 全部のメソッドをテストするのか？
* テストするのが怖い(メールを飛ばすコマンドなど)やつはどうテストするのか？
    * メール送信のテストはMailHogをつかうといい
        * MailHogはHomesteadにも入っている
        * Laradockを使っているなら、コンテナを追加するだけ
        * [GitHub - mailhog / MailHog：WebとAPIベースのSMTPテスト](https://github.com/mailhog/MailHog)
    * SaaSでは mailtrap.io
        * APIリミットがあって秒間何百通送ると、テストがFAILになってしまう
        * [Mailtrap.io — Fake smtp testing server. Dummy smtp email testing](https://mailtrap.io/)
* 単体テストと結合テストをわけて考えて、
    * モックにできるようにクラス設計して
    * DIできるようにしておく
        * テストでは、匿名クラス `$obj = new class {}` を使うと、モックが作れる
        * Mockeryというモックライブラリもある
    * ディレクトリやネームスペースはちゃんと分けておいたほうが良い
        * １回１０分かかるとリズムが崩れる
        * 途中から分けるのは大変、やるなら最初から

## PHPを使う上でこれは知っておくべきこと (PHP歴1年からの質問)

* たとえば、DIとか
* PhpStormを使おう
    * `foreach ($items as)`でそれ以降が補完される
* Composerを使おう
* PSRを知っておこう。PSR-2, PSR-4
* [PHP: The Right Way](http://ja.phptherightway.com/) を読もう!
    * :kr: [PHP: The Right Way](http://modernpug.github.io/php-the-right-way/)
* 知らない関数は全てPHP公式サイト（ https://php.net ）で確認すべき
* 配列系の関数は全て目を通すと信じられない程はかどりますよ
    * [PHP: 配列 関数 - Manual](http://php.net/manual/ja/ref.array.php)
    * 文字列系も
        * [PHP: String 関数 - Manual](http://php.net/manual/ja/ref.strings.php)
* 比較演算子の闇を見ておく
* SuinさんのQiitaの記事を読む
    * [suin - Qiita](https://qiita.com/suin)
* Psysh (サイシュ) ・・・ REPL
    * [PsySH](http://psysh.org/)
* PHPの闇: in_arrayの第三引数にtrueを突っ込んで置かないと、内部の検索が==になって死ぬ
* Generatorと`iterable`を学ぶ
    iterable pseudo(すど) typeを知る
    Splほにゃほにゃを学ぶ
    • SplObjectStorage
    • SplStack
    • SplQueue
    など

## 一番くわしいPHPの技術書はどれですか？

* なかなかないらしい…（古くなっちゃう）
* [Mastering PHP 7 | Now just $10](https://www.packtpub.com/application-development/mastering-php-7)
* オライリーのSafari
    * [O'Reilly Japan - Safari Books Online](https://www.oreilly.co.jp/safari/)
    * 何万冊の技術書がある → 11,834冊
    * 月4,000円 (月1冊技術書買う人はやすい)
    * Google翻訳にかけると日本語で読める (翻訳は結構な精度)
* 徳丸本 『[体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 | 徳丸 浩 |本 | 通販 | Amazon](https://amzn.to/2CzAGNW)』
    * ちょっと外れるがおすすめしたい
    * Webアプリのセキュリティー

## Dockerのベストプラクティスについて聞きたいことがある

* Dockerでサーバを立ち上げてみたが、、、
* docker-composeがおすすめ
* Kubernetesはdocker-composeではない。
* Kubernetesほどはいらないけど、という場合はDocker Swarm
* Komposeっていうやつを使うとdocker-compose.ymlからKubaternetesのファイルを書き出してくれる
* GKE
    * [Google Kubernetes Engine  |  Google Cloud](https://cloud.google.com/kubernetes-engine/)
* どういうときに、どういう作りにしたらいいか？

## アプリケーションのGitリポジトリとインフラのGitリポジトリをそろそろ一緒にしていいか？

* Ansible → Dockerになってきていて、ファイル数も少なくなってきているし、そろそろ分けなくてもいいのかと思い始めているが、どう思うか
* いいと思う。
* 一緒にしておいたほうがいいパターン
    * 基本的には一緒にしておいたほうが良さそう
* 一緒にしないほうが良いパターン
    * ひとつのインフラの中に、複数のアプリが動いているとき

## PHPUnitのコードバレッジと実行速度の話

* 100%に行かなかったら落とす仕様にしたが
* ところが、100%目指すのは良くないという情報が日本語でも英語でも多かった
* ８５％超えると大変になる
* 単体テストは８５％でOKにした
* 結合は１００％でやる
    * 通ってないところがあったら結局人手で１００％やらなきゃいけないと思うので
* カバレッジを品質目標にしてはいけないとも書いてあった
    * Assertion Practice
    * [AssertionFreeTesting](https://martinfowler.com/bliki/AssertionFreeTesting.html)
    * if分岐を見ておいたほうが良い、通ってないことがあるので

## PHPとオブジェクト指向を知り尽くした人がこれから目指すさらなる高み（PHPの中で）

* どこに向かいたいの？
    * ソフトウェアエンジニアとしての高みはどこか？
* 関数型を極める
* PHPを作る
    * おれおれPHPを作る
    * トランスパイラ TypePHP みたいな
* ぜんぜん違う言語をやってPHPに戻ってくる
* WordPressのような巨大なものにコミットする
    * コードはきれいじゃない
* Hackってどうなの？
    * PHP7以降は互換性を保証しなくなっていく
* Zephir
    * PHPの拡張をつくるための言語
    * https://zephir-lang.com/
    * CSVを超高速でちゃんとパースしてくれるパーサー
* PHPUnitを全部Cで書き直してほしい
    * Goで書きたい

## YYPHPは毎週やってます

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

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