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
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
130
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
300
Seven New Principles of Software Engineering
yegor256
0
390
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
500
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
140
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
120
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
240
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.9k
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
150
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
140
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
150
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
110
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
440
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
470
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
The Curious Case for Waylosing
cassininazir
1
590
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The untapped power of vector embeddings
frankvandijk
2
2k
Utilizing Notion as your number one productivity tool
mfonobong
4
630
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
390
Odyssey Design
rkendrick25
PRO
2
900
GitHub's CSS Performance
jonrohan
1033
470k
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