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
1
570
PHPの静的解析 ついでにLarastan
namizatork
June 24, 2021
Tweet
Share
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
3.7k
もう細かいレビューは したくない、されたくない
namizatork
1
1.4k
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
510
Livewireは魔法??コードリーディング してみた
namizatork
1
340
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
namizatork
1
1.1k
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.4k
Laravel Hands-on
namizatork
0
350
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
ライブ配信サービスの インフラのジレンマ -マルチクラウドに至ったワケ-
mirrativ
2
270
The state patternの実践 個人開発で培ったpractice集
miyanokomiya
0
150
Google I/O recap web編 大分Web祭り2025
kponda
0
2.9k
Portapad紹介プレゼンテーション
gotoumakakeru
1
130
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
570
RDoc meets YARD
okuramasafumi
3
150
オープンセミナー2025@広島「君はどこで動かすか?」アンケート結果
satoshi256kbyte
0
220
オープンセミナー2025@広島LT技術ブログを続けるには
satoshi256kbyte
0
150
Claude Codeで実装以外の開発フロー、どこまで自動化できるか?失敗と成功
ndadayo
3
1.7k
MCPで実現するAIエージェント駆動のNext.jsアプリデバッグ手法
nyatinte
7
970
Jakarta EE Core Profile and Helidon - Speed, Simplicity, and AI Integration
ivargrimstad
0
240
SOCI Index Manifest v2が出たので調べてみた / Introduction to SOCI Index Manifest v2
tkikuc
1
110
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Building Applications with DynamoDB
mza
96
6.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
A better future with KSS
kneath
239
17k
Into the Great Unknown - MozCon
thekraken
40
2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Docker and Python
trallard
45
3.5k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
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