$30 off During Our Annual Pro Sale. View Details »

今あらためて考える PHPに型定義をする理由 / why use type hint and static analyse at php

Isana
August 26, 2022

今あらためて考える PHPに型定義をする理由 / why use type hint and static analyse at php

Isana

August 26, 2022
Tweet

More Decks by Isana

Other Decks in Programming

Transcript

  1. 今あらためて考える
    PHPに型定義をする理由
    PHP Conf 沖縄 2022
    by @isanasan_ 1

    View Slide

  2. 自己紹介
    PHP Conf 沖縄 2022
    by @isanasan_ 2

    View Slide

  3. Lancersプロダクト開発部QAチーム
    CakePHPのバージョンアップを担当
    DevOpsに興味関心がある
    @isanasan_
    @isanasan
    @isana
    PHP Conf 沖縄 2022
    いさな
    by @isanasan_ 3

    View Slide

  4. PHP Conf 沖縄 2022
    最近PHPの型が注目されている気がする
    by @isanasan_ 4

    View Slide

  5. PHP Conf 沖縄 2022
    直近の主要なカンファレンス
    by @isanasan_ 5

    View Slide

  6. PHP Conf 沖縄 2022
    PHPer Kaigi 2022
    by @isanasan_ 6

    View Slide

  7. PHP Conf 沖縄 2022
    https://fortee.jp/phperkaigi-2022/proposal/7a340d9f-1f46-4f72-9886-a5f599eeac1c 7

    View Slide

  8. PHP Conf 沖縄 2022
    PHP Conf 2021
    by @isanasan_ 8

    View Slide

  9. PHP Conf 沖縄 2022
    https://fortee.jp/phpcon-2021/proposal/a7e53ddb-09fd-404e-bb90-b5047e8994ab 9

    View Slide

  10. PHP Conf 沖縄 2022
    最近PHPの静的解析も注目されている気がする
    by @isanasan_ 10

    View Slide

  11. PHP Conf 沖縄 2022
    直近の主要なカンファレンス
    by @isanasan_ 11

    View Slide

  12. PHP Conf 沖縄 2022
    PHP Conf 2021
    by @isanasan_ 12

    View Slide

  13. PHP Conf 沖縄 2022
    https://fortee.jp/phpcon-2021/proposal/49dd21f3-769d-4170-a9a9-b1f18c4e1135 13

    View Slide

  14. PHP Conf 沖縄 2022
    https://fortee.jp/phpcon-2021/proposal/b9a17925-8800-4415-9676-99a1e24d181d 14

    View Slide

  15. PHP Conf 沖縄 2022
    PHPer Kaigi 2021
    by @isanasan_ 15

    View Slide

  16. PHP Conf 沖縄 2022
    https://fortee.jp/phperkaigi-2021/proposal/35177e2b-189c-43c2-ad29-e74caf5033e7 16

    View Slide

  17. PHP Conf 沖縄 2022
    JetBrainsの調査
    by @isanasan_ 17

    View Slide

  18. PHPstan Phan Psalm 合計
    2019 9% 5% 1% 15%
    2020 11% 2% 3% 16%
    2021 18% 2% 9% 29%
    PHP Conf 沖縄 2022
    どんな品質ツールを使っていますか?
    https://www.jetbrains.com/ja-jp/lp/devecosystem-2019/php/

    https://www.jetbrains.com/ja-jp/lp/devecosystem-2020/php/

    https://www.jetbrains.com/ja-jp/lp/devecosystem-2021/php/ 18

    View Slide

  19. はい いいえ 静的解析 is 何
    33% 38% 28%
    PHP Conf 沖縄 2022
    静的解析を使用していますか?
    https://www.jetbrains.com/ja-jp/lp/devecosystem-2021/php/#PHP_do-you-use-static-analysis 19

    View Slide

  20. PHP Conf 沖縄 2022
    最近PHPの型の表現力が上っている気がする
    by @isanasan_ 20

    View Slide

  21. Scalar type hints
    PHP Conf 沖縄 2022
    7.0
    by @isanasan_ 21

    View Slide

  22. Nullable Types
    Void Return Type
    PHP Conf 沖縄 2022
    7.1
    by @isanasan_ 22

    View Slide

  23. Typed Property
    PHP Conf 沖縄 2022
    7.4
    by @isanasan_ 23

    View Slide

  24. Union Types
    PHP Conf 沖縄 2022
    8.0
    by @isanasan_ 24

    View Slide

  25. Pure intersection type
    Enumerations
    noreturn type
    PHP Conf 沖縄 2022
    8.1
    by @isanasan_ 25

    View Slide

  26. はい
    PHP Conf 沖縄 2022
    by @isanasan_ 26

    View Slide

  27. 最近PHPの型が注目されている
    最近静的解析が注目されている
    PHPの型の表現力が序々に高まっている
    PHP Conf 沖縄 2022
    by @isanasan_ 27

    View Slide

  28. PHP Conf 沖縄 2022
    だがちょっと待って欲しい
    by @isanasan_ 28

    View Slide

  29. PHP Conf 沖縄 2022
    PHPは弱い動的型付け言語
    by @isanasan_ 29

    View Slide

  30. 型は実行時に決定される
    型は文脈に応じて暗黙的に変換される
    PHP Conf 沖縄 2022
    PHPは弱い動的型付け言語
    by @isanasan_ 30

    View Slide

  31. 要するに
    PHP Conf 沖縄 2022
    by @isanasan_ 31

    View Slide

  32. PHP Conf 沖縄 2022
    型を書かなくても動く
    by @isanasan_ 32

    View Slide

  33. PHP Conf 沖縄 2022
    わざわざ型書いて静的解析ナンデ??
    by @isanasan_ 33

    View Slide

  34. 今あらためて考える
    PHPに型定義をする理由
    PHP Conf 沖縄 2022
    by @isanasan_ 34

    View Slide

  35. 今あらためて考える
    PHPに型定義(静的解析)をする理由
    PHP Conf 沖縄 2022
    by @isanasan_ 35

    View Slide

  36. PHP Conf 沖縄 2022
    3つの観点
    by @isanasan_ 36

    View Slide

  37. フィードバックサイクル
    コーディングの生産性
    コードのメンテナンス性
    PHP Conf 沖縄 2022
    3つの観点
    by @isanasan_ 37

    View Slide

  38. その前に
    PHP Conf 沖縄 2022
    by @isanasan_ 38

    View Slide

  39. PHP Conf 沖縄 2022
    静的解析とは
    by @isanasan_ 39

    View Slide

  40. コードを実行せずに問題点等を検出すること
    コードを実行しないため高速
    ツールを導入するだけで実行できる
    型情報を扱うものについて話します
    PHP Conf 沖縄 2022
    静的解析とは
    by @isanasan_ 40

    View Slide

  41. PHP Conf 沖縄 2022
    フィードバックサイクル
    by @isanasan_ 41

    View Slide

  42. PHP Conf 沖縄 2022
    不具合の発見が早いほど修正は低コスト
    https://www.luxoft-training.com/news/7-principles-of-testing-part-2/ 42

    View Slide

  43. PHP Conf 沖縄 2022
    バグは早く見つけたい
    by @isanasan_ 43

    View Slide

  44. 再掲
    PHP Conf 沖縄 2022
    by @isanasan_ 44

    View Slide

  45. コードを実行せずに問題点等を検出すること
    コードを実行しないため高速
    ツールを導入するだけで実行できる
    型情報を扱うものについて話します
    PHP Conf 沖縄 2022
    静的解析とは
    by @isanasan_ 45

    View Slide

  46. UTより実行・導入が低コスト
    UTより早いフィードバックが得られる
    UTより修正が容易
    PHP Conf 沖縄 2022
    つまり
    by @isanasan_ 46

    View Slide

  47. PHP Conf 沖縄 2022
    コーディングの生産性
    by @isanasan_ 47

    View Slide

  48. PHP Conf 沖縄 2022
    エディタによるサポートを受けられる
    by @isanasan_ 48

    View Slide

  49. 定義ジャンプ
    ホバー表示
    補完
    インスペクション
    PHP Conf 沖縄 2022
    エディタによるサポートを受けられる
    by @isanasan_ 49

    View Slide

  50. PHP Conf 沖縄 2022
    コードのメンテナンス性
    by @isanasan_ 50

    View Slide

  51. PHP Conf 沖縄 2022
    メンテナンス性 is 何
    by @isanasan_ 51

    View Slide

  52. SQuaRE(JIS X 25010)
    PHP Conf 沖縄 2022
    メンテナンス性 is 何
    by @isanasan_ 52

    View Slide

  53. PHP Conf 沖縄 2022
    メンテナンス性とは
    https://www.ipa.go.jp/sec/reports/20150331_1.html 53

    View Slide

  54. モジュール性(modularity)
    再利用性(reusability)
    解析性(analysability)
    修正性(modifiability)
    試験性(testability)
    PHP Conf 沖縄 2022
    メンテナンス性とは
    by @isanasan_ 54

    View Slide

  55. モジュール性(modularity)
    再利用性(reusability)
    解析性(analysability)
    修正性(modifiability)
    試験性(testability)
    PHP Conf 沖縄 2022
    メンテナンス性とは
    by @isanasan_ 55

    View Slide

  56. PHP Conf 沖縄 2022
    解析性(analysability) ≒ 理解容易性
    by @isanasan_ 56

    View Slide

  57. 型定義有 > 型定義無
    PHP Conf 沖縄 2022
    解析性(analysability) ≒ 理解容易性
    by @isanasan_ 57

    View Slide

  58. PHP Conf 沖縄 2022
    解析性(analysability) ≒ 理解容易性
    by @isanasan_ 58

    View Slide

  59. PHP Conf 沖縄 2022
    解析性(analysability) ≒ 理解容易性
    by @isanasan_ 59

    View Slide

  60. PHP Conf 沖縄 2022
    リファクタリング
    by @isanasan_ 60

    View Slide

  61. sedコマンドはつらい
    PHP Conf 沖縄 2022
    リファクタリング
    by @isanasan_ 61

    View Slide

  62. IDEやエディタによるリファクタリング
    Rectorによるリファクタリング
    PHP Conf 沖縄 2022
    リファクタリング
    by @isanasan_ 62

    View Slide

  63. PHP Conf 沖縄 2022
    別言語への移植
    by @isanasan_ 63

    View Slide

  64. Scalaに移植するゾイ
    型が分からないから移植しようがないゾイ
    PHP Conf 沖縄 2022
    別言語への移植
    by @isanasan_ 64

    View Slide

  65. PHP Conf 沖縄 2022
    修正性(modifiability)
    by @isanasan_ 65

    View Slide

  66. PHP Conf 沖縄 2022
    修正性(modifiability)
    by @isanasan_ 66

    View Slide

  67. バグの早期発見に役立つ
    エディタの便利機機が使える
    解析性と修正性が向上する
    PHP Conf 沖縄 2022
    まとめ
    by @isanasan_ 67

    View Slide

  68. 組織にテストを書く文化を根付かせる戦略と戦術(2020秋版)
    PHPStanで始めるPHPのための静的解析
    エディタ中立なPHP開発環環の現在
    アジリティを支える品質特性
    PHP Conf 沖縄 2022
    参考文献
    by @isanasan_ 68

    View Slide