YYPHP#61「WordPressでどういうふうに開発しているか、OOPの説明資料を作っていて言語化できない部分があった、『バグが出た際に直しやすいシステム』ってどんなもの、『再利用しやすいシステム』ってどんなイメージ、LaravelとGraphQLを使っている人いる？、Laravelの勉強法、DDDとか設計の話、単体テストするとき、エラーケースをテストしたいが、ログが大量に出てきてうっとうしい件」

#YYPHP #61【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】

## 参加者13名(うちリモート4名)

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

## 雑談テーマ(話したいこと／聞きたいこと)
### WordPressでみんなどういうふうにウェブサイトを開発しているか聞きたい (ひごさん)
* カスタマイズしたことある人？
* ウェブサイトはカスタマイズしなくても一応作れる
* そこから込み入った機能をつけようとなったら
    * ショートタグを覚えたり
    * プラグインを開発するとか
    * WordPressをハックしたりとか
* テーマを選ぶとき
    * ついている機能を見極無いとならないとおもうのですが
    * 求める機能
* WordPressってカスタマイズしたら自動更新できなくなるんですか？
    * テーマをカスタマイズして見た目を変えるのが普通だが
        * テーマそのものを変えてしまうとアップデートできない
        * 子テーマを作るのが基本
* どんなサイトにしたいのか？
    * イベント情報を載せたい
    * 予約管理まで
