52
pfff id : ymotongpoo 1

[20110219] pfffについて

Embed Size (px)

DESCRIPTION

Python Hackathon 2011.02で発表したpfffの紹介。この時点ではまだバグが多いですが有用なツールだと思います。

Citation preview

Page 1: [20110219] pfffについて

pfff id : ymotongpoo

1  

Page 2: [20110219] pfffについて

2

まずはじめに 言っておきたい ことがある

Page 3: [20110219] pfffについて

3

pfffがうまく動かねえのは 俺のせいじゃねえ!

Page 4: [20110219] pfffについて

id : ymotongpoo

4

Page 5: [20110219] pfffについて

お前、誰よ? •  Sphinx-Users.jp 賑やかし担当

•  所属

•  翻訳とかしてます – Redis, Jinja2, Tornado...

•  YAMAGUCHI::weblog – http://d.hatena.ne.jp/ymotongpoo/

5

Page 6: [20110219] pfffについて

6

告知

Page 7: [20110219] pfffについて

7

#3 Organizer @moriyoshi @AE35 @MiCHiLU @ikasamt @ymotongpoo

いつやるか全然決まってねえ!

Page 8: [20110219] pfffについて

8

気をとりなおして

Page 9: [20110219] pfffについて

9

今日は Python Hackathon

なので

Page 10: [20110219] pfffについて

10

の話をすると思っただろ

Page 11: [20110219] pfffについて

11

OCaml製の PHP用ツール の話をします

Page 12: [20110219] pfffについて

12

pfffの話をします ぷ ふ  

Page 13: [20110219] pfffについて

13

で、pfffってなによ?

Page 14: [20110219] pfffについて

14

“Analyzer for code base”

建前

Page 15: [20110219] pfffについて

15

コードの雰囲気を見て いい感じか知るツール群

建前

Page 16: [20110219] pfffについて

関連ツール

•  ctags/gtags ‒ タグ作成 •  cscope ‒ C用ソースコードブラウザ •  lxr ‒ インデックス作成

16

建前

Page 17: [20110219] pfffについて

17

作者のOCamlへの愛とテンションで作られてる、聞こえがいいけど全然動かない物

実際

Page 18: [20110219] pfffについて

18

最初にひとつだけ 大事なことを お伝えしておきます

Page 19: [20110219] pfffについて

19

最新版&Mac OS上では ビルド出来ない/buggy なのでLinux環境あるならそこでやれ!

Page 20: [20110219] pfffについて

20

じゃあLinuxで やるとして

Page 21: [20110219] pfffについて

pfff Pre-requisition

•  OCaml 3.11.0以降 (3.11.2推奨) •  PCRE •  GTK2+ •  cairo2 •  pango

21

Page 22: [20110219] pfffについて

対応する言語 •  PHP •  OCaml •  JavaScript •  C •  C++ •  Java •  Tex •  Noweb

22

•  Lisp •  Scheme •  Haskell •  Erlang •  C# •  Python •  SQL •  Ruby

Page 23: [20110219] pfffについて

23

「おお、すげえ」と思うじゃないですか

Page 24: [20110219] pfffについて

将来対応するかもしれない言語 •  PHP •  OCaml •  JavaScript •  C •  C++ •  Java •  Tex •  Noweb

24

•  Lisp •  Scheme •  Haskell •  Erlang •  C# •  Python •  SQL •  Ruby

Page 25: [20110219] pfffについて

対応してる言語 •  PHP •  OCaml •  JavaScript •  C •  C++ •  Java •  Tex •  Noweb

25

•  Lisp •  Scheme •  Haskell •  Erlang •  C# •  Python •  SQL •  Ruby

Page 26: [20110219] pfffについて

26

とりあえず PHPしかまともに 対応してない

Page 27: [20110219] pfffについて

27

もとい

Page 28: [20110219] pfffについて

28

なのでPHPに 注力しています

Page 29: [20110219] pfffについて

pfffの構成ツール

