Slide 1

Slide 1 text

PHP 8.3で追加された json_validate()を徹底 的に深掘りしてみよう 株式会社 Gladiolus LAB 柚⼝ましろう

Slide 2

Slide 2 text

アジェンダ PHP8.3が登場してから json_validate()は使ってる? Json_validate() is 何 いい感じの使い⽅? まとめ ⾃⼰紹介

Slide 3

Slide 3 text

PHP8.3が登場してから

Slide 4

Slide 4 text

PHP8.3に アップグレードした?

Slide 5

Slide 5 text

PHP8.3に アップグレードした? お仕事ではやってませんが、 個⼈的の環境はもう上げました🎉

Slide 6

Slide 6 text

PHP8.3の 新機能

Slide 7

Slide 7 text

PHP8.3の 新機能 RCF Typed class constants クラス定数の型付け Dynamic class constant fetch クラス定数の⽂字列指 定 Marking overridden methods (#[\Override]) Overrideアトリビュー トの追加 Readonly amendments 読み取り専⽤プロパ ティのディープクロー ン json_validate 本⽇のメイン

Slide 8

Slide 8 text

PHP8.3の 新機能 RCF Typed class constants クラス定数の型付け Dynamic class constant fetch クラス定数の⽂字列指 定 Marking overridden methods (#[\Override]) Overrideアトリビュー トの追加 Readonly amendments 読み取り専⽤プロパ ティのディープクロー ン json_validate 本⽇のメイン

Slide 9

Slide 9 text

json_validate()は 使ってる?

Slide 10

Slide 10 text

json_validate() is 何

Slide 11

Slide 11 text

json_validate() is 何

Slide 12

Slide 12 text

json_validate() is 何

Slide 13

Slide 13 text

json_validate() is 何

Slide 14

Slide 14 text

おしまい

Slide 15

Slide 15 text

おしまい

Slide 16

Slide 16 text

json_validate() is 何 JSONであるかどうかを⽂字列型の状態から判断が付けられる

Slide 17

Slide 17 text

json_validate() is 何 JSONであるかどうかを⽂字列型の状態から判断が付けられる

Slide 18

Slide 18 text

json_validate() is 何 JSONであるかどうかを⽂字列型の状態から判断が付けられる 従来の形

Slide 19

Slide 19 text

json_validate() is 何 JSONであるかどうかを⽂字列型の状態から判断が付けられる 従来の形

Slide 20

Slide 20 text

json_validate() is 何 JSONであるかどうかを⽂字列型の状態から判断が付けられる 従来の形

Slide 21

Slide 21 text

json_validate() is 何 JSONであるかどうかを⽂字列型の状態から判断が付けられる これから

Slide 22

Slide 22 text

json_validate() is 何 JSONであるかどうかを⽂字列型の状態から判断が付けられる これから

Slide 23

Slide 23 text

何が違うの? 結構速度が変わる PHP Playground: https://x.gd/jvmEZ 雑につくった⼀次配列5万件でベンチマーク json_encode()したデータを json_decode()またはjson_validate()して速度検証

Slide 24

Slide 24 text

何が違うの? 結構速度が変わる PHP Playground: https://x.gd/jvmEZ

Slide 25

Slide 25 text

何が違うの? 結構速度が変わる PHP Playground: https://x.gd/jvmEZ

Slide 26

Slide 26 text

何が違うの? 100万件だともっと変わる PHP Playground: https://x.gd/jvmEZ

Slide 27

Slide 27 text

何が違うの? JSONに変なデータが混⼊していたら PHP Playground: https://x.gd/jvmEZ

Slide 28

Slide 28 text

実装をGithubで⾒る php-srcを⾒るのは PHPer仕草(?) アイコン: https://github.com/logos

Slide 29

Slide 29 text

実装をGithubで⾒る アイコン: https://github.com/logos json_validate

Slide 30

Slide 30 text

実装をGithubで⾒る アイコン: https://github.com/logos お隣のjson_decode

Slide 31

Slide 31 text

いい感じの使い⽅... Laravelでいうところの...

Slide 32

Slide 32 text

いい感じの使い⽅... Laravelでいうところの... Controllerよりも前、Middleware部でやるのが理想的?

Slide 33

Slide 33 text

いい感じの使い⽅... Laravelでいうところの... Controllerよりも前、Middleware部でやるのが理想的? 本⾳

Slide 34

Slide 34 text

いい感じの使い⽅... Laravelでいうところの... Controllerよりも前、Middleware部でやるのが理想的? 本⾳

Slide 35

Slide 35 text

いい感じの使い⽅... サーバにリクエストを送るときのパターン

Slide 36

Slide 36 text

いい感じの使い⽅... サーバにリクエストを送るときのパターン

Slide 37

Slide 37 text

いい感じの使い⽅... サーバにリクエストを送るときのパターン

Slide 38

Slide 38 text

いい感じの使い⽅... サーバにリクエストを送るときのパターン

Slide 39

Slide 39 text

いい感じの使い⽅... サーバにリクエストを送るときのパターン

Slide 40

Slide 40 text

いい感じの使い⽅... こういうの [{"id":1,"name":"Item 1","details":{"description":"Description for item 1","specs":{"weight":"10 kg","dimensio

Slide 41

Slide 41 text

いい感じの使い⽅... こういうの [{"id":1,"name":"Item 1","details":{"description":"Description for item 1","specs":{"weight":"10 kg","dimensio 何かしら問題のあるデータを事前に防ぐとかはやりたい時もある

Slide 42

Slide 42 text

いい感じの使い⽅... こういうの [{"id":1,"name":"Item 1","details":{"description":"Description for item 1","specs":{"weight":"10 kg","dimensio 何かしら問題のあるデータを事前に防ぐとかはやりたい時もある 出来る!

Slide 43

Slide 43 text

いい感じの使い⽅! チーム開発として • MiddlewareでRequestからJSONが格納されている引数から パース可能か⼀次チェックするのが適切そう • ただし、JSON型以外も貫通するので注意が必要 • e.g. json_validate(“”); • e.g. json_validate(12345); • こういうのは素直にバリデーションしよう • ⽬的はあくまでも「JSON型としてパースできるかどうか」

Slide 44

Slide 44 text

まとめ • 使い所は要所に限る • json_decode()にもあるパース処理出来るかどうかだけ抽出したもの • API通信で⼤規模データをJSONで送るときは速度の軽量化は可能 • 市販薬レベルなので多⽤するのは避けよう(あまり意味はない)

Slide 45

Slide 45 text

⾃⼰紹介 X_Name: 柚⼝ましろう X_ID: yu_mashirou 本名: 代⼝勇真 株式会社 Gladiolus LAB これは余⽩