ぺチコン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

PHPカンファレンス2019に行ってきましたレポート

さっそくですが、先日PHPカンファレンス2019に参加してきたので、超簡単にダイジェストをお送りします。

今年のPHPカンファレンスは、どこの地方も参加できてなかったので、久々のカンファレンスで高まりました!!!

今年も、会場は大田区産業プラザ PiOでした。毎年同じ場所だと東京の土地勘がないわたしにはとてもありがたいです!

毎回思いますが、人多いですね!

セッション「PHPの今とこれから2019

PHP8.0

  • 2021.9くらいにでる予定らしい
  • JIT(Just-in-time)
  • multiple(union) typeの型指定をint|stringって書けるようになる

今までは、PHPDocのアノテーションでいい感じにしてた。

class Hoge
{
  /**
   * @param int|string
   */
  public function foo($value): void
  {
    var_dump($value);
  }
}

$hoge = new Hoge;
$hoge->foo(1);           //int(1)
$hoge->foo('one');  //string(3)

PHP8から、こうやってかけるようになるらしい

class Hoge
{
  public function foo(int|string $value): void
  {
    var_dump($value);
  }
}

PHP7.4

 

参考:https://www.amitmerchant.com/union-types-php/
参考:https://qiita.com/rana_kualu/items/ba312d2789bd228f887a
参考:https://kinsta.com/jp/blog/php-7-4/

セッション「コミュニティアップデート powered by GMOインターネット

PHPの地方コミュニティのいろいろを聞けました。

  • 勉強会やイベントでの自己紹介って結構大事らしい
  • 山陰ぺちぱーずという、地元に割と近いコミュニティがあるのを知った

 

セッション「思想と理想の果てに — クリーンアーキテクチャのWEBフレームワークを作ろう」

https://nrslib.com/phpcon-2019-proposal/

  • ヘキサゴナルアーキテクチャ(初耳)
  • スキャフォールディング機能(初耳)

 

セッション「PHPUnit: Past, Present and Future 」

PHPUnitの生みの親、セバスチャンさんの登壇でした!
全部英語です。こういう時に毎回英語頑張っておけばよかったと思います😂

心から言いたいことは「PHPUnitを作ってくれて、ありがとうございます🙏」

セッション「脆弱性から学ぶ Webセキュリティ Part2」

https://speakerdeck.com/hypermkt/study-web-security-from-vulnerability2

  • 脆弱性の怪しい匂いに気付こう
  • 根本的解決>保険的対策
  • ディレクトリトラバーサル対策
    • ファイルパスで判定してるやつとかは怪しい臭い
  • OSコマンドインジェクションの対策
    • シェル呼び出し機能関数を使わない
    • escape shell art
  • セッション管理の不備
    • 攻撃例
      • セッションハイジャック
      • セッションIDの固定化
    • 対策法
      • XXS対策
      • セッションIDを推測困難なものにする
      • セッションIDはクッキーのみで保持する
      • php.iniの確認(デフォルトで🙆‍♂️)
        • session.use_trans_sid = 0 [URLにセッションIDを保持しない]
        • session.use_only_cookies = 1
        • session.use_cookies = 1
      • 認証が成功したら新しいセッションを開始する

 

セッション「REST 6+4の制約」

https://speakerdeck.com/koriym/rest-6-plus-4falsezhi-yue

  • RESTにとって、URIは重要ではない
  • v1とか、バージョニングは含めたらrestではない
  • REST =Hypermedia API
  • クライアントはサーバーが何の言語かしらなくていい
  • キャッシュ スケールのため、🙅‍♀️パフォーマンス
  • RFC7234に対応:Kevinrob/guzzle-cache-middleware

質問の時に、おっしゃられてた「技術に対しての背景を理解しよう」というのが、印象的でした。

自分が使っている言語やフレームワークを作ってくれた人って、相当尊敬してるのに名前知らないなーって痛感したので、もっと歴史とか人物とか関係性とかってスルーしてたので、興味持とうって思いました。(偉人紹介ブログ描こうかな😎)

 

入手品

入手品一覧

  • elePHPant(買ってもらった😆)
  • 電子メモパット(アンケート答えてもらった)
  • メルカリノート、SIMケース、ステッカー(無条件のもらった)
  • スマホスタンド(ちょー便利)、チョコ
  • 粗品タオル
  •  食べログの人になれるやつ(ガチャはずれたけどくれた😆)

 


(新幹線で読むように買ったけど、疲れて10ページくらいしか読めんかった・・・。通勤の肥やしにしよう。)

郡山さんのセッションを聞く前に、この本で予習しておけばもっと理解できたなあって思いました😭

 

 

いろんな方のセッションが聞けたのと、お話もできたのでいい機会でしたー!

次はPHPerKaigi2020

これからももっと勉強して、いいコードかけるようになりたいという気持ちになりました^^

 

\スタッフの皆さん、ありがとうございました🙇‍♂️/

 

PHPカンファレンス関西へ初参戦!

どうも!PHPカンファレンス関西に行ってきました!

関西のPHPカンファレンスは初めて参加しました。福岡しかいったことのない身です。
しかし、3連休のOsaka暑すぎでした。
3日目の泊まった友達の家はクーラー無いし、
たまたま行った焼肉屋は屋内なのにサウナ状態、
宮崎に帰って行ったcoldrainのライブも冷房壊れてる熱いライブで、
大阪のPHPer熱を感じました。

#前夜祭

