YYPHP#47「Macを新しく買ったらこれだけはいれとけリスト、LaravelとかEloquentを使っているOSS、fatal errorを例外としてキャッチ、チームでの開発どうやる？、構成力･設計力を高めるには、Linux基礎知識を素早く学ぶ、PHPは廃れる？発展していく？、YYPHP1年を振り返って、社内情報共有どうしてる？」

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

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

[YYPHP#47]:  https://yyphp.connpass.com/event/95842/
[YYPHP]: https://yyphp.connpass.com/
YouTubeでの配信映像はこちら-> [#YYPHP #47【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】](https://youtu.be/bPh3jwdFyts)

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

## 参加者17名(リモート5名)

* 1年未満: 6名
* 2年未満: 1名
* 3年: 3名
* 10年以上: 6名
* 不明: 1名

## 話したいこと

### 「Macを新しく買ったらこれだけはいれとけ」を聞きたい

* Chrome
* PhpStorm
* Homebrew
* Docker for Mac
* Bartender 3 (ツールバーを整理できる)
* Total Spaces (いいかんじの画面切り替え)
* SequelPro (MySQL GUIクライアント)
* osquery ()
* Dropshelf (ファイル、ドラッグアンドドロップできる一時的な場所を作れる)
* Unclutter ()
* Magnet2
* 1Password (パスワード管理ツール)
* Fantastical (カレンダー)
* Alfred (アプリケーションランチャー)
* Tweetbot (ツイッタークライアント)
* Reeder (RSSリーダー)
* MacDown (Markdownエディタ)
* CotEditor
* Flexiglass
* Numi (数式が書けるテキストエディタ電卓)
* Code Runner (スクリプトをさくっと実行できるエディタ)
* Google日本語入力
* AquaSKK (reoringおすすめのIME)
* MacVim
* SourceTree
* iTerm2 (ターミナル)
* ForkLift (FTPなどのクライアント)
* Caffeine (スクリーンロック制御)
* Monosnap (スクリーンショット、動画も撮れる)
* MacsFan Control (Macのファンの回転速度を上げられる)
* その他
    * 入れとけとはちょっと外れますが、TimeMachineの設定してバックアップとりましょう。バックアップ大事ですよ

### LaravelとかEloquentを使っているOSSを教えて

LaravelのEloquentを使っているが、クラス設計などを参考にしたい。

* [Koel](https://github.com/phanan/koel)
* [Made with Laravel](https://madewithlaravel.com/)
    * ここで探すといいかも
* [Laravel open source project で参考になりそうなもの - Qiita](https://qiita.com/acro5piano/items/8dc4597e12d9050c0708)


### fatal errorを例外としてキャッチする方法を知りたい

* PHP5系ではできない。
* PHP7からは`Throwable`か`Error`をキャッチすることができる。
* Fatal Errorの内容によってはリカバリーできるかも
* 構文チェックと例外処理は分けて考えたほうがいい
* 個別に対応していくよりかは根本を断つ努力をしたほうがいいかも

* 静的解析をかけてみると問題点を見つけられるかも
    * 循環的複雑度が20を超えるとまずい
    * phpdepend
    * PhpStormのInspectionで解析する
* 地層みたいにソースが溜まってきている

### チームでの開発をどうしたらいいか

* 個人での開発が多いので、大きな規模の開発の知見を得たい。
    * ログの設計とか
    * テストの書き方
* 個人で好き勝手やることと違って気を付けないといけないことは？
* ログをどうやって出力していったらいいか？
    * ソースコードにログを出すコードを散りばめるより、イベントを発生させて、Loggerでそのイベントをsubscribeして記録するなど
* フレームワークの規約にどっぷりつかる
    * 自分で規約を作ったりしなくていい
* 可読性をなるべく確保する
    * 他の人に引き継ぐときにらく
    * Code Fomatter
        * PHP-CS Fixer
    * editorconfig
    * .idea/???.xmlを共有する
    * PHPStormならコードを共有できる
* レビューよりペアプロのほうがオススメ
    * レビューだと後からになる
    * 言いづらかったりすることも少ない
    * リモートでペパプロもできる。VSCodeとか
* 用語の統一
    * ユビキタス言語を使う
        * ドメイン駆動設計という本を読んでください。
        * 戦略の部分と戦術の部分がある。
            * 2つの複雑さがある
                * 技術的な面
                * ビジネスの専門知識の面（ドメイン）
    * 例えば「予約」 はbookingなのかreservationなのか。
    * 用語集を作っておいたほうがいい。日本語、英訳、その意味

### 構成力、設計力を高めるには？

ひととおりLaravelでシステムを作ってみたが、やりたいことを調べてフレームワークを使って、動くようにすることはできるようになったが、設計力を高めるにはどうしたらいいか知りたい。

* オブジェクト指向がちゃんと理解できていれば設計力が高まる
* 理論と修行
    * 理論
        * オブジェクト指向の本
            * Clean Code
            * 現場で役立つシステム設計の原則
            * アジャイル開発の奥義
            * アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
            * デザインパターン
            * ドメイン駆動設計
            * エンタープライズアプリケーションアーキテクチャパターン
            * ThoughtWorksアンソロジー ――アジャイルとオブジェクト指向によるソフトウェアイノベーション
    * 修行
        * 単体テストを書きましょう
            * モックとスタブで分離できるようにしましょう
            * DIを理解しましょう
        * オブジェクト指向エキササイズ
            * 1クラス50行までにする
            * メソッドの引数は2個まで
            * 1メソッド20行まで
            * elseifを使わない
            * クラスのプロパティを全メソッドが使用している
    * 森さんに聞く
    * suinさんに聞く

### Linuxの基礎知識をすばやく学ぶには？

社内でDockerをちゃんと運用しようというプロジェクトがうごいている。
そのプロジェクトに入れそう。
それ以前にシェルやLinuxについての知識がごっそりぬけている。

* 実機にインストールからApacheが動くところまでを試行錯誤する。セルフハンズオン。小さくてもいいからハードに入れて通信させるまでやる。
    * 仮想マシンだと愛着がわかない
    * Apacheはnginx
    * 自作ルーターを作る。Raspberry Piでできる。
* ちっちゃいインターネットを作る。
    * DHCP
    * DNS
* Linuxハンズオンやる。

### PHPは廃れていくのか？ 発展していくのか？ 

* [Kskeさんのツイート: "GitHubの分析記事によると、 いまメジャーな言語 → JavaScript、Python、Java、c++ 今後学ぶべき言語 → Go、TypeScript、Kotlin、Rust 避けた方がいいかもしれない言語 →PHP、Ruby、Objective-c、Perl… https://t.co/bjSgCjJroP"](https://twitter.com/Kskexx/status/1023719574846373889)
* [Ranking Programming Languages by GitHub Users](https://www.benfrederickson.com/ranking-programming-languages-by-github-users/)
* いきなり廃れるということはないだろう
* PHPで何をするかによる
    * フロントエンドが最近Nodeでやることがおおい
    * PHPがバックエンドに徹することが増えてきた
        * そうなると、Javaなどの安全な言語を選ぶ選択肢が増えてきた
    * バックエンドの役割が変わってきている
        * JSONマシン
        * PWAでサーバサイドレンダリング(SSR)をする必要が出てくるとバックエンドもNodeに
* TypeScriptが増えてきているのは大規模な開発でJSが使われてきているためだろう
    * PHPやRubyのポジションを食ってきている？
* Go、RustはC++などのミドルウエア部分のシェアをとってきている
* バックエンドが無くなる説
    * 無くなるということはない
    * ビジネスロジックをどこに置くか
    * どんなアプリケーションが増えていくかにも左右されるのでは

### YYPHPの1年を振り返って、苦労話など聞きたい

外部の勉強会をやりたいと思っているが、YYPHPの運営がシステマチックで参考になるなと感じた。

* 一人の回は数回あった
* もともとは「CakePHP3もくもく勉強会」だった。
* もくもく会をしても雑談ばかりしていた。
* 交流の形のほうが聞いて終わりにならない。Slackにも入ってもらえればコミュニティができて関係が続く。
* suinの相談室でオンラインでつながりを増やそうとしたが苦労した。
* youtube配信でも情報を届けたい。「インフラ勉強会」を参考にしている。
    * 動画のほうが雰囲気が分かる
    * 見てから来る人も増えた。不安を拭えている。敷居が下がっているのでは。
    * バックナンバーが残っているのも嬉しい。youtube liveがいい。
    * HackMDを使うようになったきっかけは何か。リアルタイムのほうが楽だよね。
    * 後からまとめるのは大変。やっている間にまとめたほうが楽。
* いつかはコミュニティ的に運営していきたい

### PHPのコミュニティがどんな感じかについて聞きたい

* すごいひとがいっぱいるなというのはわかりました
* PHPのコミュニティってなんまり無い気がする
* 言語についてのコミュニティはRubyとか他の言語に比べて無い気がする
* PHPのコミュニティって感じはないですね～。phpconが年1のコミュニティの集まりという感じ
* Symfonyの会にも行った。昔から生き残っている人たちがすごい人になっている
* YYPHP Conferenceはどうか。大規模雑談会。300人で雑談するとどうなるのか。


### 社内の情報共有どうしているか聞きたい

自分が情報発信をする立場になりそうだが、議事録を書いたりする文化がないが、情報共有の仕組み化、工夫を知りたい。

* 情報共有ツール
    * esa
    * Backlog
    * Qiita:Team
    * DocBase
* 情報共有の場面とか粒度による
    * Slack
        * 分報
        * [Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ〜Problemが10分で解決するチャットを作ろう | | Craftsman Software Inc.](http://c16e.com/1511101558/)
    * 打ち合わせはHackmdでリアルタイムに記事録
        * あとでesa.ioにその議事録を載せる
    * Scrapbox
* 技術的に盛り上がることがあるが、まとめる人がいない
    * 誰かが始めるしかない
    * みんなでHackmdに書きながら会議する
        * 書いてというと意外と書いてくれる
    * 録音してyoutubeにアップすると文字起こししてくれてダウンロードできる
    * Qiitaに上げるのも良い。

## YYPHPは毎週やってます

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

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