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
型があると嬉しい〜って本当??
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hideki kinjyo
PRO
July 31, 2023
Programming
460
0
Share
型があると嬉しい〜って本当??
hideki kinjyo
PRO
July 31, 2023
More Decks by hideki kinjyo
See All by hideki kinjyo
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
120
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
310
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
230
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
460
PHPer Book Revue 「雑に作る」 #phperkaigi
o0h
PRO
0
350
俺にも私がAIと作った オススメの個人ツールを語らせてくれ
o0h
PRO
0
59
#phperbiglt のLT
o0h
PRO
0
93
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
270
symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー化
o0h
PRO
1
160
Other Decks in Programming
See All in Programming
エラー処理の温故知新 / history of error handling technic
ryotanakaya
7
1.8k
サプライチェーン攻撃対策「層を重ねて落ちない壁」を10日間で組み上げた話 #TechLeadConf2026
kashewnuts
1
210
【26新卒研修資料】TDD実装演習
dip_tech
PRO
0
170
Making the RBS Parser Faster
soutaro
0
660
Back to the roots of date
jinroq
0
710
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
700
From Formal Specification to Property Based Test
ohbarye
0
710
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
240
when storing skills in S3 file
watany
3
1.3k
cloudnative conference 2026 flyle
azihsoyn
0
110
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
310
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Prompt Engineering for Job Search
mfonobong
0
290
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
170
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
100
Transcript
が ͳʹ͔ͷษڧձͱ͔͕͋Δ༁Ͱͳ͍ Hideki Kinjyo GitHub: o0h / Twitter: @o0h_
ࣗݾհ / GitHub: @o0h / Twitter: @o0h_ FW CakePHP
Πϯτϩ PHP PHP
( ) https://fortee.jp/phpcon-2021/proposal/6cd22f6c-9caa-432f-930c-9e62f512d59d
None
https://www.php.net/manual/ja/language.types.intro.php
https://www.php.net/manual/ja/language.types.intro.php PHP ( ) PHP
https://www.php.net/manual/ja/language.types.intro.php 10000 3
https://www.php.net/manual/ja/language.types.intro.php =
https://www.php.net/manual/ja/language.types.intro.php ( ) Web
shin1x1͞Μͷൃදʮ੍ͷྗʯ https://speakerdeck.com/shin1x1/restricting-states
shin1x1͞Μͷൃදʮ੍ͷྗʯ https://speakerdeck.com/shin1x1/restricting-states
shin1x1͞Μͷൃදʮ੍ͷྗʯ https://speakerdeck.com/shin1x1/restricting-states
shin1x1͞Μͷൃදʮ੍ͷྗʯ https://speakerdeck.com/shin1x1/restricting-states
t-wada͞Μͷൃදʮ༧ʹউΔޚͳ͠ʯ https://speakerdeck.com/twada/growing-reliable-code-phperkaigi-2022
t-wada͞Μͷൃදʮ༧ʹউΔޚͳ͠ʯ https://speakerdeck.com/twada/growing-reliable-code-phperkaigi-2022
ܕΛ͚ͭΔͧʂʂͷϞνϕʔγϣϯ ( )
:
PHPͷܕએݴ PHP php.net https://www.php.net/manual/ja/language.types.declarations.php
( )
int $l, $r int int NULL DB (= )
int int int int ( )
PHP7 ( ) ࢀߟ ݫີͳܕ͚ IUUQTXXXQIQOFUNBOVBMKBMBOHVBHFUZQFTEFDMBSBUJPOTQIQMBOHVBHFUZQFTEFDMBSBUJPOTTUSJDU
خ͍͠Ͱ͔͢ʁ int t-wada
خ͍͠Ͱ͔͢ʁ = (DB HTTP ) etc ( ) = int
=>
int / $response->getBody() $body- >eof() string, bool, Response, Stream
ࢀߟ IUUQTHJUIVCDPNTMJNQIQ4MJNCMPC4MJN 3FTQPOTF&NJUUFSQIQ
Interface ࢀߟ IUUQTHJUIVCDPNTMJNQIQ4MJNCMPC4MJN 3FTQPOTF&NJUUFSQIQ StreamInterface bool int: 0
(Content-Length ) int int string bool
ܕͱͷ͖߹͍ํ ( ) Interface strict_types=1 private public
:
ΨϯΨϯܕએݴΛ͢Δ͜ͱͷऑͱ͔ PHPDoc PHP PHP
੩తղੳπʔϧΛ͓͏ / PHPStan https://phpstan.org/ PHPStan scans your whole codebase and
looks for both obvious & tricky bugs. Even in those rarely executed if statements that certainly aren't covered by tests. ( )
੩తղੳπʔϧΛ͓͏ / Psalm https://psalm.dev/ Psalm is a static analysis tool
that attempts to dig into your program and fi nd as many type-related bugs as possible. PHPStan
੩తղੳπʔϧΛ͓͏ / PhpStorm PHP PHPStan Psalm lint ( )
PHPStan
= CI ࢀߟ IUUQTQIQTUBOPSHSGDGBDGCDCEGC
PHPDoc @param / @return ࢀߟ IUUQTQIQTUBOPSHSGFFECEEEDG
: `key-of- <***>` `value-of-<***>` ( ) ࢀߟ IUUQTQIQTUBOPSHSCDGDFCBCCBBEE
: int<min, max> `int` ࢀߟ IUUQTQIQTUBOPSHSEFFGDDCCBEEFE
: (key, value ) iterable array mixed ࢀߟ
IUUQTQIQTUBOPSHSEG ff EDFBBBFD
: DTO ࢀߟ IUUQTQIQTUBOPSHSDCFGGCGGGFE
৭ʑͳܕͷදݱ : https://phpstan.org/writing-php- code/phpdoc-types
PHPStan
Πϯετʔϧ͢Δ
ઃఆϑΝΠϧΛઃஔ͢Δ https://phpstan.org/con fi g-reference
࣮ߦ͢Δ
( OK)
ಋೖ࣌ʹ͓֮͑ͯ͘ͱྑͦ͞͏ͳ֓೦ Error Rule/RuleSet Rule RuleSet Rule Rule level PHPStan Ruleset
0 9(max) level
Rule Levelͷྫ https://github.com/phpstan/phpstan-src/blob/1.10.25/conf/con fi g.level6.neon
ಋೖ࣌ʹ͓֮͑ͯ͘ͱྑͦ͞͏ͳ֓೦ Baseline ( ) Error `phpstan analyze generate-baseline` Error ignoreErrors
con fi g 1 ( )Error Baseline ignoreErrors
Baselineͷྫ(CakePHP) https://github.com/cakephp/cakephp/blob/4.4.15/phpstan-baseline.neon
PHPStanͷ͍͞͠ಋೖʹ͚ͯ PJ Level OK Baseline PHPStan ignoreErrors( Baseline ) Error
(cf: https://phpstan.org/user-guide/ignoring-errors#reporting-unused- ignores)
PHPStanͷ͍͞͠ಋೖʹ͚ͯ PJ Level CI 5 6
PHPStanͷ͍͞͠ಋೖʹ͚ͯ 連 Error etc
ͬͱڧྗͳ׆༻ʹ͚ͯ PHPStan https://phpstan.org/writing-php-code/phpdoc-types https://phpstan.org/con fi g-reference https://phpstan.org/user-guide/extension-library OSS
ͱͯࢀߟʹͳΔࢿྉͨͪ PHPStan #phpcon_okinawa pixivFANBOX https://tadsan.fanbox.cc/posts/4348669 #phpcon_okinawa pixivFANBOX https://tadsan.fanbox.cc/posts/2558149
level=0 PHPStan(Larastan) - Shin x Blog https://blog.shin1x1.com/entry/getting-stated-with-phpstan CI / Great static analysis with CI - Speaker Deck https://speakerdeck.com/oogfranz/great-static-analysis-with-ci