Page 1
で コード静的解析
Phan PHP 2018
Static analysis of PHP code using Phan.
2018-05-30 PHP勉強会@東京 #phpstudy
公開日:
by USAMI Kenta @tadsan
で コード静的解析
Phan PHP 2018
Static analysis of PHP code using Phan.
2018-05-30 PHP勉強会@東京 #phpstudy
お前誰よ
うさみけんた (@tadsan) / Zonu.EXE
We are hiring!
近況報告
そして
って何
Phan
今回は最近の
Phanについて
軽くまとめます
最近のPhanの
動向
相変らず恐しいペー スで開発が進んでる
連想配列の
静的解析の鬼
LSPの実装
復讐
静的解析とは
実行して
調べるのが
動的解析
実行せず
調べるのが
静的解析
Xdebug, phpdbg
などのデバッガは
動的解析
PHPUnitなどの
テスティングフレームワークも
動的解析
は
php -l
静的解析
PHPStanは
実行時情報を使って
静的解析する
Phanは
コードを実行せず
静的解析する
得意なことが
ちょっと異なる
導入しやすさも ちょっと異なる
@tadsanは
も も
PHPStan Phan
両方使ってます
詳しいことは
直接きいて
(ここまで5分)
Phanを使って
できること
説明
“Phan is a static analyzer for PHP that
prefers to minimize false-positives.
Phan attempts to prove incorrectness rather
than correctness.”
https://github.com/phan/phan
Phanは偽陽性を最小化することを
“
好むPHP静的解析器です。
Phanは正しいと証明することよりも
誤りであることを証明しようとします。
”
https://github.com/phan/phan
Phanでエラーが
検出されなければ
正しく動く… わけではない
Phanでエラーが
検出されるから
コードは動かない…
わけではない
「動かないかもしれない」
ちゃんとしてないコード
から怪しい箇所を検出する
のに強い
で、Phanは何を やってくれるの?
ざっくり
要はPhpStormを 使ってできるよう
な検査ができる
ざっくりとPhanのできること
存在しないクラスやメソッドの使用
引数の型のミスマッチや過不足
コードとPHPDocの不整合
存在しないプロパティのアクセス
PHP7と非互換な文法
非推奨な機能の使用 (@deprecated)
比較的最近実装された機能
LSP (Language Server Protocol)
VSCなどから利用できる
設定ファイルの自動生成
composer.jsonからの設定取り込み
未使用変数・デッドコード検出機能
型
PSR-5(abandoned) 型表記を実装
@param @return @var @method
, , ,
@property @phan-
に優先する
付きのPHPDocタグが追加
独自の拡張形式で型を記述できる
Closure(int|array): (int[])
@phan-param array{field:string}
Phanを
導入しよう
三択
A. Phar
アーカイブ
(超おてがる)
B. Docker
(ただしバージョン古すぎる)
C. Composer
(依存関係の管理がだるい)
A. Phar
アーカイブ
(超おてがる)
B. Docker
(ただしバージョン古すぎる)
C. Composer
(依存関係の管理がだるい)
Pharアーカイブのメリット
導入も更新もPharファイルを
ダウンロードするだけ! 超カンタン
ただし、PHPの実行環境は必要
ファイルをダウンロードして
mv phan.phar ~/local/bin/phan
chmod +x ~/local/bin/phan
Dockerのメリット
Dokcerの動く環境なら超カンタン!
Phan 0.9.4を最後に音沙汰がない… まあPHP7.1サポートされてるし動く
けど…
Composerのメリット
あるかなあ… (疑問)
どうしてもPhanのHEADを
攻めたいならComposerで入れる
composer require --dev
でプロジェ
クトに入れるのはオススメしない
composer global require
やるなら
どうやって
動かすの
Composerの初期設定
プロジェクトルートがある場所で
phan --init
を実行すると
.phan/config.php
が自動生成される
phan -o phan.log
のように実行する
phan.log
と に行区切りのレポートが
表示される
Phan以外の 最近の動向
PHPStan
PHPStan
Phanとキャラかぶりしてるので
比較されがち
Phanが全体を解析するのが基本で遅 いけど、PHPStanはファイルごとに
解析するとかに向いてる
PHPStan
PullRequestごとにテストするなら
PhanよりもPHPStan
高速に解析できるので、作業中に
常時解析しまくってもよい
Emacsで編集中に表示すると
PhpStormっぽくなるぞ!!!1
https://github.com/emacs-php/phpstan.el
Phpactor
Phpactor
これも静的解析ツールだけど、
補完や定義ジャンプ、定義の挿入や リファクタリングなどのエディタ向
けのツールセットを提供
いままでリファクタリングは
PhpStorm独擅場だったが、
これを崩せるポテンシャルがある
Phpactor
エディタに依存しない操作 標準でvimプラグインがある Emacs版の実装は私が開発中
https://github.com/emacs-php/phpactor.el
オレオレ
開発中感はあるけど、いちおう動く
最後に