PHP
Rails
laravel
docker
YYPHP

YYPHP#51「みんなが好きなフレームワーク、どのくらいまじめにテストやってる?、PHPを使う上でこれは知っておくべきこと、1番詳しいPHPの技術書はどれですか?、Dockerのベストプラクティスについて聞きたい、アプリケーションのGitリポジトリとインフラのGitリポジトリをそろそろ一緒にしていいか?、PHPUnitのコードバレッジと実行速度の話、PHPとオブジェクト指向を知り尽くした人がこれから目指すさらなる高み」

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

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

YouTubeでの配信映像はこちら-> #YYPHP #51【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】

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

  • PHP歴
    • 1年未満: 4名
    • 2年未満: 1名
    • 2年: 1名
    • 3年: 1名
    • 5年: 1名
    • 4年: 1名
    • 6年: 1名
    • 8年: 1名
    • 10年以上: 5名

みんな好きなフレームワークを聞いておこうかな

  • 質問
    • メインで使っているフレームワークは何?
    • それを選んだ理由は?
  • 独自FW(とても良くないと学び) → Symfony → CakePHP2(ユーザが多かったため) → Cake3
  • アンケート
    • Laravel 6
      • 会社で使ってる
      • 調べたら一番使われてた
      • 流行ってたから
      • 良いものだから使ってる
        • 標準でいろいろ入ってて迷わず使える
    • CakePHP3 3
      • 2から使ってるから
      • 2017年7月時点で日本語情報が多いという理由で選ばれた
        • いまはLaravelの方が多いと思う
    • Symfony3 1
      • 入った会社で採用していた
      • Ruby on Railsを参考にしたと聞いて
        • 良いところを引き継いでいて、良くないところが改善されてる
          • SQLでなくDQLで書ける
    • 独自フレームワーク 4 (作ってた 3)
      • もっと良いフレームワークが欲しかったから
      • フレームワークの仕組みを学んでるうちに作ったら面白そうで作り出した
      • 僕のほうが良いフレームワークを作れると思ったから
  • なぜ独自フレームワークが良くないのか気になる
    • 自分たちでメンテしないといけない
    • 普通のフレームワークは進化していくので、陳腐化してしまう
    • 既存のフレームワークに勝つつもりでやらないとだめ
    • フレームワークの開発者が退職してしまって困る
  • Laravel 5.7がリリースされた

みなさん、どのくらいテストをまじめにやっていますか?

  • モンキーテスト(アドホックテスト)しかやってない
  • 全部のメソッドをテストするのか?
  • テストするのが怖い(メールを飛ばすコマンドなど)やつはどうテストするのか?
  • 単体テストと結合テストをわけて考えて、
    • モックにできるようにクラス設計して
    • DIできるようにしておく
      • テストでは、匿名クラス $obj = new class {} を使うと、モックが作れる
      • Mockeryというモックライブラリもある
    • ディレクトリやネームスペースはちゃんと分けておいたほうが良い
      • 1回10分かかるとリズムが崩れる
      • 途中から分けるのは大変、やるなら最初から

PHPを使う上でこれは知っておくべきこと (PHP歴1年からの質問)

  • たとえば、DIとか
  • PhpStormを使おう
    • foreach ($items as)でそれ以降が補完される
  • Composerを使おう
  • PSRを知っておこう。PSR-2, PSR-4
  • PHP: The Right Way を読もう!
  • 知らない関数は全てPHP公式サイト( https://php.net )で確認すべき
  • 配列系の関数は全て目を通すと信じられない程はかどりますよ
  • 比較演算子の闇を見ておく
  • SuinさんのQiitaの記事を読む
  • Psysh (サイシュ) ・・・ REPL
  • PHPの闇: in_arrayの第三引数にtrueを突っ込んで置かないと、内部の検索が==になって死ぬ
  • Generatorとiterableを学ぶ iterable pseudo(すど) typeを知る Splほにゃほにゃを学ぶ • SplObjectStorage • SplStack • SplQueue など

一番くわしいPHPの技術書はどれですか?

Dockerのベストプラクティスについて聞きたいことがある

  • Dockerでサーバを立ち上げてみたが、、、
  • docker-composeがおすすめ
  • Kubernetesはdocker-composeではない。
  • Kubernetesほどはいらないけど、という場合はDocker Swarm
  • Komposeっていうやつを使うとdocker-compose.ymlからKubaternetesのファイルを書き出してくれる
  • GKE
  • どういうときに、どういう作りにしたらいいか?

アプリケーションのGitリポジトリとインフラのGitリポジトリをそろそろ一緒にしていいか?

  • Ansible → Dockerになってきていて、ファイル数も少なくなってきているし、そろそろ分けなくてもいいのかと思い始めているが、どう思うか
  • いいと思う。
  • 一緒にしておいたほうがいいパターン
    • 基本的には一緒にしておいたほうが良さそう
  • 一緒にしないほうが良いパターン
    • ひとつのインフラの中に、複数のアプリが動いているとき

PHPUnitのコードバレッジと実行速度の話

  • 100%に行かなかったら落とす仕様にしたが
  • ところが、100%目指すのは良くないという情報が日本語でも英語でも多かった
  • 85%超えると大変になる
  • 単体テストは85%でOKにした
  • 結合は100%でやる
    • 通ってないところがあったら結局人手で100%やらなきゃいけないと思うので
  • カバレッジを品質目標にしてはいけないとも書いてあった
    • Assertion Practice
    • AssertionFreeTesting
    • if分岐を見ておいたほうが良い、通ってないことがあるので

PHPとオブジェクト指向を知り尽くした人がこれから目指すさらなる高み(PHPの中で)

  • どこに向かいたいの?
    • ソフトウェアエンジニアとしての高みはどこか?
  • 関数型を極める
  • PHPを作る
    • おれおれPHPを作る
    • トランスパイラ TypePHP みたいな
  • ぜんぜん違う言語をやってPHPに戻ってくる
  • WordPressのような巨大なものにコミットする
    • コードはきれいじゃない
  • Hackってどうなの?
    • PHP7以降は互換性を保証しなくなっていく
  • Zephir
    • PHPの拡張をつくるための言語
    • https://zephir-lang.com/
    • CSVを超高速でちゃんとパースしてくれるパーサー
  • PHPUnitを全部Cで書き直してほしい
    • Goで書きたい

YYPHPは毎週やってます

PHPについてワイワイ話したい方は、YYPHPのイベント情報をチェックしてみて下さい。

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