YYPHP#95「ライブラリ選定基準って？ライセンスどうしてる？」「Laravelで参考になる教材について語りたい」「実務で役立つLaravelベストプラクティスを教えてくれ！」「アルゴリズムが仕事で役立ったことってある？」「受託開発でのデプロイってどんなふうにやってる？」

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

[YYPHP#95]: https://yyphp.connpass.com/event/132259/
[YYPHP]: https://yyphp.connpass.com/

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

__今回の配信動画__


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">YYPHP#95の生配信開始しました！今日のテーマ・参考になった教材について話したい・実務で役立つLaravelベストプラクティスを聞きたい <a href="https://t.co/NCputyjHfA">https://t.co/NCputyjHfA</a></p>&mdash; suin❄️AWSできる方募集中です🙏🏻固定ツイートご覧ください (@suin) <a href="https://twitter.com/suin/status/1157238955600801792?ref_src=twsrc%5Etfw">August 2, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

__過去回の配信動画__

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

__前回__ → [YYPHP#94「PHP勉強してて、つまづいたこと、はまったこと教えて」「自作フレームワーク開発、どこから手をつけたらいい？ 」「テスト環境と本番環境のDBの整合性、どうやって合わせている？」「仮想DOM系のフレームワークを触っている人がいたら話きたい」「組み込み系とウェブ系の開発スタイルの違いを聞きたい」 - Qiita](https://qiita.com/suin/items/8ce16de1a075d00ca35e)


## 雑談

### ライブラリの選定基準ってどうしてる？。ライセンスとか (かきうち)

* WISIWIGエディタで脆弱性が出た
* エスケープするライブラリを入れようと思った
* [https://github.com/ezyang/htmlpurifier](https://github.com/ezyang/htmlpurifier)
* ライセンスは何を基準に入れたらいいか？

...

* GPL系:
    * GPL系は難しいから、心配なら避けたほうが無難
    * AGPL
        * 改変した場合、請求されたらソースを公開する必要がある
        * ウェブサービスであっても改変してて請求されたら同じく公開が必要
    * LGPL
        * 中に組み込んで使ったら、組み込んでいるソフトウェアも同じくLGPLにする必要がある
* MIT,BSD,Apache:
    * これだったらあまり難しいこと考えずとりあえず使えるという判断ができる

・・・

* フロントで使う場合、GPLは伝染する。LGPLは伝染しない
* PHPは動的言語なので、実行時に読み込まれるのであれば考慮しなくて良いという判断がある
* PHPはPHP3というライセンス
    * https://www.php.net/license/index.php
* ライセンスの記述が必要な場合はLICENSEファイル、COPYRIGHTファイルなどに記入する

...

### HTMLの入力を許すときのXSS対策は？ (かきうち)

* https://github.com/ezyang/htmlpurifier
* Content-Security-Policy
* 社内で使うCMSであればセキュリティ的にはそこまで気にしなくてもよいかも
    * 脆弱性診断でひっかかるケド…

### 参考になった教材について話したい (ただ)

* Laravelを最初に学ぶにあたっての教材を紹介したい
* [LaravelでEC開発 | 「Laradock(ララドック)も学べる」LaravelでECサイトを作ってみよう！ | Techpit：テッ](https://www.techpit.jp/p/ec-laravel)
    * 決済まではなかったが、どういうふうなのを学習すればいいのかというところは書いてある
    * いいところ
        * ファイルのパスとかが全部ちゃんと書いてある
            * 挫折しにくそうですね
        * 教材作者にヘルプをお願いすることができる
        * gif動画で動きが分かるようになっている
    * 1日で70%くらいまでできた。
        * カートに入れられるところまで。
    * 中級者向け
        * なんかしらPHPをいじったことある人向け感はある
* 『PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応』
    * 最初にこの本に手を出したが、Laravelの基本的なことを踏まえてから読んだほうが良かったと感じた。
* [入門Laravelチュートリアル (1) イントロダクションと環境構築 | Hypertext Candy](https://www.hypertextcandy.com/laravel-tutorial-introduction)
* [『絶対に挫折させないアプリ開発　はじめてのLaravel』](https://plumsa.booth.pm/items/1048008)

### Laravelを仕事に入れる上での注意点を聞きたい (かきうち)

* バージョンアップが大変って聞きましたが？
    * たまにすっごい変わることがあるので、大変だという話を聞いた。
    * マイナーバージョンアップでも大きく変わる場合も。
    * 細かくバージョンアップしていれば、そんな大変じゃない気もする
    * ミスってもLaravel関連の情報が多いのでまだいいかも
* LTS版を使えばいいんじゃない？
    * Long Term Support版
    * 長くバグ修正などをやっていくと宣言されたバージョン
    * 今なら5.5を使えばいいと思います！
        * タイムテーブルを見ると5.8でいい気もする
        * [Laravel リリース・サポート期限 - Qiita](https://qiita.com/kidatti/items/c293ad9345c1130f150e)

...

* PHPのバージョンアップのイメージが掴めてないけど？
    * 基本は動作確認していく。
    * テストサーバのバージョンを上げて潰していく。

### 実務で役立つLaravelベストプラクティスを聞きたい (ただ)

* ファイルの置き方一つとっても自由なので、最初どういう取り決めをしたりしたのか知りたいです。


* おすすめの記事:
    * [Top 10 Laravel Best Practices You Should Follow - Innofied](https://www.innofied.com/top-10-laravel-best-practices/)
    * [laravel-best-practices/japanese.md at master · alexeymezenin/laravel-best-practices](https://github.com/alexeymezenin/laravel-best-practices/blob/master/japanese.md)

* scoped queryという機能が便利でよく使う
    * SELECTのWHERE条件を予めセットした検索方法
* Railsではdefault scoped queryはアンチパターン
* Validation
    * FormRequstにバリデーションを書くことが多い
        * Controllerの視認性がいい
        * フォームを使い回すことができる
...

* 論理削除はあんまり良くないと聞いたが？
    * ちゃんと設計したほうがいい
    * 手抜き感がある
    * 検索性能が劣化することもある
        * trueとfalseの2値でカーディナリティが低くなり、テーブルフルスキャンになることも
* [データの削除は非推奨](https://www.infoq.com/jp/news/2009/09/Do-Not-Delete-Data/)
* [アカウント削除機能に意味はない - Qiita](https://qiita.com/ponkotuy/items/6049388d564fb4385f4e)

### アルゴリズムを勉強して実務で役に立った場面は？ (ますい)

このアルゴリズムの考え方で〇〇を実装できた！とか聞きたい！

...

* CSSのパーサーを書いてたとき(実務)
    * CMSを作っていたとき。
    * SassとかLESSとかない時代
    * 変数をCSSに使えるようにしたかった。
    * 逆ポーランド表記法
        * 3 + 4 ... 3 4 +
* 下の方にいけばいくほど意識することが多い気がする
    * ライブラリなどの気持ちがわかった上で使えるところはある
* DIコンテナ
    * 有効循環グラフ
* 再帰処理は？
    * アルゴリズムではない？
* [「アルゴリズム図鑑」](https://apps.apple.com/jp/app/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E5%9B%B3%E9%91%91/id1047532631)
    * アルゴリズムの気持ちが分かる
    * 字で書いてあると分かりにくいが、このアプリは可視化しながら学べる。
* [アルゴリズム図鑑 絵で見てわかる26のアルゴリズム | 石田 保輝, 宮崎 修一 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4798149772)
* 二分探索って考え方が使える気がする
    * デバッグするとき
        * 上半分削ってみる
            * 下半分の上半分を削ってみる

### 受託開発においてのデプロイの手法 (ふー)

継続的にコードをデプロイしていくのではなく、あるタイミングでどかっとデプロイする場合どうする？
開発環境をハッピーにしたいという動機
...


* 自動化はあんまりしない。
* git pull OR 固めて持ってって解凍して配置
* 開発チームのニーズとお客さんの要求によって決めていったほうがいい

# YYPHPは毎週やってます

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

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