Posted at

YYPHP#86「単体テストをやっていきたい」「コントローラの重複した処理をどうまとめたらいいか」「フレームワークを使うにはPHPの基礎が分かっている必要がありますか」「オブジェクト指向を知りたいですか」

これは2019年5月31日に開催したPHPerイベントYYPHP#86のイベントレポートです。

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

今回の配信動画

過去回の配信動画

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


雑談


みんなPHPでどんな仕事をしているのか? (やぎ)


  • Laravelのほうが人気という情報を聞いているので、Laravelを勉強しておいたほうがいいと感じている。

  • なぜLaravelがCakePHPより人気?


    • Laravelのほうが開発が活発


      • コミュニティが大きい

      • コードがきれい



    • Laravelカンファレンスは聞くけど、CakePHPカンファレンスはあまり聞かない



  • 最近のプロジェクトだったらLaravel

  • Larabelの方が新規案件は圧倒的に多いのは間違いないとして、あえて他の視点で聞きたいんだけど、初学者がMVCフレームワークの理解をしたいって意味でもやっぱLarabel?


    • 他のフレームワークでも変わらないと思う



  • 機能的にはどう違うのでしょうか?


    • CakePHP3のほうが機能が少ない


      • DI, アセットパイプラインなどがない

      • Laravelのほうが公式パッケージが豊富: 認証、決済など





  • CakePHPは3系から良くなったと聞いた


    • 物自体は良くなったけど、いろいろが犠牲になった



  • バージョンアップするごとに不具合が出る?


    • 不具合というより互換性が崩れる



  • いまのLaravelはごちゃついてきているので、今後が不安なところ。6系になったときにクリーンになってほしいところ


    • PRでゴミがじょじょに溜まってきてる感じ



  • 意外とCakePHPの案件は多いんですよね。Lancersとかで見ると、件数ではCakePHPの案件がLaravelの倍以上あったりする。保守案件が多いんですかね?


    • 保守な気がする

    • 新規案件ではほぼチョイスされていない気がするけど



  • 過去のコードは直していくか?


    • 実質難しい




単体テストをやっていきたい (しゅんすけ)

Tinker、PHPUnitを使ったテストをやっていきたいので、テストプロのsuinさんに聞きたい。


  • Psysh, TinkerはREPL


    • 簡単な動作確認

    • アドホックなテスト



  • PHPUnitはテストフレームワーク

  • しきい値、境界値とかのテスト


    • テーブルドリブンテスト


      • dataProvider





  • 型のテストする?


    • 型のテストは方宣言があるのでしない

    • 新しく作るものはdeclare(strict_types=1)で書く主義


      • (PhpStormのテンプレートに入れた)





  • PHPUnitでテストする項目ってどうやって決めている?


    • 仕様(spec) → テスト → 実装

    • ATDD (acceptance test driven development)


      • 受け入れテスト駆動開発

      • README.md





  • テスト書きにくいときはだいたいなにか間違っている(だいたい機能がごちゃっとからまって分離できていない)

  • いいテスト、悪いテスト


    • 仕様によるもの、テストコードによるものどっちもある


      • テストコードをプロダクションコードとみなしていないと陥りがち

      • 何千行もあるような

      • 単体テストって足かせ


        • 変な単体テストがいっぱいあるとテスト対象コードを変えにくくなっちゃう






    • assertだらけのテストメソッド: 悪い

    • ドキュメントになっている


      • Test Code as a Document





  • DIはテストしやすくなる

  • 自動化にはJenkins?CircleCI?を使っていますか


    • CI: Continuous Integration (継続的インテグレーション)


      • CIの目的


        • 継続的にインテグレーションする


          • インテグレーションとは、チームで作っているコード(などいろいろな成果物)を頻繁に統合すること

          • ビルドを頻繁にやるところがCIの起原







    • CircleCI: SaaS。サービスで使えるプラグインで拡張できる範囲。

    • Jenkins: セルフホスト。柔軟性は高い。


      • セキュリティ上外部にホストしたくないとき



    • GitLab CIが好き


      • SaaSもある






コントローラの重複した処理をどうまとめたらいいか (しゅんすけ)

実装プロのsuinさんに、聞きたい。

顧客登録と管理者側での顧客登録があるが、それぞれのコントローラに同じ処理を書いてしまった。

キレイな実装はどうするべきだったのか聞きたい。


  • まとめるべき


    • Serviceを作る


      • CustomerRegisterationService

      • CustomerRegisterationController → CustomerRegisterationService

      • AdminCustomerRegisterationController → CustomerRegisterationService





  • BaseControllerとか継承でまとめるのは良くない


オブジェクト指向を知りたいですかぁ? (reoring)

何を知ったらオブジェクト指向がわかったという感覚になるのか?

おぶじぇくとしこうってなんですか?


フレームワークを使うときって基礎をわかってる必要がありますか? (たける)


  • PHPの基礎


    • ある程度わかってないとどっちがPHPかフレームワークなのか混乱しそう

    • Laravelでなんかあったときに問題の切り分けとかができない気がする



  • SQLの基礎


    • ORM便りだとなんかあったときに何もできないので

    • N+1問題

    • インデックス



  • フレームワークが裏で何をしてるのか理解する必要があるのか気になりました。


    • 知っといたほうがいいけどマストではないと思う




YYPHPは毎週やってます

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

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