ぺチコン2021レポート〜1日目〜

 

今年もぺチコンに参加させてもらいました!(オンライン)
オンラインなので👶がいる私には参加しやすかったです〜
YouTubeでアーカイブも残ってるのもありがたいです!何度も見直しますね(きっと)

今回初めてDiscordも活用させていただきました。リアルタイムでいろんな達人の方々が補足してくれるのでめちゃくちゃ勉強になりました!!!
また、会社のスポンサーツアーにもちょこっと出させてもらいました〜🙌

\ ぺチコン2021のタイムテーブルはこちら /
https://fortee.jp/phpcon-2021/timetable

コロナと落ち着いたら、またオフラインで参加したいです🥺
\ 過去のぺチコンレポートをどうぞ /
https://kin29.info/tag/phpcon/

気になったトークのメモ

🟡PHPにおけるコーディング規約と自動整形

コーディング規約の重要性を再確認させてもらいました。

php-cs-fixerとphp_codesnifferの違いについての理解は曖昧だったので、Discord上での解説もあり超納得でした!

php-cs-fixer → 書式しか見ないが全てを自動修正できる

php_codesniffer → 構造も見るのでeraly exitとかも違反にできるが、全ては自動修正できないより厳しくできる

🟡独自フレームワークPHPアプリケーションの改善戦略

auto_prepend_fileっていう設定ができるの初知りでした!auto_prepend_fileについて別記事書いたので良かったらみてください。

PHPのauto-prepend-fileを設定して、symfony/var-dumperを使ってみる

🟡PHPer が知るべき MySQL クエリチューニング

SQL苦手系PHPerなのでめちゃくちゃ勉強になりました。EXPLAINの見方はよく知らなかったので、わかりやすい説明で大変理解できました!

会社の技術ブログで実際に手を動かしてEXPLAIN使って見たレポを書いたので良かったら見てください。
https://tech.quartetcom.co.jp/2021/10/07/phpcon-2021-report/

🟡PHPで学ぶオブジェクト指向プログラミング入門

いい声なので動画貼っておきます。https://youtu.be/gdCE-UGqeSM?t=18952
変数名、関数名だけでも抽象化は表現できる!
複雑さ=条件分岐 → わかりやすくする=条件分岐を減らす
異なるものを同じように扱う事=ポリモーフィズム
JankenGameのコードはdisplayLangResolverを追加したい!って思ってしまいました。
Smalltalkっていう言語のOOP流派もある(←普段使わない方)
ポリモーフィズムは3つある。サブタイプポリモーフィズム/パラメトリックポリモーフィズム/アドホックポリモーフィズム
いつも通り、成瀬さんの説明はめちゃくちゃわかりやすいです。DDDの本読みました!
「OOPって何?なんでいいの?」って聞かれたらおすすめしたいトークです。

🟡ドメインをモデリングして PHP コードに落とし込む

新原さんも声もいい☺️https://youtu.be/gdCE-UGqeSM?t=23609
例題のドメインがワクチン接種なのが現代的!でコードも見れてわかりやすかった!

モデリング→複数の視点(俯瞰でみるかその中の要素でみるか)、手法で徐々に形にしていく
– ユースケース図 …システム化の範囲、ユーザが見えてくる
– 用語集の作成(ちょっと面倒) …項目は用語/英語表記/内容。英語表記があることでコード上での表記ゆれを防ぐ。解釈のずれがなくなるのでおすすめとのこと。
– 概念モデル図 …クラス図。多重度がわかる。用語を適当にばーっと並べて線で結ぶことからはじめて、徐々にブラッシュアップしていく感じ。
UML図ちゃんとは書いたことない。。。💦

ドメインモデル実装
– 1ドメイン = 1クラス
– POPO(Plain Old PHP Odject)、プレーンなPHPで作成
– クラス名やメソッド名にドメインモデル用語を使う
– setterを作らない方が良い …ドメインロジックによってプロパティ値を変更する

日本語クラスは作ったことないのでやってみたい!PHPStormはバリバリ対応してるらしい。

モデリングしてコードを実装することで理解が深まる、コードを書いてて気づくことが多いのはめちゃわかる!
→モデリングの一環としてコードを書くことと、結構良い!テストで実行検証できるのも良い🙆‍♀️

ステータスの状態遷移図もあると便利。
Enumは型としても使える、日本語も使える!
まずは、用語集→ユースケース図が良さそう、用語集でドメイン知識の認識を合わせることが重要💡
図やドキュメントのメンテは? → Wikiレベルで良い、とりあえずあれば嬉しい。

