Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPの静的解析 ついでにLarastan
Search
namizatork
June 24, 2021
Programming
0
500
PHPの静的解析 ついでにLarastan
namizatork
June 24, 2021
Tweet
Share
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
1
3.4k
もう細かいレビューは したくない、されたくない
namizatork
0
1.3k
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
470
Livewireは魔法??コードリーディング してみた
namizatork
1
300
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
namizatork
0
1k
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.3k
Laravel Hands-on
namizatork
0
330
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
Full stack testing :: basic to basic
up1
1
930
Jakarta EE meets AI
ivargrimstad
0
230
testcontainers のススメ
sgash708
1
120
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1k
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
プロダクトの品質に コミットする / Commit to Product Quality
pekepek
2
770
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
700
선언형 UI에서의 상태관리
l2hyunwoo
0
140
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
250
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
useSyncExternalStoreを使いまくる
ssssota
6
1k
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
73
9.1k
GitHub's CSS Performance
jonrohan
1030
460k
Thoughts on Productivity
jonyablonski
67
4.4k
It's Worth the Effort
3n
183
28k
4 Signs Your Business is Dying
shpigford
181
21k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Making Projects Easy
brettharned
116
5.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
96
Gamification - CAS2011
davidbonilla
80
5.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
A Modern Web Designer's Workflow
chriscoyier
693
190k
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