YYPHP#94「PHP勉強してて、つまづいたこと、はまったこと教えて」「自作フレームワーク開発、どこから手をつけたらいい？ 」「テスト環境と本番環境のDBの整合性、どうやって合わせている？」「仮想DOM系のフレームワークを触っている人がいたら話きたい」「組み込み系とウェブ系の開発スタイルの違いを聞きたい」

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

[YYPHP#94]: https://yyphp.connpass.com/event/132257/
[YYPHP]: https://yyphp.connpass.com/

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

__今回の配信動画__

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">YYPHP#94「PHP勉強してて、つまづいたこと、はまったこと教えて」「自作フレームワーク開発、どこから手をつけたらいい？」 <a href="https://t.co/f0At5Rb4BN">https://t.co/f0At5Rb4BN</a></p>&mdash; suin❄️AWSできる方募集中です🙏🏻固定ツイートご覧ください (@suin) <a href="https://twitter.com/suin/status/1154700828243922945?ref_src=twsrc%5Etfw">July 26, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

__過去回の配信動画__

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

__前回__ → [YYPHP#93「PHPの勉強何から始めたらいい？」 「一番やらかした失敗談は何？」 「ソースコードが酷すぎる現場で生き抜く術」 「テストコードを書くタイミングって？」 - Qiita](https://qiita.com/suin/items/21754fa6cd504b949f74)


## 雑談

### PHP勉強してて、つまづいたこと、はまったこと教えて (こいずみ)

みんなのつまづき

* ただ書いてるだけじゃだめ。OOP勉強し始めたけど、本質を理解する必要がある
* PHPは文字列結合とか謎の挙動をすることがある。調べるのにPHPのソースコード(C言語)を読まなければならない。
* OOPがいまいち扱えてない。どうすれば修正が楽になったりバグがでにくくなったりするのかを理解しようとしている。常につまづいている。
* Arrayが参照渡しだと思ってたら値渡しだった。-100%3(剰余)=-1になるはずだけど。。

つまづいたところ

* オブジェクト指向をよく分かってない上で書いてた
* ループの処理が苦手

PHP基礎力をつけるための演習

* [#yyphp-quiz No.2: 月間カレンダーの表を作ろう - HackMD](https://hackmd.io/sLK6B_itRBCBO3AYldlU8g?view)
* [#yyphp-quiz No.3: 多次元配列から要素を一撃で取り出す関数を実装して - HackMD](https://hackmd.io/xe0yC-9eRS6c07u7LcuN5g)

* プログラムを読むコツは、データの構造を読む(想像する)

### フレームワークについて聞きたい (やまだ)

フレームワークを使ったことない。これからフレームワークを使いたいと考えている。
使っている人の話を聞きたい。

* CakePHP、Laravel
* 大きな目でみるとCakeもLaravelも違いはないという話もあった
    * エンジニアがどれだけ多いか
    * 情報がどれだけ多いか
    * ORMはどちらもクセがある
* LaravelはVue.jsが組み込まれている
* CakePHPはルーティングの規約が厳しい。Railsに近い感じ
* CakePHPは無いものが多い
    * DIが無い

### Laravelはどんなデザインパターンで作られているのか知りたい (はる)

CodeIgniterを使っていたが、Laravelに来たらService Providerとか、初めてみる設計がたくさんあって分かりにくいと感じた。

...

* CodeIgniter → 軽量フレームワーク
* Laravel → フルスタックフレームワーク

...

* 実務レベルでキレイなディレクトリ構成が知りたい。
* いろいろな解決策があって、どれがベストプラクティスか分からない。

...

* クリーンアーキテクチャをLaravelで実装してみた例
    * https://twitter.com/nrslib/status/1106198535836299264

### 自作フレームワーク開発、どこから手をつけたらいい？ (まんしょん)

ルーティング、ORMなどいろいろあるが……。
Laravelを理解するために自作フレームワークを作っている。

今まで作ったもの:

* index.phpと.htaccessでルーティング
* autoloader

その次に何したらいいか

* ORMがいいのでは？
* DI
* パーフェクトPHPの第7章でオリジナルフレームワークを作るところを読んで作ってみる
* https://bearsunday.github.io/manuals/1.0/ja/

### テスト環境と本番環境のDBの整合性、どうやって合わせている？ (かきうち)

カラムに違いがないか、とか。

テスト環境のデータを本番環境にアップすることがあった。
テーブルがテスト環境で追加されていて、それが本番環境になかった。

...

- マイグレーション書いてるけど形骸化 
- そもそもマイグレーションがない 

とかで稀によくありますが私の場合は、Mysql WorkbenchでリバースエンジニアリングしてER図を作り（モデルと呼ばれる）それをシンクロナイズドモデルという機能でリモートとDIFFる。  DIFFも出るし、差分反映コードも出してくれるしボタン1個で反映できる

...


* マイグレーションをやったほうがいい
* ALTER文とか保存してない。
* [データベーススキーマ変更の失敗しにくい管理方法 - Qiita](https://qiita.com/suin/items/fd996de8c5d58d95047d)
* [運用中のシステムにも導入可なGo製のマイグレーションツール「mattes/migrate」 - Qiita](https://qiita.com/suin/items/68629018017141155f06)

### 仮想DOM系のフレームワークを触っている人がいたら話きたい (たけした)

React,Vueなどについて聞きたい

...

勉強量は多い？

* JavaScriptの理解
* 仮想DOM
    * フレームワークでカプセル化されてる

便利ですか?
どのくらい開発が早くなりますか?

* 作るものによる
    * jQueryの方が良かった場合や、逆にVueが良かった場合がある
* 再利用するコンポーネントが多い場合
    * React,Vueが向いてる
* 最初はLaravelとVueを別々に使ったほうが良さそう
* Vue.jsとTypeScriptは相性良いですか?
    * (詳しくはYouTube見てね!)

学習コストはVueの方がReactより随分すくないが、そもそもnpm or npx or yarnなどのパッケージ管理ツースとwebpack or gulp みたいなタスクランナー系の学習も必要。  
プロっぽい人がいない限り、プロダクトに組み込むのは危険だと思う。  
社内にプロがいなければ育成するところから始める事が必要だが社外で勉強してだと辛みが深い。（やりたい人しかやらないだろうし）  
社内勉強会を業務時間内で実施するのが最良だと思う。  
むしろ人呼んで研修すべき


### 組み込み系とウェブ系の開発スタイルの違いを聞きたい (すいん)

* ウェブ系は結構スピードを重視している。
* 組み込み系は安全さ重視。

...

* 使っているツールが古い
    * SVNすら使っていないとか
* 組み込み系はテストをすごくやってそう
    * リリースされたら使われる期間長いし
* 自動化されたユニットテストがなかったり(僕の現場が古かったのかもしれないが)
* 開発はウォーターフォールモデル
* 使うメモリとかはすごく気にする
    * どういうふうにデータを収めていくか

# YYPHPは毎週やってます

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

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