YYPHP#88「どんなバリデーションをどこでやる？」「エンジニアの転職活動ってどんなの？」「もっと快適な開発環境」「なぜphp-javaを作っているのか？」

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

[YYPHP#88]: https://yyphp.connpass.com/event/132252/
[YYPHP]: https://yyphp.connpass.com/

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

__今回の配信動画__

<blockquote class="twitter-tweet" data-lang="ja"><p lang="fi" dir="ltr">YYPHP#88 <a href="https://t.co/ZSyEyF0sJp">https://t.co/ZSyEyF0sJp</a></p>&mdash; suin❄️PHPでオブジェクト指向 (@suin) <a href="https://twitter.com/suin/status/1139485876109496320?ref_src=twsrc%5Etfw">2019年6月14日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

__過去回の配信動画__

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

## 雑談


### mpywさんのLT (10分弱)

Laravelがやってくれないこと

* Model上でバリデーションしたい
* 2段階バリデーション
* Valoquent

mpywさんのLTの動画はこちら: https://youtu.be/aMHiSL38XWI?t=1974

### どんなバリデーションをどこでやる？ (みっきー)

フロントエンドでのバリデーションとバックエンドでのバリデーションが2つあるが、
両方で同じバリデーションをかけるのか、バックエンドはそこでしかできないバリデーションをしたらいいのか？

* バリデーションの基軸としてあるべきはバックエンド(バックエンドのバリデーションは必須)
* 最小限のやつはフロントエンドでやることも
    * 共通化したいが、PHPとJSだと言語が違うのでJSでもう一度書くことになる。
    * ある程度、JSON Schemaで共通化することも可能
* UI/UXが大事な場合は、フロントエンドのバリデーションを手厚くする
    * マイクロインタラクション

### memoryさんのLT (5〜7分)

ハムスターを監視するシステムをラズパイとPHPのSwooleで作った話

* Swoole: 非同期処理を行うライブラリ
    * ReactPHP みたいなの。違いはSwooleはCで実装されている
* スタック: raspi, PHP 7.3, Python, Swoole
* 3万7千円
* カメラモジュールが送信するデータはCかPythonでないと処理できない。
* go routineみたいな構文

memoryさんのLTの動画はこちら: https://youtu.be/aMHiSL38XWI?t=2918

### エンジニアの転職活動ってどんなの？ (たすく)

* どういう会社に入るか
* いますぐ活動開始するか
* 3ヶ月位鍛えてからにするか
* エンジニアに転職するに際してどんなキャリアを積んでおいたらいいか
* 32歳でエンジニアに転職する場合、どういう方面を攻めたら良いか
* まずは、コードを書ける職場に行きたい
* 深掘りするエンジニアになりたいと思っている

...

* 現場入っちゃったほうが自習するより学ぶ効率がいいかも
* 転職サイトで未経験可なところを手当たり次第応募した
* 独学でLaravelでアプリを作った。それを使って未経験応募可の転職活動で活かした。
* 何社か受けてみて、傾向が分かってきて、面談に何が準備したらいいかわかった
    * 未経験は技術力はあんまり見られなかった
    * どちらかというとやる気を聞かれた
* エンジニアが足りてない現場が存在して、そういうところだと入りやすい。
    * 需要が高いところを狙うのもあり
* [https://qrunch.io](https://qrunch.io/)

### 業務で開発環境をもっと効率化するPhpStorm、Circle CIなどについて (てんこま)

* 開発環境周りの改善をしている
* Circle CI 1年前に導入した
    * lint + test
    * `php -l`
    * 
* PHPStanを使って静的解析したい
    * Circle CI: 5名
    * GitLab CI: 2名
    * Jenkins: 1名
* GitLab CIのKubernates連携が気になる
* コンテナのセキュリティスキャン(SAST)
* CIにかかる時間: 10分〜12分
    * Docker Layer Cache: true に設定すると早くなるかも
    * Docker for Macだったら、osxfsよりnfsの方が早い
* pcov (xdebugより50倍早い)
    * [https://github.com/krakjoe/pcov](https://github.com/krakjoe/pcov)

### なぜphp-javaを作っているのか？ (すいん)

[php-java/php-java: ☕🐘 JVM emulator by PHP](https://github.com/php-java/php-java)

* モチベーションは刺激
* 最初暇つぶしで始めた(2015)
* Hello Worldが動いたときに感動した
* 「なんでこれ作ってるの？」と聞かれて「わかんないっす」と答えた
* プロダクションで使われることは想定しておらず、刺激のために作っている
* [PHPerKaigi 2019 - Speaker Deck](https://speakerdeck.com/memory1994/phperkaigi-2019?slide=14)

### ローカルに実行環境がない (ぐーどら)

* EC2インスタンスにWinSCPでコードをアップロードして、動作確認している。なんでこうなっているかはわからない
* Vagrant、Dockerを使ってみたいと思っている。
* おすすめの開発環境と、チームでの共有方法。

・・・

* Subversion → Gitに移動した
* docker-compose.
* マイグレーションファイルをgitにコミットしてみんなと共有する
    * phinx (PHP)
    * flyway (Java)
 
### テストコードがないプロジェクトにテストを導入するにはどうしたらいい？ (ぐーどら)

* CodeCeptionを使っている
* 単体テストを書ける構造になってない

・・・

* 既存のコードをけずって、テストコードを書けるとこだけテストを書いてく
* 不具合駆動開発
* Run Kitを使う
* Selenium

### AWSの構成改善したい (ぐーどら)

AWSを使っている。
EC2で全部やっている。
ロードバランサー(nginx)、MySQLをEC2に入れている

* before afeter
* Nginx → ALB
* MySQL → RDS(MySQL) もしくは RDS(Aurora MySQL)
* memcached → ElastiCache(memcache)
* SMTPサーバ → SES(Simple Email Service)

### データベースの更新作業が課題になっている (ぐーどら)

* マイグレーション
    * [Flyway by Boxfuse • Database Migrations Made Easy.](https://flywaydb.org/)
    * [Phinx](https://phinx.org/)
* DBスキーマ管理ツール
    * [GitHub - schemalex/schemalex: Generate difference sql of two mysql schema](https://github.com/schemalex/schemalex)
    * [SQLで羃等にDBスキーマ管理ができるツール「sqldef」を作った - k0kubun's blog](https://k0kubun.hatenablog.com/entry/2018/08/25/114455)

### PHPのストリームについて (かっきー)

```php
file_get_contents('http://example.com');
```

* [https://github.com/php/php-src/blob/master/ext/standard/file.c#L525](https://github.com/php/php-src/blob/master/ext/standard/file.c#L525)
* blocking IOとnon-blocking IO

### Laravelから一歩進んで気になっていることを話したい (まっぴー)

Laravelが好きで触っている。Go、Rust、Kubernetesなどについて。    

# YYPHPは毎週やってます

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

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