YYPHP#53「ちゃんとしたプログラムを書くには、良いコードを書く上で気をつけていること、エンジニアのアウトプットの仕方、エディタは何を使っていますか？何を勉強していったらいいのか聞きたい(5ヶ月目)、今後YYPHPをどう盛り上げていくか？今後のPHP系イベント」

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

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

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

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

## 参加者14名(うちリモート6名)

* PHP歴
    * 1年未満: 3名
    * 6年: 1名
    * 10年以上: 4名
    * 不明: 6名

## 技術書典5のおすすめサークル(2018年10月8日)

* 技術書典とは
    * 技術書の同人誌即売会
    * Laravelの入門書などが売られる
### YYPHP推薦の技術書典5参加サークル
* こ37 [プラムザ](https://techbookfest.org/event/tbf05/circle/45210001)
    * はじめてのLaravel　～絶対に挫折させないアプリ開発～
* あ20 [湊川あいの、わかば家。](https://techbookfest.org/event/tbf05/circle/47000003)
    * マンガ：告白に学ぶHTTPステータスコード 〜エラー編〜
    * マンガでわかるDocker① 〜概念・基本コマンド編〜
    * マンガでわかるDocker② 〜開発環境を作ろう編〜
* か80 [増井技術士事務所](https://techbookfest.org/event/tbf05/circle/53100001)
    * プログラミング言語図鑑
* う74 [このすみ堂](https://techbookfest.org/event/tbf05/circle/39040001)
    * [新刊] PHP中級者を目指す 〜言語を使いこなすための本〜

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

## ちゃんとしたプログラムを書くには

* 設計と実装のどちらもできることが必要
* エンタープライズのアプリケーションを作るとき、
    * 業務知識を知らないといけない
    * プログラミングにおとしこまないといけない
* どっちかが得意ではないエンジニアが多い気がする
* オブジェクト指向というより、データ設計が中心になるのが多い気がする
* ヒアリングをするときに気をつけること
    * インプットとアウトプットを先に考える
        * 一度にすべてヒアリングしつくすのは難しい
        * 作れる範囲から作っていく
        * データを考えるのはその後
* おおきいプロジェクトは役割分担ができている
    * PM、アーキテクト、プログラマ、テスターなど、専門家されていて、プログラマが設計スキルを上げる機会が少ないかも
    * 参加しているプロジェクトの規模によるかも
* 設計のスキルとプログラミングのスキルは別物
    * それぞれトレーニングする必要がある
    * 設計スキルをあげるには設計手法を学ぶのがいいと思う
        * オブジェクト指向設計
        * 関数型プログラミングからパクったオブジェクト指向のパターン
    * トレーニングとしては
        * もらった設計をみたときに、テストの方法を考えるのが良い
            * その仕様が実現可能かすぐわかる
        * 単体テストを書く
            * テストが大変だと感じると、設計が悪いことがよくあるので、設計を見直す機会になる
* PHPは情報処理って感じしますね。PHPは情報A→B→Cの順で加工するだけ、これを超えて業務システムとか言い始めると辛いイメージ
* 例えば業務システムの設計は、既存業務をどうやって情報Aに変換するか、第二フェイズはどうやって情報AをCまで転がしていくか
* 設計にもいくつかある
    * 業務をどういうシステムにするか
    * できた設計をどういうプログラムに落とし込んでいくかなど、３段階くらいある気がする
    * 要件定義、概要設計、詳細設計、テスト設計、運用設計
        * 大きな地図、中くらいの地図、細かい地図 みたいなイメージ
        * 細かい方の設計がちゃんとできないと、その上のレイヤーの設計ができない気がする
    * [The C4 model for software architecture](https://c4model.com/)

## いいコードを書く上で気をつけていること

* リーダブルコードを読んで学んでいる
* 『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) 』
    * Amazon: http://amzn.asia/d/iubOljX
    * 目次はこちら: https://www.oreilly.co.jp/books/9784873115658/
* 「思いやりコード」
    * 読む人、使う人にとって思いやりのあるコードを書くようにする
        * 読むとき、理解しやすい
        * 使うとき、使いやすい
        * 改修したいとき、改修しやすい
    * 読み手の立場になって書く
* [新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES) | Martin Fowler, 児玉 公信, 友野 晶夫, 平澤 章, 梅澤 真史 |本 | 通販 | Amazon](https://amzn.to/2OLyAQD)
    * 第二版はサンプルコードがJavaScriptになるらしい。
* 実行速度が遅くなるよりも読みやすさを優先することがある
    * 速度を優先するときはコメントで理由を書くようにしている
* t_wadaさんの格言「コードには How、テストコードには What、コミットログには Why、コードコメントには Why not」
* 私はとにかく変数名、クラス名、メソッド名を練りますね。後は行数を出来るだけ減らす。
    * 名付けは難しいって言いますよね

>  現実のプログラミングで本当に難しいのは、キャッシュの無効化と名前付けだけだ — Phil Karlton. (Xの開発者)

* チームでやるときは、チームのスキルを底上げするようなことをするといい
    * PMD(PHP Mess Detector)とかPhpStormのInspectionなどを見てもらうようにする

* コードレビューってそんなに重要なのか？ (今は書いたコードをぽんとマージされているが)
    * 重要じゃないですかね
    * できたらやったほうがいいが、プロジェクトによってはそういう状況じゃないのもありそう
    * コードレビューは情報交換やもっと良くするためのアドバイスをするため
    * 不具合を取り除いたり、潜在的なバグを取り除くのはCode Inspectionを行う
    * 重要なときと重要じゃないときがある
        * 長く使うソフトウェアなら、保守コストに跳ね返ってくるから、そういうときはかなり重要
* レビューするにも技量要りますからねぇ…
  一人だけ突出しててもあんまり良くない、悪い仕事を叱ってくれるライバルが必要
  なんかsuinさんとreoringさんはそんな関係で上手くやれてそう

## エンジニアのアウトプットのしかた、みんな何をアウトプットしていますか？

* アウトプットとは？
    * 一般的に、エンジニアのアウトプットとは世の中のみんなに向けてということと思われる
* アウトプットしているひと？ (QiitaとかTwitterとかGistとか、書籍とか)
    * 5/５人
* どんなことをアウトプットしているか
    * 書籍で学んだことをまとめる
    * Gitの入門
        * 自分のブランディングのためでもある
    * 使った技術の喜びをTwitterで発信してる
    * Qiitaにスニペットを数多く書いてる

## エディタは何を使っていますか？

* IntelliJ
* Emacs, Vim, PhpStorm, VS Code
* PhpStorm, WebStorm, Atom, CotEditor(Mac)、EmEditor(Win)
* PhpStorm, Atom, Vim, CotEditor

* VimとIDEを使い分けている
* PHPを書くならPhpStorm一度
    * PhpStormはYYPHP推奨エディタ
    * さっき話したCode Inspectionをしてくれる
* CodeRunner
    * 書いたコードをそのばで実行できるツール
    * [CodeRunner – Programming Editor for Mac](https://coderunnerapp.com/)
    
## 何を勉強していったらいいのか聞きたい (5ヶ月目)

* 何を作りたいかによる
    * 自分でアプリとかウェブサービスを作りたい
* 勉強することが多いな
    * データベース
    * JavaScript
    * HTML/CSS
    * インフラ(サーバ、ネットワーク)
* 自分の作りたいものを作るのがベスト
    * 遅延学習法
    * [勉強が苦手な人向けの「遅延評価勉強法」 : けんすう日記](http://blog.livedoor.jp/kensuu/archives/50555054.html)
* インフラは相手してると楽しくなって自然と学べます（個人差があります
* さくらVPSの 1000円以下のサーバで遊び倒すのもよいかもですね。
* ラズパイでサーバたてるとか。
* 自鯖を持つと、セキュリティについても気にするようになりますしね。 iptablesとか
* WindowsならまずWSL入れましょうよ！
    * Windows Subsystem for Linux
    * Windows 10なら使える

## 今後YYPHPをどう盛り上げていくか？

* 何回かに一回くらい、話すテーマを決めて、それを聞きたい人に集まってもらう
* レベル感の格差があったりする時があって気になる
* オープンソースのコードをみんなでレビューする会
* わざと問題のあるコードをGitに乗せておいて、誰が最初にPRできるかバトル（思いつき）

## 今後のPHP系イベント（でかいやつ）

* 2018/12/15: [PHPカンファレンス東京](http://phpcon.php.gr.jp/2018/)
* 2019/01/26: [PHPカンファレンス仙台](https://phpcon-sendai.net/2019/)
* 2019/02/16: [Laravel JP Conference](https://conference2019.laravel.jp/)
* 2019/03/29: [PHPerKaigi 2019](https://phperkaigi.jp/2019/)

があるのでみんなそこでアウトプットしまくってこ！(ステマ)

## YYPHPは毎週やってます

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

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