* プラグインでできるかも
    * イベント情報
        * RSSで取ってくるプラグインがあるかもね
            * RSSって何ですか？
                * ウェブサイトの更新などを受け取れる仕組み(プロトコル)
                * RDF Site Summary
                    * RDFって何ですか
                        * Resource Description Framework
                    * [RSS - Wikipedia](https://ja.wikipedia.org/wiki/RSS)
            * 「WordPress RSS プラグイン」などで検索すると出てくる
    * [RSSの取得・表示に役立つプラグイン集：WordPress | 小樽総合デザイン事務局｜ホームページ制作・デザイン・LINEスタンプ制作](https://otarunet.com/it/wordpress-rss-plugin/)
    * [wordpressにRSSを設置する方法！自動更新・自動配信のすすめ | webcode|ワードプレス(Wordpress)初心者向け情報サイト](https://webcodezero.com/wordpress/wordpressrss/)
* 公式じゃないプラグインはどの程度信頼できるか？
    * 公式じゃないのは初心者にはおすすめしない
    * 野良のプラグインは自分の目で見極めないといけない
        * どうしても使いたいなら、周りに聞いてみるとか
        * アップデートも期待できないものもある
* 「RSS、私はFeedlyで受信してます。」 @masuipeo
    * [Welcome to Feedly](https://feedly.com/i/welcome)

### OOPの説明資料を作っていて言語化できない部分があったので聞きたい (ひろさん)

19:45

#### 「バグが出た際に直しやすいシステム」ってどんなものか聞きたい

19:49

* こうなってたらやだな
    * 一つの関数がめちゃくちゃ長い
    * コメントが書かれているけど、整合性が保たれていない
    * ひとつの関数が1000行くらいあった
        * グローバルな配列を参照していた
        * 最終的には作り直したほうが早かった
        * せめて関数を小分けにしてほしい
    * ログが追えないやつ、ログが出てないやつ
        * バッチ処理とリクエストのログが入り混じってて探すのが大変だったアプリもあった
            * 運用上わかれているといいな
* 「ジャングル」のコード
    * まずドキュメントがない
    * Smarty使ってるところとReact使っているところもあるので統一性がない
    * ところどころ英語のコメントだったり、日本語のコメントだったり
    * 関数名がkouzamei(講座名), keta(桁)みたいにローマ字になってたり
    * 複数形と単数形
    * 他の人が読むことを考えられてないコード
* 設計に基づいたカプセル化がちゃんとされているシステム
    * 単体で修正がきくので
* 設計がちゃんとしていて統一された手法で開発されたシステム
    * ここはこう書かれていて、など再学習しなくていい

#### 「再利用しやすいシステム」ってどんなイメージか聞きたい 

19:59

* コンポーネントなのか、プログラム全体なのか、自由でよいので「再利用しやすい」で出てくるイメージを聞きたい
* フレームワーク
    * 構造や設計思想が明確、ドキュメントが公開されている、そういうのは再利用しやすい
* 抽象度が高い
* ひとつのことをうまくやっている
* 設定できる
    * ENVかえればなんとかなる
* Pluggable
* インターフェイスに依存している
    * 逆に依存していたほうが再利用しやすい？
    * Laravel 5.6だったら動くが5.7は動かない
        * インターフェイスに依存しているとそうじゃない
        * 抽象に依存しているってことですね
* 公開して誰でも使えるようにする
* 安定度が高い
    * 何にも依存していない
    * かつ、多くのものに依存されている
    * 疎結合にしたいとおもうけど、密結合になるので、「安定度が高まる」という表現がしっくりこない
    * stability(安定性) → not easily moved (簡単には動かせない)
    * 不安定: 彼氏が変わるたびに服が変わる
        * いろんな彼氏に依存している

### LaravelとGraphQLを使っている人いたら話聞きたい (ucanさん)

20:13

* 使ってる人？
    * 1名
* MVGパターン
    * Model View GraphQL Pattern
    * Laravel と GraphQLを組み合わせてよかったこと
        * ルーティングを考える必要がなくなった
            * エンドポイントいっこ
        * RequestはLaravelのバリデータが使える
        * ResponseもGraphQLが返してくれる
    * Action単位でMutationを書いていく
        * タスク振りやすい
    * laravel-graphqlというパッケージ
        * 似たようなパッケージがある
            * graphql-laravel
                * [Issues · Folkloreatelier/laravel-graphql](https://github.com/Folkloreatelier/laravel-graphql/issues)
            * lighthouse
                * 今後上がって来そうな感じがあるが、今はlaravel-graphql使ってる
        * Laravel 5.7にはまだ対応していない
            * develop ブランチは対応している
    * クライアントサイドは何使っていますか？
        * apollo client
    * 最初学習コスト、調査コストかかってくると思うけど、メリットを感じられますか？
        * 学習コストは掛かっていると思うけど、今後GraphQLを教えられるようになるし
            * 今は高いとおもう
            * 情報が少ないため
        * 生産性は上がったと思う
    * GraphQLを学ぶ価値はあるか？
        * 学ぶ価値が出るよう、Qiita記事書いていこうと思います
            * [「ucan-labさんのGraphQL」の検索結果 - Qiita](https://qiita.com/search?utf8=%E2%9C%93&sort=&q=user%3Aucan-lab+tag%3AGraphQL)
            * [LaravelとGraphQLでAPI開発 - Qiita](https://qiita.com/ucan-lab/items/b1796b083ac5c0bcb019)
    * GraphQLはバージョン管理しない
        * テーブル定義が変わったら？
    * Mutationは簡単に作れるのか？
        * laravel-graphqlだと定義したバリデーションされたパラメータがControllerに渡ってくる
            * よさそう
    * ucanさん、サンプルコードGitHubにアップしてください
        * アップしてあります
        * [ucan-lab/practice-laravel-graphql](https://github.com/ucan-lab/practice-laravel-graphql)
* prisma
    * WebからDBのスキーム
    * CQRSだったらview作ったらおしまいとか

### Laravelの勉強法を聞きたい (村瀬さん)

20:31

* 新しいものを学ぶのに積極的な会社にいるが、時間が足りなくて勉強が追いつかない。
* できるだけ効率的なインプットのしかたを聞きたい。
* 『はじめてのLaravel』がおすすめ
    * [絶対に挫折させないアプリ開発　はじめてのLaravel - plumsa - BOOTH（同人誌通販・ダウンロード）](https://plumsa.booth.pm/items/1048008)
    * 書籍版を持ってる人はPDF版も入手できる
    * 書籍版は1200円
    * ダウンロード版だけだと1000円
* どうやってLaravel学びましたか？
    * 公式のチュートリアルからはじめた
        * 今はメンテされていない
        * 5.5でやった、5.6でやったという記事がQiitaに上がったりはしている
        * バージョン違いで整合性が取れなくておすすめしにくくはなっている
* ToDoリストの次は何を学んだらいい？
    * リレーションまわり
        * ユーザをフォローできる
            * フォロワーの一覧が見れる
        * 投稿の履歴をカレンダーに表示するとか
* 架空の機能を作るというより、自分が使うとか、作りたいものを作るといい
    * スクレイピングのシェルアプリケーションを作った (nouphet)
* TechAcademyのメンターやってる
    * その経験で教えると身につくことがわかった
    * 誰かに教えるといい
* https://cdn.suin.io/yyphp-questions-for-fresh-phpers.png


### DDDとか設計の話 (おきなさん)

20:42

* IDDDの邦訳レビューについて聞きたい
* [実践ドメイン駆動設計 (Object Oriented SELECTION) | ヴァーン・ヴァーノン, 高木 正弘 |本 | 通販 | Amazon](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88-Object-Oriented-SELECTION-%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%B3%E3%83%BB%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%8E%E3%83%B3/dp/479813161X/ref=sr_1_1?ie=UTF8&qid=1542368684&sr=8-1&keywords=%E5%AE%9F%E8%B7%B5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88)
* レビュアーが集まる場でpubsubが問題になった
    * 公開出版？？？
        * どう訳すべきか
    * お互いチャネル名だけしっている
    * Goのチャネルが近い


### 単体テストするとき、エラーケースをテストしたいが、ログが大量に出てきてうっとうしい件 (おきなさん)

20:53

* テストが成功してるけど、ログが出すぎてつらい
* 解決策
    * ENVで設定
    * Loggerを差し替える
        * ログを捨てる
    * ファイルに書き出す


### 雑談開始前の雑談
#### こないだShouldBee使いました
* https://shouldbee.at/
* 日本語でテスト書いてWebアプリを実行できる
* CLIでもテストできるので、cronで定期実行することもできる