YYPHP#13イベントレポート【相互コードレビュー会】「WebAPIのテストコード、予約受付対応のコード、DDD」

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

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

──というのが通常のYYPHPですが、今回は「コードレビュー特別会」と称して、事前にコードレビューしてほしい人を募り、お互いにコードレビューしあうという異例のイベントを行いました。

[YYPHP#13]: https://yyphp.connpass.com/event/70009/
[YYPHP]: https://yyphp.connpass.com/


## 参加者

* suin(すいん)
    * PHP歴 10年くらい
    * コードレビュー希望
        * RSS出力ライブラリ
* nobuhiroharada(はらだ)
    * PHP歴 1年くらい
    * FitBit 
    * コードレビュー希望
        * WebAPIのテストコード
* Yorinton(かつき)
    * PHP歴 1年半くらい
    * マッチングサービス
    * コードレビュー希望
        * 予約受付対応のコード
* たべたつ
    * PHP歴 3年くらい
    * ソースを見たい
* hideichi_saito(さいとう, binさん)
    * PHP歴 10年くらい
    * プレスリリース配信サービス [PRバズーカ](https://pr-bazooka.com/)
    * モーニングコールをかけるサービス [モーニングコールセンター](https://morningcall.center/)
    * https://twitter.com/binbin4649
* nouphet(たけはら)
    * PHP歴 
    * インフラエンジニア
    * PHP4系のDockerコンテナを作った苦労話をしたい [docker-php4](https://hub.docker.com/r/nouphet/docker-php4/)

## 開催前の雑談

* コンピュータの中で何が起こっているか気になる。
    * [alex/what-happens-when](https://github.com/alex/what-happens-when)
    * 「あなたのブラウザにgoogle.comと入力してEnterキーを押すと何が起こる？」をテーマにコンピュータの中で起こっていることを説明する文書。
    * 組込ソフトウェアレベルのところからネットワークの物理レイヤ、アプリケーションレイヤ、そしてブラウザのレンダリングに至るまでのストーリーを網羅的に綴る。
    * プルリクで様々なレイヤの説明が強化され一種の集合知になっている。
    * 英語が苦手でもGoogle翻訳で結構楽しめる。
* [btford/write-good: Naive linter for English prose](https://github.com/btford/write-good)
    * 英語の添削コマンドラインツール
    * alex/what-happens-whenではwrite-good+TravisCIでプルリクの英文を添削していて驚いた。

## WebAPIのテストコード

* WordPressに生やしたWebAPIが正しいかチェックするテストコードのレビューをしてほしい。
* Guzzle
    * [guzzle/guzzle: Guzzle, an extensible PHP HTTP client](https://github.com/guzzle/guzzle)
    * [今時のPHP HTTPクライアントのGuzzleを使ってみた - Qiita](https://qiita.com/yousan/items/2a4d9eac82c77be8ba8b)
* 同じようなテストコードが沢山あるのでうまい書き方はないか？
    * [PHPUnitとデータプロバイダとテストケース生成 - Qiita](https://qiita.com/Hiraku/items/5c49987f4e9e167dad86)
* Web APIのヘッダでチェックしておくべきもの
    * JSON APIならContent-Typeはチェックしたほうがいいかも。
* Web APIのテストコードはあまり見たことがなかったから参考になった。
* コード汚いから恥ずかしい。
    * → 全然汚くない。

## 予約受付対応のコード

* [asobiba101/packages/Asobiba/Domain/Models at master · Yorinton/asobiba101](https://github.com/Yorinton/asobiba101/tree/master/packages/Asobiba/Domain/Models/Repositories/Reservation) …… コードレビュー対象
* [YYPHP #13 初めてのコードレビュー](https://www.slideshare.net/ssuser2ff728/yyphp-13) (slideshare)
* DDDっぽく実装したけどこれでいいのか気になるのでレビューしてほしい。
* `?>`は書かないほうがいい。
* メソッドはできるだけスカラ型を受け取って中でインスタンスを作るより、クラスのインスタンスを受け取ったほうが、引数の順番を間違えたり、関係ない値を与えたりするミスを防げる。
* 単一責任の原則（SRP）を気にして書いている。
* getterが増えてしまうのはreadonlyなどがPHPにないからしかたがない。
* [デメテルの法則 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%A1%E3%83%86%E3%83%AB%E3%81%AE%E6%B3%95%E5%89%87)
* インデントがバラバラになってしまうのはどうしたら？
    * [FriendsOfPHP/PHP-CS-Fixer: A tool to automatically fix PHP coding standards issues](https://github.com/FriendsOfPHP/PHP-CS-Fixer)
    * PhpStormは「Code」→「Reformat Code」

## 余談

* UUIDを使うべきか、DB発行の連番を使うべきか？
* MySQL vs PostgreSQL vs Oracle
* MongoDB上場したね
    * [MongoDBのNasdaq上場、初終値は34%アップ | TechCrunch Japan](http://jp.techcrunch.com/2017/10/20/20171019mongodb-finishes-up-34-in-database-ipo/)

## 参加者の感想「今回参加してよかったことは何ですか？」

* ララベル初めて見た
* コードレビューしていただいて、改善点が見つかりました。 
* 自分の勉強不足がわかったのと、きれいなコードでDDDの実装見れてとても勉強になれました
* ドメインモデルの実装だったり考え方の理解が少し進んだ
* 今回コードレビュー会でレビューされる側で参加しました。自分のコードの中で自身のなかったポイントについて方針が見えてきました。また、設計に関する考えて方について新しい知識や自分の考えに関するフィードバックを得られたのでとても勉強になりました。

## YYPHPは毎週やってます

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

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

## 追伸

YYPHPのイベントレポート公開が#6以降滞っており大変申し訳ございません。過去の分も遡及してアップしていきたいと思います。