PHPerKaigi2019に行ってきました（1日目）

## はじめに

PHPerKaigi2019に行ってきました！
とりあえずPHPerチャンレンジトークのために雑に投稿しますｗ

<img src="https://qiita-image-store.s3.amazonaws.com/0/67471/752b9b13-a3b4-20af-893a-02cd661dd8a7.jpeg" width=50%>

## 2019/03/30(土)

### フレームワークを作りながらLaravelのアーキテクチャを学ぶ

[ページ](https://fortee.jp/phperkaigi-2019/proposal/d1829032-5c72-42d5-ac65-18f1ee56ee0b)

* オレオレフレームワークは学びが多い、楽しい
* 名前解決方法が重要
* `eval(\Psy\sh());` デバッグ方法
* 1回自作フレームワークを作ってみよう
* 依存性の注入: Dependecy Injection→必要なオブジェクトを外部から注入する
    * 内部でインスタンスを生成せずに外からインスタンスを渡してあげる形（引数増えちゃう問題もある・・・）
* DIコンテナ
    * 外部から注入するオブジェクトが多くなるとしんどい
    * インスタンスの生成方法を登録してあるコンテナ、ファクトリみたいなもの？
* サービスコンテナ
    * Laravelが提供してる、bindとかresolve
    * キャッシュされる
* ファサード
    * クラスメソッド形式でどこからでもインスタンスメソッドを呼び出せる機能。`Config::`みたいな
    * どこからでも呼べる、疎結合になる、テストも書きやすい
    * 便利ではあるが依存関係が分かりづらくなる→確かに今のプロジェクトでも依存関係が分かりづらく苦労している
    * やはりセッション系は外から渡す形にしてあげないとしんどい、中でセッションを参照したらダメ

### 抽象化って何？

[ページ](https://fortee.jp/phperkaigi-2019/proposal/5957d9a1-d8ee-4b5d-9dec-a2d621e0364a)

Laravelカンファレンスでしゃべった内容らしい
メルカリのマネージャーの人
絶賛マイクロサービス化中

* 数独のチェック処理を例にする
* これの改善ポイントはないか？
* 依存関係逆転の原則
* 間にinterfaceを挟むと依存関係が逆転する→これは間違っている
* 抽象: 共通部分を抜き出すこと
* 捨象: 共通部分を捨てること
* 抽象化のハシゴ、牝牛ベッシーの例
* ハシゴを登るとき、特徴量→減る、対象の数→増える
    * ベッシー→牝牛
    * 抽象レベルが揃ってないとコミュニケーションできない（資産に餌を与える）
* 扱っている問題や概念の抽象化
* プログラミングにおける抽象化
    * 適切な命名
    * 抽象度の統一
    * 狭い範囲
* 改善、本質を見極める、最低限は何か
* checkerは1~9のnumbercollectionのチェックするようにする
* check→Matrixだったのをcheck→NumberCollection→MatrixAdaptor→Matrixになった
* 依存関係の改善ができた
* 抽象化→モデリング
* ベッシー→富ではなく動物の方向へモデリングができる

### ランチセッション

[ページ](https://fortee.jp/phperkaigi-2019/proposal/f987870e-23df-41a5-84a9-cde1216ede70)

OKWAVEの会社の採用のための場だった
色眼鏡の話＝要するに価値観ってこと

お昼1時間くらい空いた
暇だったのでPHPerチャレンジやってた

### MySQLにWEBアプリのログを保存しているケースの8割くらいが幸せになる方法

[ページ](https://fortee.jp/phperkaigi-2019/proposal/8c0c83bf-cad4-44e1-bc35-c2c28252b50d)

[スライド](https://speakerdeck.com/yoku0825/mysqlniwebapurifalseroguwobao-cun-siteirukesufalse8ge-kuraigaxing-seninarufang-fa)

PHPの話は出てこない
DBにログを残すのはまぁある程度は大丈夫
一定期間で外に逃がすというのが必要

ログ: 制約を使わないもの、アップデートしないもの
ホットログ: ユーザーの照会があるもの
コールドログ: 内部でしか使わないようなもの
メリット: トランザクション、SQLでアクセスできる
デメリット: 重い、vimでもなかなか開けない
mysqldumpコマンドには--tabや--whereなどのオプションがついている

### 設計力を上げるバリエーションの見極め術

[ページ](https://fortee.jp/phperkaigi-2019/proposal/56748528-991d-435b-904e-040c6f0a2cc0)

バリエーション＝＞S,M,Lとか
バリエーションの変化→ビジネスの変化
税率とか
ビジネスの変化の見極め術

* 横の変化
    * いわゆる横展開
    * 対応モールが増えるとか
* 縦の変化
    * 時間とともに変わる可能性のあるもの
    * 年号とか税率とか


配送料対応
佐川とヤマトとゆうパックと...etc
if文はダメよ、という話
domainProvider的な、ファクトリー的な何か
条件分岐禁止、スピーカーの方と少し交流した

---

聞きたいものがないので一時小休止
トークン探しで遊ぶ


### 3ヶ月でphp5.5から7.2にバージョンアップした現在と今後の向き合い方

[ページ](https://fortee.jp/phperkaigi-2019/proposal/0787a4dd-0607-41d6-a60d-713f6f0f586f)

PHP5系は2018年内でサポート終了
Docker環境を作ってバージョンをあげて検証
memcachedのバージョン依存問題
mcrypt→openSSL
やらないこと: リファクタ
色んなバージョンアップの話を聞くがやはりこれは大事のようだ
納期のあるバージョンアップにおいて、リファクタまで手を出すのは無理
countの仕様変更
アップ後: サイトの速度向上
結構詳細の話が多くて参考になる部分が少なかった、ピンポイントすぎた

### PHPerのための計算量入門

[ページ](https://fortee.jp/phperkaigi-2019/proposal/ce2185f5-d441-44ee-886e-921ff0eb83bd)

ユーザーでループを回すなという話
負荷試験
CIで負荷試験まで込みにしてるようなものはほぼない
静的解析→無理
経験しかない…
時間計算量→演算回数
空間計算量→メモリ
in_arrayは遅いが数件であれば問題ない
データ量をよく見て使う
CSVとかをまとめて扱うとメモリ、空間計算量が増える、outofmemory

### Today's update

クロージング
トークンチャレンジ: 1位の人、休憩中も休憩できない、らしいｗ
明日はランキング非表示らしい
Wi-Fi: 会場側の問題だった可能性あり


### PHPerチャンレンジ

会場内やサイト内の至るところにトークンを用意してあり、それを打ち込むことでポイントが手に入って順位を競うチャレンジ
暇な時間とかにコツコツ集めた結果、最高で13位まで行くことができました:smile:
明日もがんばりまーす

![スクリーンショット 2019-03-30 17.05.20.png](https://qiita-image-store.s3.amazonaws.com/0/67471/0e8b0d3b-876c-0f92-f6dc-4d5363f6a6a6.png)