Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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...
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_$:>]...
そのほか
よのなかにはたくさん実装ある
• PHPの静的解析 — Algo13 2016.04.11 ドキュメント 

http://algo13.net/php/tips/static-analysis.html
• ↑良い感じにまとまってるネ申記事
...
何をしたいのか
静的解析できると何が嬉しいのか
• Syntax Errorなファイルを

デプロイしないようにしたい…
• 弊社でも昔はありました
• コードレビューでつまらないことを
指摘したくない
• 割と膨大なコードを安全に

PHP7に着地させたい
最近のナウいツール
etsy/phan
• Rasmus Lerdorfを要するEtsy社が
開発する静的解析ツール
• 未定義関数とか型がをかしいとか、

とにかくいろんな指摘してくれる
• PHPDocの型を解析してくれる
• 日本語で紹介すればバズれるぞ!!!
最近やってること
baguette/definfo
• 最近夜な夜な作ってるツール
• 実行時情報(Reflection)を使って

いろいろ指図してくれるように

するつもり
• タグジャンプの代替にしたい
• 静的解析はしないつもりだったけど、
どうにもなら...
Upcoming SlideShare
Loading in …5
×

5分でわかる静的解析入門

2,318 views

Published on

PHP BLT #5で発表しました
http://phpblt.connpass.com/event/35070/

Published in: Technology
  • Be the first to comment

5分でわかる静的解析入門

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

×