PHPStan型付けチュートリアル はいいぞ！

# はじめに
3/21 - 3/23 で開催されていた [PHPerKaigi2025](https://phperkaigi.jp/2025/) の感想記事です！
今回の PHPerKaigi ですが、day1 はオフラインで参加、day2 はオンラインで参加してきました！

様々なトークを聞きましたが、その中の「[PHPStan七転八倒](https://fortee.jp/phperkaigi-2025/proposal/33f7eb3f-6320-4167-9623-b38602e4b334)」で「[PHPStan型付けチュートリアル](https://github.com/zonuexe/phpstan-typing-tutorial?tab=readme-ov-file)」の存在を知ったので、実際にチュートリアルしてみた感想です！

:::note
「PHPStan七転八倒」の内容は、PHPStan 本体へのPRなど OSS 活動に関してがメインでした。トークの中でポロッと話に出た「PHPStan型付けチュートリアル」が気になったので、今回実際に試してみました。
:::

# PHPStan型付けチュートリアル 入門編 のいいところ
- [公式ドキュメント](https://phpstan.org/user-guide/getting-started) よりも量が多くないので読みやすいところ
- それぞれの節ごとに実際に手を動かして理解を深められるところ
- 手を動かす際は `PHPStan Playground` を使用してブラウザで実行できるところ

# PHPStan型付けチュートリアル 入門編 の詳細
- 詳細は [君の目で確かめてくれ！](https://github.com/zonuexe/phpstan-typing-tutorial?tab=readme-ov-file)[^1]


# 個人的に知れて嬉しかったこと
- [PHPStan\dumpType()](https://phpstan.org/user-guide/troubleshooting-types#debugging) を使用すると、PHPstan が式をどの方に解決するかを確認できること

例えば、確認したい箇所を `PHPStan\dumpType()` で指定して PHPStan を実行すると下記のように表示される。
```php:dump結果
 ------ -------------------------- 
  Line   agreement.php             
 ------ -------------------------- 
  49     Dumped type: string|null  
 ------ -------------------------- 
```

これはめちゃくちゃ便利！
ただこれくらいの型ならタイプヒント簡単にできるので、配列で試したい、、、！


なので配列を dump してみる。
```php:dumpType()
dumpType([
    'setting' => $setting,
    'serialCodes' => $serialCodes,
    'urls' => $urls,
]);
```

```php:dump結果
 ------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  Line   repository.php                                                                                                                                                                                                                                           
 ------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  53     Dumped type: array{setting: Model_Settings|null, serialCodes: array<Model_Serial_Codes>|null, urls: array<Model_Urls>|null}  
 ------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
```

dump された型の部分はこのまま PHPDOC の `@return` に書けるじゃないか、、、！
（[array-shapes](https://phpstan.org/writing-php-code/phpdoc-types#array-shapes) を必死に書いてた自分を思い出し涙 :cry:） 

# まとめ
[PHPStan型付けチュートリアル](https://github.com/zonuexe/phpstan-typing-tutorial?tab=readme-ov-file) はいいぞ！

このチュートリアルを読んだら「PHPStan のマニュアル読みたい！」と言う気持ちになったので、説明書をあまり読まないタイプの人にとてもおすすめです！

今後 PHPStan のこと知らない人に知ってもらいたい場合、このチュートリアルを共有していきたいと思いました！


[^1]: [君の目で確かめてくれ！](https://dic.pixiv.net/a/%E5%90%9B%E3%81%AE%E7%9B%AE%E3%81%A7%E7%A2%BA%E3%81%8B%E3%82%81%E3%81%A6%E3%81%8F%E3%82%8C!)