YYPHP#41「オブジェクト指向はもういらない？、LaravelでCSVインポートのバリデート、デプロイツールEnvoyの使い方、Laravelで定数の書き方、PHPはじめの一歩、古いPHPの環境構築、エラーハンドリング、Vue Native」

これは2018年06月15日に開催したPHPerイベント[YYPHP#41]のイベントレポートです。

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

[YYPHP#41]:  https://yyphp.connpass.com/event/90138/
[YYPHP]: https://yyphp.connpass.com/
YouTubeでの配信映像はこちら-> [YYPHP #41【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】 - https://www.youtube.com/watch?v=wHoEMIM0c0g)

![](https://qiita-image-store.s3.amazonaws.com/0/889/0051f99f-b555-6064-fcc9-3280e5543a1a.png)


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

## 参加者10名(リモート5名)
* PHP歴
    * 1年未満: 4名
    * 3年: 1名
    * 10年以上: 5名

# 今日話したいこと/聞きたいこと

## LaravelでCSVインポート時のバリデーション

* CSVをインポートしてバリデーションしたいが、やり方がわからない。
* フォームからCSVをアップする
* 自分でバリデータを実装する
* 何をバリデートするかによる
    * コントローラ内で全て解決してしまっている
* GoodbyCSVというライブラリはあるが、バリデーションは自分で書かないといけない
* [CSV data manipulation made easy in PHP. - CSV](https://csv.thephpleague.com/)
* 配列でLaravelの機能に渡してあげればできそう
    * [Laravelで多次元配列のバリデーション - Qiita](https://qiita.com/horikeso/items/4f8093b0871fba3b4c1d)
* だめだったらSymfonyのものを使ったほうが良さそう

* csvのやつ、こんなかんじですかね

    ```
    $validator = Validator::make(['datas'=>$datas], [
      'datas.0.*' => ... //1列目
      'datas.1.*' => ... //2列目
    });
    ```

## Laravelでのデプロイツールの使い方

* Laravelの[Envoy]というデプロイツールの使い方を知りたい
    * envoy → 使節という意味。environment + deployの造語？
* LaravelでやるならEnvoyがいいのでは？
* Windowsのローカルの環境からやろうとすると失敗してしまう
    * 「EnvoyはMacとLinuxのオペレーションシステムのみサポートしています。」
    * WindowsでDockerを入れてやっちゃうといいのでは
    * [Envoy Task Runner - Laravel - The PHP Framework For Web Artisans](https://laravel.com/docs/5.6/envoy)
[Envoy]: https://readouble.com/laravel/5.4/ja/envoy.html

## Laravelでの定数の扱い方

* configのconstから読み込んでいる
* クラスの中でしか使わない定数はクラスに配置するのがいい
    * 責務的に
* ファイル保存先のディレクトリなどは、constants.php
* なんでもかんでもconstants.phpに置くとカオスになる
    * 役割ごとに分けたほうがいい
* Laravelはどこに置くかは決まってないから自分たちのわかりやすい場所を考える必要がある
    * Configヘルパーをつかいたならconfigの下がいい

## PHPのはじめの一歩のアドバイスを聞きたい

* 入社してLaravelの本をぽんと渡された
* まだ本格的なPHPの勉強をしていない
* こういう勉強をしたらいいというアドバイスがほしい
* これ一読するべき [PHP: The Right Way](http://ja.phptherightway.com/)
    * PHPは歴史が古いので、古い情報がたくさん出てくる。何が最近の書き方か知っておいたほうがいい。
    * そのために役立つ情報源
* Udemy
    * いいところは倍速再生ができるので時短できる
* Progateとかで最初勉強するとかありかも
    * Progate、PHPはだいぶ残念な感じなんですよね(・ω・｀)
    * 最初プロゲートやった
        * 導入としては良かった
        * 2コマ目まででフォームが作れるようになる
    * 月額980円
* [いちばんやさしいPHPの教本 人気講師が教える実践Webプログラミング (「いちばんやさしい教本」シリーズ) | 柏岡 秀男, 池田 友子 |本 | 通販 | Amazon](http://amzn.asia/2WJJbaj)
    * 最初のころ読んだ
* [TechAcademy [テックアカデミー] | オンラインのプログラミングスクール](https://techacademy.jp/)
    * フレームワークを学ぶときに使った
* [Laravel Book and Learning Center | Learning Laravel](https://learninglaravel.net/)
    * 英語だけど、Laravelのチュートリアルたくさん
* [45歳から始めるプログラミング PHP編 No1 多次元配列を1次元配列に変換する関数を書け！(再帰処理で) - Qiita](https://qiita.com/nouphet/items/a666e359e43c6e28ef6b)

## PHPのバージョンが古いものの環境構築をするときに

* PHP 5.1の環境
* 古いバージョンのXAMPPを取ってきてやっている
* みんなどうやっているか？
* ローカル環境を作る時
    * 結構時間かかる
* XAMPP取ってきて動いているが、環境を作るのに時間がかかる
    * 1日くらいかかっている
        * そのくらいはかかるもの
* データベースが文字化けしている
    * [mb_internal_encoding](http://php.net/manual/ja/mbstring.configuration.php)
    * [mysql_set_charset](http://php.net/manual/ja/function.mysql-set-charset.php)
    * phpinfo()でconfigureオプションとか設定内容を確認して統一する
* 互換性チェックツールって具体的にはどんなやつがあるんですか
    * [wimg/PHPCompatibility: PHP Compatibility check for PHP_CodeSniffer](https://github.com/wimg/PHPCompatibility)
    * あとPhpStormのLanguage Levelを変更してInspectionかけるのもオススメ
* 同じ環境構築にしてもXAMPPを詳しくなっても不毛なので、Dockerでやったほうがいいのでは？
    * [docker-php-minimal/php-5.1.5 at master · nubs/docker-php-minimal](https://github.com/nubs/docker-php-minimal/tree/master/php-5.1.5)
    * MySQLも古いバージョンのイメージがある
* LaravelだったらLaradockを使うと簡単に環境構築できる

## PHPのエラーハンドリングについて、何かいい方法はないか

* エラーを巡った組織コラボレーション
* RuntimeExceptionを継承して、カスタム例外を作ったほうがいいのでは
* キャッチするならセントリーとか使えばよさそう
* Exceptionの種類が多すぎて、何が帰ってくるかがわからない
    * 依存な層から
* 例外はいらないのでは？
    * 本当に例外的なところにとっておくべきかと
    * 例外の言葉がゆるく使われているのでは
    * 業務上の例外は想定されているから、例外じゃないのでは？
    * ドメインの例外はいらないと思う
        * Goのようにエラーをreturnするほうがいいのでは
            * Goにもpanicという例外機構があるが、通常はエラーをreturnする
* 例外はcatchして握りつぶす人がいる

## Vue Nativeについて話したい

* React Nativeの上に乗ってる
* [Vue Native](https://vue-native.io/)
    * React Nativeのラッパーなので、React Nativeの進化で勝手に良くなっていくのでは
* [Weex](https://weex.incubator.apache.org/)
    * あんまり進展してない気がする
    * なくなっちゃうかも？
* Vueに慣れている人はReactを学ばなくていい
    * Vuexとかvue-routerがそのまま使える
* Laravelだったら標準でVue.jsが使える
    * Reactも使える
    * JavaScriptの勉強はした方が良い。ES6とか
* VueとReactどっちがいいか？
    * Vueのスター数がReactをぬいた
* [基礎から学ぶ Vue.js | MIO | 工学 | Kindleストア | Amazon](https://www.amazon.co.jp/dp/B07D9BYHMZ/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
* Vueは公式の情報がしっかりしているからわかりやすい
* 環境構築もVueは楽
    * 入りやすいのはVue

## オブジェクト指向言語が難しすぎる件

* 現場の人たちがオブジェクト指向が難しすぎてもういらないんじゃないかという雰囲気になっているので、いろいろ話したい
* 機能が多すぎる
* [オブジェクト指向は禁止するべき - きしだのはてな](http://d.hatena.ne.jp/nowokay/20140718)
* オブジェクト指向はオーバヘッドが大きいので、作るのはしんどい
* すごい熟練してないとオブジェクト指向で良いコードが書けない。
    * 精通していないとちゃんとしたコードが書けないので、それが辛いのではないのかと
    * 5年くらい本気でやってないと、ギリギリいけるかどうかのレベルになると思う
* オブジェクト指向は広大なので、完全にわかったと思うまでかなり時間がかかる
    * そこに至るまで不安になりながら書いていると思う
* オブジェクト指向とデザインパターンを一緒くたに考えている人がいる
* チームのレベルを上げないといけない
* Go言語で良くない？
* オブジェクト指向は言語設計レベルでミスもある
    * Javaのジェネリクス
        * new Tできない
        * [Javaの理論と実践: Generics、了解！](https://www.ibm.com/developerworks/jp/java/library/j-jtp01255/index.html)
* オブジェクト指向は万能じゃない
    * 適材適所で使うべき

## YYPHPは毎週やってます

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

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