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

PHPMDのPHPMDによる静的解析結果

 PHPMDのPHPMDによる静的解析結果

2022-05-27
PHPerのための「静的解析」を語り合うPHP TechCafe
https://rakus.connpass.com/event/245646/

iwamot

May 27, 2022
Tweet

More Decks by iwamot

Other Decks in Technology

Transcript

  1. PHPMDの

    PHPMDによる静的解析結果
    2022-05-27

    PHPerのための「静的解析」を語り合うPHP TechCafe

    https://rakus.connpass.com/event/245646/
    ENECHANGE株式会社 インフラエンジニア

    岩本隆史 (@iwamot)

    View Slide

  2. 2019年、リファクタリングを任された
    当時は旅行業の会社に勤めていた
    アクティビティ予約サービスをCakePHPで開発していた
    20,000行超のファイルがあるなど、コードの品質が気になった
    リファクタリングしたいと申し出た

    View Slide

  3. 静的解析ツールを探し始めた
    リファクタリングの優先度を決めるのに使いたい

    View Slide

  4. PHPMDを見つけた


    https://phpmd.org/
    PHP Mess Detector(いわゆる「コードの不吉な匂い」を検出)
    SiderやCodacyでも使われていたので、試す価値があると思った

    View Slide

  5. 好奇心から、PHPMD自体を解析した
    PHPMD自体もPHPで書かれている
    当時のコードをいま解析するなら下記のような感じ
    $ git clone https://github.com/phpmd/phpmd.git
    $ cd phpmd
    $ git checkout 42bf8ad4
    $ docker run -it --rm \
    -v /path/to/phpmd/src:/src \
    iwamot/phpmd-docker:2.12.0 /src html \
    cleancode,codesize,controversial,design,naming,unusedcode \
    --exclude /src/test > phpmd-result.html

    View Slide

  6. 不吉な匂いが35件も検出された

    View Slide

  7. OSS貢献のチャンスだと思った
    不吉な匂いの検出ツールなのに、不吉な匂いが多いのは切ない
    修正プルリクエストを送ろう!

    View Slide

  8. 修正ターゲットを決めた
    未使用変数 $list が戻り値に使われている
    明らかなバグはこれだけだった

    View Slide

  9. PRを送ったらマージされた


    https://github.com/phpmd/phpmd/pull/598

    View Slide

  10. めでたしめでたし

    View Slide

  11. しかし

    View Slide

  12. リファクタリングは完遂できなかった
    自社サービスのコード解析は済ませた
    リファクタリングも順調に進めていた
    そこへ新型コロナが来てしまった
    いろいろあって退職することに

    View Slide

  13. PHPMDの不吉な匂いも増えている
    当時の35件から39件に (fcb0f1f3)

    View Slide

  14. ともあれ

    View Slide

  15. 静的解析ツールを解析してみると

    発見があるかも

    View Slide