Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHPの静的解析 ついでにLarastan
Search
namizatork
June 24, 2021
Programming
640
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPの静的解析 ついでにLarastan
namizatork
June 24, 2021
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
4.3k
もう細かいレビューは したくない、されたくない
namizatork
1
1.5k
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
590
Livewireは魔法??コードリーディング してみた
namizatork
1
410
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
namizatork
1
1.2k
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.5k
Laravel Hands-on
namizatork
0
390
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
AI Augmentation Techniques with Liberty
ivargrimstad
0
190
AI-Powered Domain-Driven Design
ziobrando
0
360
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
280
R8 の設定見直しでアプリサイズ削減
andpad
0
240
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
370
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
230
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
130
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
140
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
210
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
140
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
1
280
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
120
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
529
40k
WENDY [Excerpt]
tessaabrams
14
40k
A designer walks into a library…
pauljervisheath
211
25k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
310
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
750
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
440
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
450
A better future with KSS
kneath
240
18k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Unsuck your backbone
ammeep
672
58k
Transcript
www.bengo4.com PHPの静的解析 ついでにLarastan 2021.06.23 namizato
はじめに 2
3 3 並里 辰也(ナミザト タツヤ) 自己紹介 弁護士ドットコム株式会社 在籍そろそろ1年 Laravelが好きでたまに発表したり記事書いたりしてます @namizatork
Bengo4.com, Inc. 弁護士ドットコム というサービス • 一般市民と弁護士を結びつ け、お悩み解決を目指す • 2005年サービス開始 •
約900万セッション/ 月 • 約300件の法律相談/ 日 4
Bengo4.com, Inc. 目次 • テスト ◦ 動的テスト ◦ 静的テスト •
PHPStan ◦ PHPDoc ◦ levelや範囲などの設定 ◦ CI/CD • Larastan ◦ 使い方とか 5
テスト 6 みなさんテストコード書いてますか
Bengo4.com, Inc. テストには 動的/静的がある (ざっくりね) 7
動的テスト 8
Bengo4.com, Inc. 動的テスト プログラムコードを実行して、その結果からソフトウェアのバグ検出や品質評価、動作確認を行うテスト 手法のこと(主にUnitテスト、Featureテスト、Browserテストなどが挙げられる) • Unitテスト ◦ ServiceやModelなどの単位でメソッドの動作検証するテスト •
Featureテスト ◦ 1つのHTTPリクエスト単位の動きを動作検証するテスト • Browserテスト ◦ ブラウザからボタンやテキスト等の要素を動作検証するテスト 9
Bengo4.com, Inc. 動的テスト • 仕様 ◦ 実際にプログラムを実行して行う • メリット ◦
テストを書いておくことで品質担保にもなる ◦ テストを書くことで仕様の確認もなる • デメリット ◦ 実際にプログラムを実行するので、予期せぬトラブルが起きる可能性がある ◦ 開発者自身が実装するので網羅的なテストが難しい ◦ 人の手で実装するので、そもそもテスト自体が間違っている可能性がある 10
静的テスト 11
Bengo4.com, Inc. 静的テスト プログラムコードを実行せずにドキュメントやソースコードなどのチェックによって誤りや脆弱性を検出す るテスト手法(PHPでは以下のような静的解析ツールが存在する) • PHPstan ◦ 依存するライブラリがないので手軽に導入できる ◦
静的解析だけど一部 PHPが実行される(Composerのautoloadなど) • Phan ◦ PHPDocを基に解析するので PHPは実行されない ◦ ext_astというライブラリが必須 12
Bengo4.com, Inc. 静的テスト • 仕様 ◦ プログラムを実行せずに解析される(ただし PHPstanは一部実行する) ◦ 未定義の変数/メソッド/Class/プロパティなどを検出
◦ その他PHPDocの構文不備や分岐のチェックも • メリット ◦ 静的に解析される箇所は網羅的にテストができる ◦ テストを書く必要がないのでコストが少ない ◦ 変数の未定義など細かいエラーが事前に分かるのでコードレビューの手間が省ける • デメリット ◦ 無限ループなどは検出できない 13
PHPStan 14 ※ただのコピペです
Bengo4.com, Inc. PHPStan • instanceof、catch、typehints、およびその他の言語構造で使用されるクラスの存在。 • 呼び出されたメソッドと関数の存在とアクセシビリティ。渡された引数の数。 • メソッドが、返すように宣言したのと同じ型を返すかどうか。 •
アクセスされたプロパティの存在と可視性。また、宣言されたタイプとは異なるタイプがプロパティ に割り当てられているかどうか。 • フォーマット文字列に基づいて、 sprintf / printf呼び出しに渡されるパラメーターの数。 • ブランチとループのスコープの中に変数が存在するかどうか。 • (string) 'foo'のような無意味なキャストと、異なる型を厳密に比較していて常に falseになるオペ ランド。 15
PHPDoc 16 ただのコメントじゃないよ
Bengo4.com, Inc. PHPDoc 17 • コードの見通しが良くなる • IDEの補完が効くようになる • 静的解析ができる
levelや範囲などの設定 18 いろいろ柔軟に設定できるよ
Bengo4.com, Inc. Levelや範囲などの設定 19 • includes ◦ 設定ファイルの読み込み • paths
◦ 対象ファイル • level ◦ 静的解析のレベル • excludePaths ◦ 無視ファイル • checkMissingIterableValu eType ◦ 厳密な配列のチェック
CI/CD 20 いろいろ柔軟に設定できるよ
Bengo4.com, Inc. CI/CD もちろんCI/CDを実行する際にも静的解析を走らせることができます push時やcommit時など自由に設定が可能です CI/CDに静的解析を組み入れることでプルリク時のコードレビューに、 凡ミス(変数の未定義や型の違い)を指摘する必要がなくなり、結果的に使用や実装だけにフォーカス したレビューが行えます 21
Larastan 22
Bengo4.com, Inc. Larastan PHPStanライブラリの拡張ラッパーライブラリです LaravelにPHPStanを導入しようとすればファサード周りのエラー(ファサードは実在するクラスではな いため) その他にもEloquentを使う際の where() や find()
にも同様のエラーが起きます LarastanではそういったLaravel独自の仕様をフォローして扱える様にしています 23
使い方とか 24
Bengo4.com, Inc. Composerで Installするだけ 25
Bengo4.com, Inc. あとはPHPStanの様に 扱えるよ 26 ./vendor/bin/phpstan analyze と実行するだけで手動で静的解析が 走ります。 もちろんPHPStan同様にCI/CDで
commit時などに自動で走らせると いった事もできます
ご清聴ありがとう ございました。 27