前日入りしたので、前夜祭【非公式】も行ってきました。
PHPカンファレンス関西の前夜祭の会場
飛行機の都合で、LTしか見れてないんですがw
入口が8時に閉まるということで、わざわざロックオンのおえらい方に開けてもらいました、ありがとうございました。
ロックオンさんのオフィスが少し見れて光栄でした!!!
DB周りのお話が多かった気がします。
オニオンアーキテクチャは初耳でした。
非同期PHPやったことない。。。curl_multi?コルーチン?って感じだったので自分なりに調べて見ました。

非同期PHP

jsでしかやったことない。。。
ReactPHP、流行りのswooleできるそうです!今度触ろう。(多分

こんな方法でも非同期実行できまうす!

    • curl_multi
    • コルーチン ←swooleはこれおしだそうで。

↑一旦処理を中断した後、続きから処理を再開できる。スケジューリングできる!

 

 

#本編

まず、まとめ\(^^)/

  • グランフロント大阪でっかい、参加者いっぱい!
  • 人気のセッションは立ち見もできなかったりしてた
  • ガラポン楽しかった!ホワイトボードノート欲しかった。。。
  • インターフェイス使ってみよう
  • SOLIDの原則、条件分岐禁止ギブスの想像
  • PhpStorm使いこなし隊。ハンズオンぽちりました。
  • HerokuのロンTいただいたー

AWSを背景に記念ん撮影 いただきもの いただきもの2

インターフェイス入門

インターフェイス使って実装してみよう。んでブログ書こう。
とりあえず下書き登録しました\(^^)/
インターフェイス入門のメモ1 インターフェイス入門のメモ2

SOLIDの原則、条件分岐禁止ギブスの想像

後藤さんのSOLIDの原則シリーズのトークは3シリーズすべてを生で
聞くことができました!
\条件分岐ギブスがグッズ化されることを待ち望んでいます!/
せっかくメルカリさんにノートをもらったので、使わせていただきました。
solidの原則メモ1 solidの原則メモ2

PhpStorm使いこなし隊。ハンズオンぽちりました。

OsakaからMiyazakiに帰ってきたら届いてましたー!日本語化にたよらずとも英語読めるように頑張ります・・・。
intelijハンズオン

HerokuのロンTいただいたー

Herokuは個人的なやつで使ってます。これとか
https://today-saying.herokuapp.com/
herokuも英語ばっかで探り探りですが、便利なのでどんどん使います〜

今年もPHPカンファレンス福岡2018行って来たよ^^

先週、PHPカンファレンス福岡2018に行って来ました!
去年も行ったんですが、あいかわらず楽しかったです。

公式サイト:https://phpcon.fukuoka.jp/2018/

カンファレンス後の気持ち

  • 英語の文でも逃げずに読む
  • 日本語の文あればなお、ありがたくしっかり読む
  • PSRおさらいしよう
  • ログ使おう
  • 自動化したい
  • Golangが熱いらしい
  • もっと勉強しよう

全然野菜・前夜祭

前乗りしたので、全然野菜と前夜祭にも参加してきました。
全然野菜の開催場所がさくらインターネットさん、前夜祭がLINE fukuokaさんでした。
他社のオフィスを見学できるのもいいですよね。面白いです。
LINE fukuokaさんでは、テーマパーク状態で超興奮しました。
カフェスペース的なところで3セッション同時で進行しており、
私は真ん中で全部見ようと欲張っていましたが、無理でした。。。
同世代女性エンジニアとも知り合えていい機会でした\(^^)/

本編

会場は去年と同じく、FFTホールでした。
去年も見たことある人がいっぱいいてなんか安心しました。
メルカリのトートバックもいただけたし、
愛用PHPStormのJetBrainsのヨーヨーも狙ってたので、やっとGETできて大満足でした!

 

私的に面白かったのが

です。

社内ナレッジを全部署統一してて、内容はなんでもokってカオスかなと思ったんですが、めちゃくちゃいいなって思いました。

私は生活レベルが低いので、管理とか人事の方からお金の話とかあったら見たいし、役立ちそうだなって思います。

技術の話だけではなくて、他社の業務効率化の話を聞くのって面白いなって思いました。

 

実行委員の皆様、お疲れ様でした。
今年も開催していただき、本当にありがとうございました!

 

ところで、もちろん

\PHPカンファレンス関西2018行きます!/

https://2018.kphpug.jp/

 

 

/細かいことは下記リンクにまとめました。よかったらみてください。\

https://kin29.github.io/PHPerMemo/

福岡PHPカンファレンスに行ってきた!

 

先日、福岡PHPカンファレンスに行ってきました!

http://phpcon.fukuoka.jp/2017/

 

ワードプレスの話や、Progressive Web Apps、javascript、

もはやPHPの話ではないものもたくさん!

幅広い分野について知ることができました!!!

 

 

その中でも、AMP + PWAの話がありました。

AMP自体も知らなかったので実際にしてみました!

Githubにサンプルがあるのでに実際にやってみました。

console.logのとこにでました!!

 

 

AMP =Accelerated Mobile Page

参考:https://developers-jp.googleblog.com/2016/02/google-accelerated-mobile-pages.html

仕組みとしては、Googleのキャッシュにページが入っていて、キャッシュから表示することで、ページの表示速度が上がるとのこと。
その証として、AMPページのURLはhttps://www.google.co.jp/amp/….となっていました。

下図がわかりやすかったです。(Google Developers Japanより)

SEO的にも良いらしい。(コンテンツ内容にもよる)

 

関連して、JSON-LDの話もあったので、また詳しくやってみようと思います。