YYPHP#14イベントレポート「Laravelの良いところ、依存性の注入、CakePHPのビュー」

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

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

[YYPHP#14]: https://yyphp.connpass.com/event/70010/
[YYPHP]: https://yyphp.connpass.com/

## 参加者

* 7名
* PHP歴の分布
    * 10年〜: 2名
    * 5年: 1名
    * 3年: 1名
    * 1年: 1名
    * 0〜6時間: 2名
* 普段使っているフレームワーク
    * Laravel: 2名
    * CakePHP: 1名(CakePHP2系)、(他2名は検討中)
    * その他: 2名

## CakePHPとLaravel

* 日本語はドキュメントがそろっている
* 世界的にはLaravelが多い
    * 日本も多くなってきてる
* CakePHPよりLaravelは初心者には難しいのでは？
* 言語にこだわりにないならRuby on Railsがいいかも？

### CakePHP 2.0のビュー

* [ビュー - 2.x](https://book.cakephp.org/2.0/ja/views.html)

```
// app/View/Common/view.ctp
<h1><?php echo $this->fetch('title'); ?></h1>
<?php echo $this->fetch('content'); ?>

<div class="actions">
    <h3>Related actions</h3>
    <ul>
    <?php echo $this->fetch('sidebar'); ?>
    </ul>
</div>
```
* [Smarty](https://www.smarty.net/docsv2/ja/) → なつかしい
* [Twig](https://twig.symfony.com/) → 最近はあまり使わない？
* [Blade](https://readouble.com/laravel/5.3/ja/blade.html) → Laravelはこれ

## Laravelの良いところ (fagaiさん発表)

* 最新のv5.5はPHP7以降。
* 5.1と5.5は色々変わっている。
* 良いところ
    * サービスコンテナが超強力
    * ソースがクリーン
    * 基盤にSymfony Componentを利用
    * 拡張性が高い(Service Provider)
    * テストが書きやすい
* サービスコンテナ
    * DIコンテナ
    * 依存性の注入(Dependency Injection)とは？
        * → 調べてくださいw
        * JavaだとSpringとかにある
        * オブジェクト指向の話
        * クラスの内部でインスタンスを作らない(new しない)で、外でnewして渡す方法のこと。
        * DIのメタファ
            * ファミコン、ゲームソフト(カセット)、カセットを差し替える(依存性の注入)
            * テトリス専用ゲーム機。テトリスに依存。ソフトは差し替えられない。
    * Laravelのコアそのものがサービスコンテナ
    * 依存性の解決が賢い
        * newしようとしているコンストラクタや、呼び出そうとしているメソッドをReflectionで調べて、必要なパラメータを集めてくれる。
    * メリット
        * ソース上でnewする必要がほぼ無くなる
        * テストしやすくなる
        * 柔軟性が高くなる
* 微妙なところ
    * 他のフレームワークと比べるとやや重量級
        * そもそもPHPってすごく速い訳でもない
    * レンサバなどではメモリ不足で初期設定すら出来ないことも
        * Hemtelは聞く
        * Vagrantでもある
        * PHP7ならメモリ不足にならないこともある
        * レンサバ(VPSではないほう)で動かすのもほぼ無い
    * すごい高速であるとは言いにくい
        * 速度よりも書きやすさ
    * 初心者には難しい (DIが知らないと)

```php
app()->bind(PersonnInterface::class, Alice::class);
```

* 感想・質問
    * 分かりやすかった！
    * たまにあるReflectionExceptionって何ですか？
    * DIするかテストしやすくなるわけじゃなくて、テストしたいからDIしたくなり、DIするとnewを書くのが大変だから、DIコンテナを使うのでは？
        * テストしやすくて書きやすいフレームワークを作りたいというところからLaravelが開発されたらしい
    * DIするとIDEの補完が効かなくなる
        * [barryvdh/laravel-ide-helper](https://github.com/Barryvdh/laravel-ide-helper)を使うといいよ
        * [LaravelでIDE補完を有効にする - Qiita](https://qiita.com/michiomochi@github/items/fc70230402972c99472f)

## PHP勉強会@東京

* [PHP勉強会@東京 | Doorkeeper](https://phpstudy.doorkeeper.jp/)
* ほぼ毎月開催。
* 12年以上続いているイベント。
* 11月はもういっぱい。12月25日が空いていたので申し込んだ。
    * 12月だけなぜか月曜日

## PHP以外の雑談

* [中華イヤホン　まとめサイト](http://china-earphone.hatenablog.com/)
* [Amazon | KZ ZSE kz イヤホン 高音質 モニターイヤホン カナル型イヤホン 2DD 搭載 スポーツ イヤフォン ヘッドホン 密閉型 オーディオヘッドフォン マイク内蔵 WOOeasy (マイク付き) | WOOeasy | イヤホン・ヘッドホン 通販](https://www.amazon.co.jp/KZ-ZSE-%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A4%E3%83%A4%E3%83%9B%E3%83%B3-%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%E3%83%98%E3%83%83%E3%83%89%E3%83%95%E3%82%A9%E3%83%B3-WOOeasy/dp/B0747KVDZG/ref=pd_lpo_sbs_23_t_0?_encoding=UTF8&refRID=EA3TPW0G9W17B5MFQ3T1&th=1)
    * バランスが良い
* [「FFFTP」定番FTPクライアントソフト - 窓の杜ライブラリ](https://forest.watch.impress.co.jp/library/software/ffftp/)
* [FTPクライアント「FFFTP」ついに開発終了か　6年前に“引き継いだ”開発者が表明 - ITmedia NEWS](http://www.itmedia.co.jp/news/articles/1710/26/news112.html)

## 参加者の感想「今回参加してよかったことは何ですか？」

* フレームワークについて知ることができた。
* 課題解決した。
* 結構楽しかったです、自分が最後ほとんど喋っちゃったけど
* CakePHP がちょっとわかった
* ファガイさんのLaravelのスライドがわかりやすかった。ゲーム機のカセットの例えがわかりやすかった。
* アットホームな感じで良かったです

### 改善してほしいこと

* レベル感に差があるので、話題が難しい時があるかもしれない。
* 事前にどういう人が来るかわかるといいかもです

## YYPHPは毎週やってます

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

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

## 追伸

YYPHPのイベントレポート公開が#6以降滞っており大変申し訳ございません。過去の分も遡及してアップしていきたいと思います。