Soumettre la recherche
Mettre en ligne
5分でわかる静的解析入門
•
3 j'aime
•
3,490 vues
Kenta USAMI
Suivre
PHP BLT #5で発表しました http://phpblt.connpass.com/event/35070/
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 21
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇
Kenta USAMI
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
Hisateru Tanaka
非同期系統の基礎
非同期系統の基礎
segayuu
PHPデプロイツールの世界
PHPデプロイツールの世界
Yuuki Takezawa
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
Hisateru Tanaka
PHPとJavaScriptの噺
PHPとJavaScriptの噺
Shogo Kawahara
Php非同期の技法
Php非同期の技法
Shogo Kawahara
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろう
Taiji INOUE
Recommandé
なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇
Kenta USAMI
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
Hisateru Tanaka
非同期系統の基礎
非同期系統の基礎
segayuu
PHPデプロイツールの世界
PHPデプロイツールの世界
Yuuki Takezawa
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
Hisateru Tanaka
PHPとJavaScriptの噺
PHPとJavaScriptの噺
Shogo Kawahara
Php非同期の技法
Php非同期の技法
Shogo Kawahara
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろう
Taiji INOUE
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトーク
Jun-ichi Sakamoto
恋に落ちるデプロイツール
恋に落ちるデプロイツール
totty jp
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
はじめてLaravelさわった 第86回php勉強会
はじめてLaravelさわった 第86回php勉強会
Osamu Kawasaki
mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応
KyutatsuNishiura
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
parrotstudio
負荷テストについて
負荷テストについて
Takahiro Ishida
php開発で使うタスクランナー gulp
php開発で使うタスクランナー gulp
Yuuki Takezawa
vimプラグインでよりよい(ry
vimプラグインでよりよい(ry
soh335
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Tomoki Hasegawa
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
Naruhiko Ogasawara
技術ドキュメントで難しい英文に出会ったら
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
Hiroshi Toda
Phpのレガシーコードをrubyで焼き変えてみた
Phpのレガシーコードをrubyで焼き変えてみた
Akira Kaneda
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
Hiroshi Toda
Laravel の学び方と得られる学び
Laravel の学び方と得られる学び
Masaru Matsuo
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
Junichi Ishida
前衛地獄を生き残る
前衛地獄を生き残る
gn_spawn
Frank-afcproxy
Frank-afcproxy
Toshiyuki Terashita
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
Php development efficiency improvement
Php development efficiency improvement
伸幸 茂木
Contenu connexe
Tendances
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトーク
Jun-ichi Sakamoto
恋に落ちるデプロイツール
恋に落ちるデプロイツール
totty jp
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
はじめてLaravelさわった 第86回php勉強会
はじめてLaravelさわった 第86回php勉強会
Osamu Kawasaki
mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応
KyutatsuNishiura
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
parrotstudio
負荷テストについて
負荷テストについて
Takahiro Ishida
php開発で使うタスクランナー gulp
php開発で使うタスクランナー gulp
Yuuki Takezawa
vimプラグインでよりよい(ry
vimプラグインでよりよい(ry
soh335
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Tomoki Hasegawa
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
Naruhiko Ogasawara
技術ドキュメントで難しい英文に出会ったら
技術ドキュメントで難しい英文に出会ったら
Wataru Terada
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
Hiroshi Toda
Phpのレガシーコードをrubyで焼き変えてみた
Phpのレガシーコードをrubyで焼き変えてみた
Akira Kaneda
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
Hiroshi Toda
Laravel の学び方と得られる学び
Laravel の学び方と得られる学び
Masaru Matsuo
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
Junichi Ishida
前衛地獄を生き残る
前衛地獄を生き残る
gn_spawn
Frank-afcproxy
Frank-afcproxy
Toshiyuki Terashita
Tendances
(20)
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
CLR/H第54回勉強会 ライトニングトーク
CLR/H第54回勉強会 ライトニングトーク
恋に落ちるデプロイツール
恋に落ちるデプロイツール
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
はじめてLaravelさわった 第86回php勉強会
はじめてLaravelさわった 第86回php勉強会
mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
負荷テストについて
負荷テストについて
php開発で使うタスクランナー gulp
php開発で使うタスクランナー gulp
vimプラグインでよりよい(ry
vimプラグインでよりよい(ry
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
LL Onsen 2008 OpenPrinting
LL Onsen 2008 OpenPrinting
技術ドキュメントで難しい英文に出会ったら
技術ドキュメントで難しい英文に出会ったら
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
がんばらない多言語化 @ FuelPHP&CodeIgniter ユーザの集い #7
Phpのレガシーコードをrubyで焼き変えてみた
Phpのレガシーコードをrubyで焼き変えてみた
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
Laravel の学び方と得られる学び
Laravel の学び方と得られる学び
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
前衛地獄を生き残る
前衛地獄を生き残る
Frank-afcproxy
Frank-afcproxy
Similaire à 5分でわかる静的解析入門
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
Php development efficiency improvement
Php development efficiency improvement
伸幸 茂木
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
Fumihito Yokoyama
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
おとなのテキストマイニング
おとなのテキストマイニング
Munenori Sugimura
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Hisateru Tanaka
Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
Takuya Sato
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
Kazuhiro Matsushima
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
Kenichi Mukai
Behat Driven Development
Behat Driven Development
Ryo Tomidokoro
Pyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
civicpg
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
civic Sasaki
International php conference 2016 参加レポート
International php conference 2016 参加レポート
Ryosuke Miyahara
Write-Help
Write-Help
和紀 大鷲
composer-scriptsについて
composer-scriptsについて
Hiraku Nakano
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
Ryo Iinuma
Php勉強会スライド
Php勉強会スライド
suzumurashingo
Similaire à 5分でわかる静的解析入門
(20)
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Php development efficiency improvement
Php development efficiency improvement
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
おとなのテキストマイニング
おとなのテキストマイニング
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Phpstormちょっといい話
Phpstormちょっといい話
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
Behat Driven Development
Behat Driven Development
Pyconjp2014_implementations
Pyconjp2014_implementations
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
International php conference 2016 参加レポート
International php conference 2016 参加レポート
Write-Help
Write-Help
composer-scriptsについて
composer-scriptsについて
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
Php勉強会スライド
Php勉強会スライド
Plus de Kenta USAMI
たのしい独自フレームワーク
たのしい独自フレームワーク
Kenta USAMI
Real World PHP in pixiv
Real World PHP in pixiv
Kenta USAMI
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
Kenta USAMI
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
Kenta USAMI
pixivとl10n/i18n
pixivとl10n/i18n
Kenta USAMI
Rubicureに学ぶメタプログラミング
Rubicureに学ぶメタプログラミング
Kenta USAMI
Accept-language
Accept-language
Kenta USAMI
php.js
php.js
Kenta USAMI
これからの名前の話をしよう
これからの名前の話をしよう
Kenta USAMI
近況の報告と自宅警備員が失職した話
近況の報告と自宅警備員が失職した話
Kenta USAMI
学ばないDSL
学ばないDSL
Kenta USAMI
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
Kenta USAMI
tadsanとは誰か
tadsanとは誰か
Kenta USAMI
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
Kenta USAMI
PowerShell+Lisp = ? (第2回残パン会)
PowerShell+Lisp = ? (第2回残パン会)
Kenta USAMI
キャンプ後の生活の変化とモチベーションの変化について
キャンプ後の生活の変化とモチベーションの変化について
Kenta USAMI
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
Kenta USAMI
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
Kenta USAMI
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
Plus de Kenta USAMI
(20)
たのしい独自フレームワーク
たのしい独自フレームワーク
Real World PHP in pixiv
Real World PHP in pixiv
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
pixivとl10n/i18n
pixivとl10n/i18n
Rubicureに学ぶメタプログラミング
Rubicureに学ぶメタプログラミング
Accept-language
Accept-language
php.js
php.js
これからの名前の話をしよう
これからの名前の話をしよう
近況の報告と自宅警備員が失職した話
近況の報告と自宅警備員が失職した話
学ばないDSL
学ばないDSL
札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
tadsanとは誰か
tadsanとは誰か
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
PowerShell+Lisp = ? (第2回残パン会)
PowerShell+Lisp = ? (第2回残パン会)
キャンプ後の生活の変化とモチベーションの変化について
キャンプ後の生活の変化とモチベーションの変化について
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
黒歴史・闇RubyKaigi(美しいRubyと私 そして闇プログラミング)
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
5分でわかる静的解析入門
1.
5分でわかる静的解析入門 Learn PHP static
analysis in 5 min. 2016-07-20 PHP BLT #5
2.
お前誰よ • うさみけんた (@tadsan)
/ Zonu.EXE • GitHub/Packagistでは id:zonuexe • Ruby書いてたら、何の因果かPHPを書く仕事に • 好きな言葉はメタプログラミングです
3.
さて
4.
敵を知れば百戦殆ふからず • プログラムを実際に動かさずして、 ソフトウェアの性質を把握する • いろんなツールとか手法がある •
人間がPull Requestのdiffを見て レビューするのも一種の静的解析 • ユニットテストは実際に動かすので 動的検査の一種
5.
wc -l **/*.php
6.
wc -l **/*.php •
Unixの標準コマンド • お前は何を言ってるんだ • ファイルの行数を測る (-l) • バイト数を測る (-c)
7.
php -l a.php
8.
php -l target.php •
コードがSyntax Errorではないか 検査する • 実際に運用されるサーバーと同じ バージョンを利用する • git ls-files | grep '.php$' | xargs -IFILE -n1 php -l FILE
9.
token_get_all()
10.
token_get_all() • PHPの標準関数 (要tokenizer) •
スクリプトを構文要素ごとに 切り分けてくれる(だけ) • 構文解析はしてくれない… (重要) • 目的を集中すれば小さなパーサーは 意外に書けた
11.
preg_match()
12.
preg_match() • PHPの標準関数(最終兵器) • 雑な正規表現でも意外と機能する •
正規表現パターンなら誰でも書ける ので、チームでメンテナンスできる
13.
preg_match() • こんな感じで配列にパターンを 並べていく [ 'level' =>
'error', 'desc' => 'mt_srand() は使用禁止', 'pattern' => [ '/[^a-zA-Z0-9_$:>]mt_srand *(/i' => false, ], ],
14.
そのほか
15.
よのなかにはたくさん実装ある • PHPの静的解析 —
Algo13 2016.04.11 ドキュメント http://algo13.net/php/tips/static-analysis.html • ↑良い感じにまとまってるネ申記事 • phpmd, phpcs, php7cc… • 簡単な構文解析のサンプル載ってる
16.
何をしたいのか
17.
静的解析できると何が嬉しいのか • Syntax Errorなファイルを デプロイしないようにしたい… •
弊社でも昔はありました • コードレビューでつまらないことを 指摘したくない • 割と膨大なコードを安全に PHP7に着地させたい
18.
最近のナウいツール
19.
etsy/phan • Rasmus Lerdorfを要するEtsy社が 開発する静的解析ツール •
未定義関数とか型がをかしいとか、 とにかくいろんな指摘してくれる • PHPDocの型を解析してくれる • 日本語で紹介すればバズれるぞ!!!
20.
最近やってること
21.
baguette/definfo • 最近夜な夜な作ってるツール • 実行時情報(Reflection)を使って いろいろ指図してくれるように するつもり •
タグジャンプの代替にしたい • 静的解析はしないつもりだったけど、 どうにもならないところは がんばって構文解析してる
Télécharger maintenant