狠狠撸

狠狠撸Share a Scribd company logo
5分でわかる静的解析入門
Learn PHP static analysis in 5 min.
2016-07-20 PHP BLT #5
お前誰よ
? うさみけんた (@tadsan) / Zonu.EXE
? GitHub/Packagistでは id:zonuexe
? Ruby書いてたら、何の因果かPHPを書く仕事に
? 好きな言葉はメタプログラミングです
さて
敵を知れば百戦殆ふからず
? プログラムを実際に動かさずして、?
ソフトウェアの性質を把握する
? いろんなツールとか手法がある
? 人間がPull Requestのdiffを見て?
レビューするのも一種の静的解析
? ユニットテストは実際に動かすので?
動的検査の一種
wc -l **/*.php
wc -l **/*.php
? Unixの標準コマンド
? お前は何を言ってるんだ
? ファイルの行数を測る (-l)
? バイト数を測る (-c)
php -l a.php
php -l target.php
? コードがSyntax Errorではないか?
検査する
? 実際に運用されるサーバーと同じ?
バージョンを利用する
? git ls-files | grep '.php$' |
xargs -IFILE -n1 php -l FILE
token_get_all()
token_get_all()
? PHPの標準関数 (要tokenizer)
? スクリプトを構文要素ごとに?
切り分けてくれる(だけ)
? 構文解析はしてくれない… (重要)
? 目的を集中すれば小さなパーサーは
意外に書けた
preg_match()
preg_match()
? PHPの標準関数(最終兵器)
? 雑な正規表現でも意外と機能する
? 正規表現パターンなら誰でも書ける
ので、チームでメンテナンスできる
preg_match()
? こんな感じで配列にパターンを?
並べていく
[
'level' => 'error',
'desc' => 'mt_srand() は使用禁止',
'pattern' => [
'/[^a-zA-Z0-9_$:>]mt_srand *(/i' => false,
],
],
そのほか
よのなかにはたくさん実装ある
? PHPの静的解析 — Algo13 2016.04.11 ドキュメント ?
http://algo13.net/php/tips/static-analysis.html
? ↑良い感じにまとまってるネ申記事
? phpmd, phpcs, php7cc…
? 簡単な構文解析のサンプル載ってる
何をしたいのか
静的解析できると何が嬉しいのか
? Syntax Errorなファイルを?
デプロイしないようにしたい…
? 弊社でも昔はありました
? コードレビューでつまらないことを
指摘したくない
? 割と膨大なコードを安全に?
PHP7に着地させたい
最近のナウいツール
etsy/phan
? Rasmus Lerdorfを要するEtsy社が
開発する静的解析ツール
? 未定義関数とか型がをかしいとか、?
とにかくいろんな指摘してくれる
? PHPDocの型を解析してくれる
? 日本語で紹介すればバズれるぞ!!!
最近やってること
baguette/definfo
? 最近夜な夜な作ってるツール
? 実行時情報(Reflection)を使って?
いろいろ指図してくれるように?
するつもり
? タグジャンプの代替にしたい
? 静的解析はしないつもりだったけど、
どうにもならないところは?
がんばって構文解析してる

More Related Content

5分て?わかる静的解析入门