•  pfff ‒ テストツール •  pfff_db ‒ 簡単なコード解析/DB作成 •  codemap ‒ コードの雰囲気可視化 •  sgrep ‒ 構文を考慮したgrep •  spatch ‒ 構文を考慮してpatch •  scheck ‒ コード上のミスを発見 •  stags ‒ ETAGSより詳細なタグ

29

Page 30: [20110219] pfffについて

pfff

• コードの静的解析ツール • 文法的に間違ってないか確認してくれる

30

$ pfff -parse_php <dir or file>  

Page 31: [20110219] pfffについて

sgrep

• 構文を考慮したgrep • 例)

31

$ sgrep -e ‘strstr(...) == false’ *.php  

$ find . ‒name *.php | xargs grep ‘strstr(...) == false’  

とどう違うの?  

Page 32: [20110219] pfffについて

sgrep

• 構文を考慮してくれる

32

$ sgrep -e ‘foo(..., 1, ...)’ *.php  

$hoge  =  $a-­‐>foo($spam,  1,  $egg) //  これは普通    $hoge  =  $a-­‐>foo($spam,                                    //  複数行でもOK                                                                1,                                                                $egg)  

Page 33: [20110219] pfffについて

spatch

• 構文を考慮してくれるpatch • パッチはこんな感じに書く

33

//remove_second_arg_foo.spatch foo(X -  ,Y ) //  remove_second_arg_foo_alt.spatch  -­‐        foo(X,Y)  +      foo(X)  

Page 34: [20110219] pfffについて

spatch

• パッチを当てる

34

$ spatch -c <patch> *.php  

Page 35: [20110219] pfffについて

scheck

• コード上のバグ発見ツール

•  PHPやJavaScriptなど、初期化されてないような変数を直接呼んじゃえるような場合に役立つ

35

Page 36: [20110219] pfffについて

scheck

• ユースケース

36

function foo($avar) { return $avarr; }

$  scheck  test.php  demos/scheck.php:4:9:  CHECK:  use  of  undefined  variable  $avarr  demos/scheck.php:3:13:  CHECK:  unused  Param  variable  $avar  

Page 37: [20110219] pfffについて

codemap

37

Page 38: [20110219] pfffについて

codemap

• 色とサイズで雰囲気が分かる • サイズがでかいファイル名ほど行数でかい • 関数名とかタグクラウドっぽくなってる – 呼ばれてる回数が多い関数ほどでかく書いてある

38

Page 39: [20110219] pfffについて

codemap

39

Linux  2.6  

Page 40: [20110219] pfffについて

codemap

40

Android  

Page 41: [20110219] pfffについて

codemap

•  GUIをダブルクリックするとemacsで開けたりする

• ここにめっちゃサンプルある – https://github.com/facebook/pfff/wiki/Examples

41

Page 42: [20110219] pfffについて

42

まあ、いま動かないにしても凄そうなのはわかった

Page 43: [20110219] pfffについて

43

でもPHPでしか 使えないんでしょ?

Page 44: [20110219] pfffについて

44

他言語対応用に 拡張書けるよ

Page 45: [20110219] pfffについて

lang_xxx

•  OCamlで書けばいいよー

•  字句解析器 –  lang_xxx/parsing/lexer_xxx.mll

•  抽象構文木生成器 –  lang_xxx/parsing/ast_xxx.ml

•  パーサー –  lang_xxx/parsing/ast_xxx.ml

45

Page 46: [20110219] pfffについて

46

ところで

Page 47: [20110219] pfffについて

47

「pfffについて話すよ」 って作者に言ったら

Page 48: [20110219] pfffについて

Wikiに紹介された

48

Page 49: [20110219] pfffについて

49

こんな発表で ごめんなさい>< でも頑張って!

Page 50: [20110219] pfffについて

50

まとめ

Page 51: [20110219] pfffについて

まとめ(2011/02/12時点)

•  sgrep, scheck, codemapあたりは便利そう

•  ただ動かない! •  ただただ動かない!

•  みんなどんどん使ってバグ報告しよう!

51

Page 52: [20110219] pfffについて

追記

• ちょうどPython Hackathon 2011.02の開催日に大量のアップデートがあってMac OS X+MacPortsでもビルドできるようになりました!

52