YYPHP#89「業務知識を習得する方法」「その処理PHPでやるべきか？MySQLでやるべきか？」「エンジニア失敗談を聞きたい」「言語の勉強が目的になっている状態からの脱却方法 」「自己学習みんなどうしてる？」

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

[YYPHP#89]: https://yyphp.connpass.com/event/132253/
[YYPHP]: https://yyphp.connpass.com/

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

__今回の配信動画__

<blockquote class="twitter-tweet"><p lang="fi" dir="ltr">YYPHP89 <a href="https://t.co/fNZBRZHxNo">https://t.co/fNZBRZHxNo</a></p>&mdash; suin❄️PHPでオブジェクト指向 (@suin) <a href="https://twitter.com/suin/status/1142023868908859392?ref_src=twsrc%5Etfw">June 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

__過去回の配信動画__

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

__前回__ → [YYPHP#88「どんなバリデーションをどこでやる？」「エンジニアの転職活動ってどんなの？」「もっと快適な開発環境」「なぜphp-javaを作っているのか？」 - Qiita](https://qiita.com/suin/items/4b86b45f22a24c46756c)

## 雑談


### 業務知識はどのくらいインプットした上で、開発に臨むべきか？ (やまざき)

オブジェクト指向でやるにあたって、業務知識をどのくらいインプットした上で取り組んだらいいか？

必要十分。業界によって違うよね。

* 基本的には業務知識はあったほうがいい。
    * なぜか
        * システム化したときにどう効率化できるかはエンジニアしか考えられない。
* 業務知識はマストで知っておかないとならない。
* 迷ったときにこうっていう判断ができない。
* チームにひとりでも業務知識に詳しい人がいいが、自分しかいないなら自分が知らないといけない。
* 受託開発の人はどうやってる？
    * 業務知識のヒアリングをする
* 業務分析
    * どの部分をシステム化したら効率化できるかを考える
    * 業務フローを書いて、ここまではシステム化して、ここはシステム化しないなどの合意を顧客から得るときに役立つ
* チーム向けのドキュメント
    * なるべく動くものがいいと思う
        * テストコードとか
    * 概念図
    * どうしてもコードに現れない、作者の意図など
        * パフォーマンス上妥協しないといけない設計の理由など
    * 用語集
        * Qiita Team
        * esa.io
        * GitHub Wiki/GitLab Wiki

* 顧客との合意のためのドキュメントは別
    * Google Spreadsheet
    * Google Docs
* 全体の業務を説明できるしてから

### いくつかある実装方法の中から選び出す方法 (ひらた)

PHPで処理を書くときにどうしたらいいか？
ググって出てきたコードがベストかどうか判断つかない。
みんなどう判断しているのか聞きたい。

* そのプロジェクトにおいて一番いい方法を選ばないといけないが
    * その基準はいろいろあると思う
    * 可読性、わかりやすさ
    * 速度
    * そういうのを複合的に判断して決めることになると思う。
* 状況による
* 読みやすさと計算量の兼ね合い
    * 「読みやすさ」を考慮するのはチームの習熟度にもよる

* ADR
    * architecture decision records
    * プロジェクトに新たな人が入ったときに、情報収集が効率的になる

### MySQLからデータを引っ張ってくるときに、PHPとMySQLで同じことができる場合、どっちでやったらいいか？ (かきうち)

* 日付のフォーマットなど
    * 日付のフォーマットならPHP
* SQLが長くなっちゃうと見にくい
* DBの機能にのっちゃうと単体テストが書きにくくなる
* 日付のフォーマット
    * UI,ビュー側のものなんおで、よく変わる可能性がある
    * DBはあんまり変わることがないほうがいいので、日付フォーマットはPHP
* DBが得意なことをDB側でやる
    * 集計
    * ソート
    * 全部に100足すとか

### MBP買うならどのスペックが良い?(おおはら)

スペック
サイズ
キーボード(US、JP)

* 用途
    * 開発
* 使いツール
    * VS Code
    * → メモリ8GBくらいあれば良さそう
* 2013〜2015年くらいのメンブレンキーボードのタイプがおぬぬめ
* Windows
    * WSLが入ったのでシームスにLinuxが使えるようになってきている
    * Office系のファイルのやりとりが便利(営業系の人とよくやりとりする)

### みなさんのエンジニア失敗談を聞きたい (うにお)

開発とかで失敗した話など

* 広告システムでの失敗談
    * とあるシステムで広告系の配信情報をまとめてるエンティティが肥大化、機能追加が大変なのでリファクタリングすることになった。
    * リファクタリングで見落としていた実装があった
    * ユニットテストがあるので大丈夫だと思った
    * シナリオテストが不足していた
    * リリース後広告がでなくなった(クリティカル)
    * どうしたら良かったか
        * シナリオテストを用意しておかなければならなかった
        * わかりにくい実装になっていたので、注意ポイントをドキュメントに残す必要があった
* 金額計算の失敗談
    * 金額計算するところでデータの型をintかlongで扱ってて、1円の誤差が出る
    * decimalで扱わないといけなかった
* メール
    * メール送信系のシステムを作っていた
    * データがテスト環境から取ってきたものだったが、テスト環境には本番環境のユーザデータが入っていた
    * ローカルで開発中に、実顧客にテストメールを飛ばしてしまった
    * 防ぐには？
        * テスト環境のデータをダミーのメールアドレスにする
* URLをみて環境表示を変えるツール
    * [Envflag - Chrome ウェブストア](https://chrome.google.com/webstore/detail/envflag/gepeheajhmnbljihadnmbdgljaemcdhl)

### 言語を勉強するのが目的になっている状態からの脱却方法 (おおはら)

現状

* PHP、Laravelを勉強している。
* テキストを写経してやってる。
* オリジナルのアイディアがなくて、勉強するのが目的になってしまっている。
* 同じような経験がある人？
* そこから脱却するには？

...

* 何かしらパクって作る
    * Twitterとか
    * 本当だったら自分が作りたいものを作ったほうが良いけど
* 転職のポートフォリオとしてLaravelで何か作るとしたら
    * オリジナリティもいいけど、技術力が見られるから、ネタは何でもいいと思う

### 自己学習みんなどうしてる？ (やまざき)

能動的にやるには？
効率的にやるには？

* 強い目的意識を持つ
* 好きなこと、興味のある分野を伸ばす

...

* 会社で価値を生み出せるために学ぶ
* 強いエンジニアとエンジニアリング話を同等にしたいという知的好奇心
* 自分が燃えるモチベーションをひとつ見つける

...

* 決まってないなら一旦発散してもいい
    * いろんなことをやってみて、収束する
    * 5分やってみてとか1日やってみてとか。
    * とにかく行動してみないとモチベーションになってこない
    * やってみないことには自分に合ってるかわからない。
* 決まってないなら、強いエンジニアのTwitterから情報をひっぱってきて、そこを学んでみたり

### タスクがいっぱいいっぱいのときにどうやって優先順位をつけてこなしていくのか、みんなの工夫を聞きたい (れおりん)

タスクを抱えすぎる

* 心を鬼にして(覚悟して)、他人に任せていかないと、自分がやるから抜け出せない。
    * 心を天使にして
* すぐに済むものを後回しにしないで漏れをへらす、長いのが重複したら :upside_down_face:
* 時間を決めてやる
    * 100%のアウトプットを目指さない
* 捨てる
    * 捨てる技術のほうが難しいがやる。
    * タスクをどんどん削ぎ落とす。
    * 仕様検討と同じだと思う。
* 『[エッセンシャル思考 最少の時間で成果を最大にする](https://www.amazon.co.jp/dp/B00QQKCV6E/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)』を読んで改心する

### ノンブロッキングIOとブロッキングIOのご報告 (かきうち)

ブロック → 処理を止める

* ノンブロッキングIO: 1個のIOをしてるときに処理を止めない
* ブロッキングIO: 1個のIOをしてるときに処理を止める

### みなさんセルフブランディングどうしてますか? (ひらた)

* スインさんに聞く!
    * アウトプットし続けてるだけ
    * Qiita記事がもう少しで1,000件
* 何を目的にするかでやり方や目指すものが変わってくる
    * → 食いっぱぐれないため
    * ブランディングしなくても食いっぱぐれないと思う
* 好きな絵師さんに名刺用に！ってイラストを描いてもらう
    * 各種アイコンを全部それにする（変えない）
    * SNSの名前やIDを変えない（末尾になんかつけるのはOK）
    * 登壇資料にそのイラストを載せる
    * 喋りに行く

# YYPHPは毎週やってます

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

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