何度も見返したいトークでした!!!🙇‍♂️

🟡【IMO】コードレビューって難しいよね

IMO=in my option 私の意見では
わたしもレビューされる方が好きです。
レビューしてもらうとその分学びが増える感じが好きです。
pullpanda使ったことないので、使って見たいと思いました!
https://pullpanda.com/

さいごに

二日目レポートも書きます!(きっと)

PHPのauto-prepend-fileを設定して、symfony/var-dumperを使ってみる

 

ぺチコン2021を見ていて、初めて知ったビルドインのオプションを知りました!
\ auto-prepend-fileです! /
今回はそれを使って開発を便利にしていきたいと思いますー🙋‍♂️

教えてくださったスライドはこちらです、ありがとうございます!
https://speakerdeck.com/tzmfreedom/original-framework-php-kaizen?slide=22

簡単にできる事を説明すると、独自関数などを定義したファイルをスクリプト実行前に読み込ませることができます!
それにより、デバック関数を独自に作成して、それをスクリプト内に仕込んでデバックするみたいなことができて便利みたいです。

auto-prepend-fileとは?

https://www.php.net/manual/ja/ini.core.php#ini.auto-prepend-file

auto_prepend_file string
メインファイルの前に自動的に付加されるファイルの名前を指定します。 このファイルは、require 関数のコール時と同様に読み込まれます。 このため、include_path が使用されます。
特別な値 none を指定すると、ファイルを前に追加する機能は無効となります。

逆に、auto_append_fileというのもあるみたいです。

🚨注意

auto-prepend-fileauto_append_fileもexit();が使われるようなスクリプトでは、使用できないとのことです。私はここの中身みたいなーって時は、var_dump($hoge);exit();としちゃってたので注意しないとでした。そういうときはdd($hoge);を使うといいみたいですね。

symfony/var-dumperが使えるようにauto-prepend-fileに追加してみる

Symfonyの公式にも掲載されていました!
https://symfony.com/doc/current/components/var_dumper.html#the-dump-function

In order to have the dump() function always available when running any PHP code, you can install it globally on your computer:

  1. Run composer global require symfony/var-dumper;
  2. Add auto_prepend_file = ${HOME}/.composer/vendor/autoload.php to your php.ini file;
  3. From time to time, run composer global update symfony/var-dumper to have the latest bug fixes.

 

1.composer global require symfony/var-dumper;

PHP8.0.3でやっていきます。

$ php --version
PHP 8.0.3 (cli) (built: May 27 2021 13:40:53) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.3, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.3, Copyright (c), by Zend Technologies
    with Xdebug v3.0.3, Copyright (c) 2002-2021, by Derick Rethans


$ composer global require symfony/var-dumper;
Changed current directory to /Users/shigaayano/.composer
Using version ^5.3 for symfony/var-dumper
./composer.json has been created
Running composer update symfony/var-dumper
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0 removals
  - Locking symfony/polyfill-mbstring (v1.23.1)
  - Locking symfony/polyfill-php80 (v1.23.1)
  - Locking symfony/var-dumper (v5.3.8)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 3 updates, 31 removals
  - Removing symfony/stopwatch (v5.1.2)
  - Removing symfony/service-contracts (v1.1.5)
  - Removing symfony/process (v5.1.2)
  - Removing symfony/polyfill-php73 (v1.11.0)
...

2.php.iniにauto_prepend_file = ${HOME}/.composer/vendor/autoload.phpを追加

php -r "echo phpinfo();" | grep "php.ini"でphp.iniの場所を確認して、最終行とかに追記します。

ちゃんと適用されてるか心配だったので、確認して見ます。
設定されてるみたいです。

php -r "echo phpinfo();" | grep "auto_prepend_file"
auto_prepend_file => /Users/xxx/.composer/vendor/autoload.php => /Users/xxx/.composer/vendor/autoload.php

3.実際に使ってみる

まず、dd($hoge);を使って見ます。
今回、コントローラ内でdd($form)でFormの中身を見たかったのですが、dump後にexitされるためdumpが出力された後はレスポンスも表示されません。

次に、dump($hoge);を使って見ます。
exitされないため、レスポンスがいつも通り表示されてSymfony Profiler > Debugからdumpを確認できます。

 

プロジェクト内のコードを変更せず使えますし、便利なので今後も開発で是非使っていこうと思います🙌!

参考:
https://zenn.dev/kitar/articles/790933413a3090116be8