Upgrade to Pro — share decks privately, control downloads, hide ads and more …

計測できるレガシーさを捉え、コード改善に対処する / phperkaigi2023

計測できるレガシーさを捉え、コード改善に対処する / phperkaigi2023

PHPerKaigi 2023の登壇資料です。
https://phperkaigi.jp/2023/

blue_goheimochi

March 25, 2023
Tweet

More Decks by blue_goheimochi

Other Decks in Technology

Transcript

  1. PHPerKaigi 2023
    2023.03.25
    Yuta Ohashi

    View Slide

  2. 2






    View Slide

  3. 3










    View Slide

  4. / @blue_goheimochi
    PHP(Laravel), JavaScript(Vue.js/Nuxt.js),
    , , ,
    , , PUBG Mobile,

    View Slide

  5. 5
    • Web




    View Slide

  6. Web

    View Slide

  7. 7
    Web





    • etc...etc...etc...

    View Slide

  8. 8
    Web

    View Slide

  9. 9
    Web
    (legacy)

    View Slide

  10. 10
    Web

    View Slide

  11. 11
    Web
    3



    View Slide

  12. 12
    Web
    3




    View Slide

  13. 13
    Web
    3





    View Slide

  14. 14
    Web
    3








    View Slide

  15. 15
    Web
    3




    View Slide

  16. View Slide

  17. 17
    3



    View Slide

  18. 18
    3




    View Slide

  19. 19
    3






    View Slide

  20. 20
    3







    View Slide

  21. 21
    3





    View Slide

  22. View Slide

  23. 23





    View Slide

  24. 24

    ...
    • 24

    • 1

    View Slide

  25. 25






    View Slide

  26. View Slide

  27. 27





    View Slide

  28. 28





    • etc...

    View Slide

  29. 29
    • : phpcpd
    • Copy/Paste Detector (CPD) for PHP code.
    • 2023 1

    • Don t Repeat Yourself

    View Slide

  30. 30
    phpcpd 4.1.0 by Sebastian Bergmann.
    Found 184 clones with 9893 duplicated lines in 142 files:
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
    ~~~~~~~~~~
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
    ~~~~~~~~~~~
    - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
    /app/xxxxxx/controllers/xxxxxx.php:1247-1422
    ~~~~~~~~~~
    8.41% duplicated lines out of 112932 total lines of code.
    Average size of duplication is 54 lines, largest clone has 358 of lines
    184 142 9,893

    View Slide

  31. 31
    phpcpd 4.1.0 by Sebastian Bergmann.
    Found 184 clones with 9893 duplicated lines in 142 files:
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
    ~~~~~~~~~~
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
    ~~~~~~~~~~~
    - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
    /app/xxxxxx/controllers/xxxxxx.php:1247-1422
    ~~~~~~~~~~
    8.41% duplicated lines out of 112932 total lines of code.
    Average size of duplication is 54 lines, largest clone has 358 of lines
    View

    View Slide

  32. 32
    phpcpd 4.1.0 by Sebastian Bergmann.
    Found 184 clones with 9893 duplicated lines in 142 files:
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
    ~~~~~~~~~~
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
    ~~~~~~~~~~~
    - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
    /app/xxxxxx/controllers/xxxxxx.php:1247-1422
    ~~~~~~~~~~
    8.41% duplicated lines out of 112932 total lines of code.
    Average size of duplication is 54 lines, largest clone has 358 of lines
    Fat

    View Slide

  33. 33
    phpcpd 4.1.0 by Sebastian Bergmann.
    Found 184 clones with 9893 duplicated lines in 142 files:
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528
    ~~~~~~~~~~
    - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines)
    /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574
    ~~~~~~~~~~~
    - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines)
    /app/xxxxxx/controllers/xxxxxx.php:1247-1422
    ~~~~~~~~~~
    8.41% duplicated lines out of 112932 total lines of code.
    Average size of duplication is 54 lines, largest clone has 358 of lines
    112,932 8.41%
    54 358

    View Slide

  34. 34
    • : 112,932
    • : 8.41%
    • : 9,893
    • : 184
    • 規 : 142

    View Slide

  35. 35



    View Slide

  36. 36
    • : terryyin/lizard
    • Lizard is an extensible Cyclomatic Complexity Analyzer for many
    programming languages(PHP Python )


    • if/else, for, switch

    View Slide

  37. 37
    10 25%
    30 40%
    50 70%
    75 98%

    View Slide

  38. 38
    • : terryyin/lizard
    • Lizard is an extensible Cyclomatic Complexity Analyzer for many
    programming languages(PHP Python )


    • if/else, for, switch

    =========================================================================================
    !!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
    ================================================
    NLOC CCN token PARAM length location
    ------------------------------------------------
    247 63 2436 0 353 [email protected]@./xxxxx/controllers/zzzzController.php
    139 41 1272 0 202 [email protected]@./xxxxx/controllers/zzzzController.php
    124 39 1018 0 161 [email protected]@./xxxxx/controllers/zzzzController.php
    81 37 351 1 84 [email protected]@./xxxx/xxxx/Controller/xxxx/Abstract.php
    152 37 1086 0 197 [email protected]@./xxxx/xxxx/xxxx/xxxxController.php
    143 36 1110 0 197 [email protected]@./xxxx/xxxx/xxxxController.php
    150 35 1516 0 223 [email protected]@./xxxx/controllers/xxxxController.php
    63 34 741 1 72 [email protected]@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php
    81 34 917 0 106 [email protected]@./yyyy/controllers/yyyyController.php
    110 31 1071 0 143 [email protected]@./xxxx/controllers/xxxxController.php
    75 30 753 0 108 [email protected]@./xxxx/controllers/yyyyController.php
    97 29 926 0 127 [email protected]@./xxxx/controllers/yyyyController.php
    ==========================================================================================
    Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
    ------------------------------------------------------------------------------------------
    33248 16.3 2.3 104.2 1743 11 0.01 0.05
    63
    70%

    View Slide

  39. 39
    • : terryyin/lizard
    • Lizard is an extensible Cyclomatic Complexity Analyzer for many
    programming languages(PHP Python )


    • if/else, for, switch

    =========================================================================================
    !!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!!
    ================================================
    NLOC CCN token PARAM length location
    ------------------------------------------------
    247 63 2436 0 353 [email protected]@./xxxxx/controllers/zzzzController.php
    139 41 1272 0 202 [email protected]@./xxxxx/controllers/zzzzController.php
    124 39 1018 0 161 [email protected]@./xxxxx/controllers/zzzzController.php
    81 37 351 1 84 [email protected]@./xxxx/xxxx/Controller/xxxx/Abstract.php
    152 37 1086 0 197 [email protected]@./xxxx/xxxx/xxxx/xxxxController.php
    143 36 1110 0 197 [email protected]@./xxxx/xxxx/xxxxController.php
    150 35 1516 0 223 [email protected]@./xxxx/controllers/xxxxController.php
    63 34 741 1 72 [email protected]@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php
    81 34 917 0 106 [email protected]@./yyyy/controllers/yyyyController.php
    110 31 1071 0 143 [email protected]@./xxxx/controllers/xxxxController.php
    75 30 753 0 108 [email protected]@./xxxx/controllers/yyyyController.php
    97 29 926 0 127 [email protected]@./xxxx/controllers/yyyyController.php
    ==========================================================================================
    Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
    ------------------------------------------------------------------------------------------
    33248 16.3 2.3 104.2 1743 11 0.01 0.05
    3

    View Slide

  40. 40
    • ( ): 69,946
    • CCN: 2.8
    • CCN
    • :4,518

    View Slide

  41. 41
    • : phpmd unusedcode





    View Slide

  42. 42
    • : phpmd unusedcode





    class Sample
    {
    private static $start = 1;
    private $end = 2;
    private $piyo = 3;
    public function addOne()
    {
    $item = 1;
    return $this->piyo++;
    }
    private function execute($text)
    {
    }
    }

    View Slide

  43. 43
    • : phpmd unusedcode





    class Sample
    {
    private static $start = 1;
    private $end = 2;
    private $piyo = 3;
    public function addOne()
    {
    $item = 1;
    return $this->piyo++;
    }
    private function execute($text)
    {
    }
    }

    View Slide

  44. 44
    • : phpmd unusedcode





    FILE: /app/sample.php
    ----------------------
    5 | VIOLATION | Avoid unused private fields such as '$start'.
    6 | VIOLATION | Avoid unused private fields such as '$end'.
    11 | VIOLATION | Avoid unused local variables such as '$item'.
    15 | VIOLATION | Avoid unused private methods such as 'execute'.
    15 | VIOLATION | Avoid unused parameters such as '$text'.

    View Slide

  45. 45


    • Rector, PHPStan

    View Slide

  46. 46
    1) sample.php:1
    ---------- begin diff ----------
    @@ @@
    class Sample
    {
    - private static int $start = 1;
    - private $end = 2;
    private $piyo = 3;
    public function addOne()
    {
    - $item = 1;
    return $this->piyo++;
    - }
    -
    - private function execute($text)
    - {
    }
    }
    ----------- end diff -----------
    Rectorの場合

    View Slide

  47. 47
    class Sample
    {
    private $piyo = 3;
    public function addOne()
    {
    return $this->piyo++;
    }
    }
    class Sample
    {
    private static $start = 1;
    private $end = 2;
    private $piyo = 3;
    public function addOne()
    {
    $item = 1;
    return $this->piyo++;
    }
    private function execute($text)
    {
    }
    }
    Rectorの場合

    View Slide

  48. 48
    • : PHP CSFixer, PHP CodeSniffer
    • PSR-12 PSR-2

    View Slide

  49. 49
    • : PHPStan, Psalm
    • (= )

    View Slide

  50. 50





    • etc...

    View Slide

  51. 51



    • Four Keys

    View Slide

  52. 52
    • : Git
    • Git

    View Slide

  53. 53
    • : Google Analytics



    View Slide

  54. 54
    • : new relic, Datadog, Mackerel, Sentry
    • APM



    View Slide

  55. 55
    Four Keys
    • For keys



    View Slide

  56. 56





    View Slide

  57. 57
    How


    • ex)

    View Slide

  58. まとめ

    View Slide

  59. 59
    • Web







    View Slide

  60. View Slide