More Related Content
Similar to このPHP QAツールがすごい!2019 (20)
このPHP QAツールがすごい!2019
- 7. アジェンダ
PHP QAツールの歩み
CI/CD利用の浸透とともに注目を集めるQAツールの
歩みをふりかえり、昨今の事情を鑑みます
PHP QAツール最前線
QAツールのリスト紹介
堅牢なコードのための、静的解析・コーディングスタン
ダード検査・リファクタリングツールについて深堀りし
ます
QA ツールの段階的適用
サンプルコードを例にQAツールを段階的に適用していき
ます
まとめ
- 11. phpt
PHPUnit 2001
phing 2002
Hudson(のちのJenkins) 2005
phpUnderControl + CruiseControl
lime, simpletest
PHP_CodeSniffer
~ 2007
- 13. 2008 ~ 2011 PHPSpec 2008
PHP 5.3 2009
PHPMD 2010
Mockery 2010 0.6.0
travis ci PHPサポート 2011
『REAL-WORLD SOLUTIONS FOR DEVELOPING HIGH-
QUALITY PHP FRAMEWORKS AND APPLICATIONS』2011
php-project-wizard
PHPUnit, phpcs , phpmd, phploc などを導入するためのプロジェクトセット
Behat 2011 1.0.0
composer 2011
php-cs-fixer 2012
- 15. 2012 ~ 2015 nikic/php-parser 2012 (0.9.0)
Trismegiste/Mondrian 2013 ダイアグラム
PHPVisualDebt 2014 騒動
php7cc Compatibility Checker 2015
scrutinizer-ci 2013 頃 PHP CI SaaSの先駆け
ラスマスが各OSSにPull Request 2013
Roave Security Advisories 2014 ~
phpcs-calisthenics-rules 2014 1.0.0
2012年のプレゼン「Object Calisthenics Applied to PHP」を経てのルール
phpbench 2015
PHP 7.0 2015 Dec
Found using static analyzer: hhvm --hphp -t analyze
- 16. QA ツールの分類 ※Qafooの2016年スライドに基づく
実現したいこと ツール名
コーディングスタイルのチェ
ック
PHP_CodeSniffer
コードメトリクスの計測 PHPLOC
冗長化したコードの検出 PHP Copy/Paste
Detector (PHPCPD)
複雑度と結合度のチェック PHP Depend
潜在的なバグの検出 PHP Mess Detector
(PHPMD)
ソフトウェア層(コントローラなど)
の依存関係をチェック
Deptrac
https://qafoo.com/talks/16_10_internation_php_conference_automating_architecture_constraint_checks.pdf
https://developers.gnavi.co.jp/entry/ipc2016-report3
- 18. 2016~ exakat May 2015 v-0.2.0
phan Dec 2015 0.1
DeptracApr 2016 プロジェクトでのレイヤ構造をルール化
phpstan July 2016 0.1.0
localheinz/phpstan-rules Nov 2018 0.1.0
phpstan-exception-rules Jun 2018 0.1.0
psalm Nov 2016 0.1.0
roave/you-are-using-it-wrong May 2019 1.0.0
dePHPend Oct 2016 0.1.0
phpmnd Magic Number Detector Apr 2017 1.0.0
rector July 2017
Infection もとはトークンベースのhumbug July 2017 0.1.0
Roave Backward Compatibility Check May 2018 1.0.0
- 19. 2019年末 PHPを取り巻く状況
PHP 7 前提での型宣言/静的解析時代
ただし、phan/psalmでの型アノテーション・ジェネリク
ス※後述 が広く普及・サポートされている訳ではない
多言語での現状
JS … flowtype、そしてTypeScript
Python … PEP 484 mypy
Ruby … Sorbet, Ruby3 型定義ファイル
…SaaSでの冪等なデプロイ、ならびに
PHP 8 でのpreloadを前提とした
ビルド時代に・・・まだなってはいない
- 29. QA 高品質化への依存関係ピラミッド
IPC - Aggressive PHP Quality Assurance in 2019 | Marco Pivetta
https://www.youtube.com/watch?v=8rdTSYljts4
- 30. IPC - Aggressive PHP Quality Assurance in 2019 | Marco Pivetta
https://www.youtube.com/watch?v=8rdTSYljts4
QA 高品質化への依存関係ピラミッド
- 47. 静的解析を始めだすと、PHPに型が
足りないのが改めて認識できる
• スカラー値の引数型宣言 7.0
• nullablな型 7.1
• クラスプロパティの型 (typed property) 7.4
• Enum
• クラスの可視性 (internal)
• イミュータブル (readonly)
• ジェネリクス/テンプレート
• コールバックへの型づけ
• 交差型 、 Union型 8.0
• 連想配列がオブジェクトもどき arrayは嘘
• 純粋ではないリスト arrayは嘘
PHPにおける型とDoc Commentのあれこれ
- 84. 小話
「静的解析ツールはどれを使えば良いのか分からない」 どちらも使
えば良いのでは?
「なんで、PHPStormの話しなかったの?」VS CodeよりLSP サポート
が手厚ければ・・
型アノテーションからPHPStormのメタ作れるといいですね。
PHPのコードがPHPのコードから生成されるようになったので、静的
解析が一貫性が来る時代になりましたね!(arginfoがstubから生成で、
過去のprotoから変更で)
PHPStanのプラグインのほうが作るのが楽で、コード規約っぽいけど
PHPStanプラグインになってるの、どう?(クラスにfinal宣言とか)
特定のメソッド呼び出しを禁止する方法は、いくつかそれっぽいの
(php-ast-to-xml、phpstan-forbidden-method-calls-rule、phinder)浮かぶのでで
すが、検討したところ、まあ
エラーハンドリングの話は深いので、thecodingmachine/safe はまた次
回・・
アノテーションの種類(アサーション・ORM・API用など)おおすぎ
問題