楽をするためのPHPDocと配列型の落とし穴 / PHPDoc and pitfalls of array

9ed92fc8760bf8b6ea2a034022052b42?s=47 takaram
August 24, 2020

楽をするためのPHPDocと配列型の落とし穴 / PHPDoc and pitfalls of array

9ed92fc8760bf8b6ea2a034022052b42?s=128

takaram

August 24, 2020
Tweet

Transcript

  1. 楽をするためのPHPDocと 配列型の落とし穴 2020.8.21 @PHP LT Fes

  2. 自己紹介 • 名前 ◦ 荒巻 拓哉 • 所属 ◦ 株式会社ラクス

    ▪ 配配メール というサービスの開発をしてます
  3. PHPDoc、書いてますか?

  4. https://github.com/symfony/symfony/blob/03155addd7c96a9455660b7d51d993cf4f8eb201/src/Symfony/Component/ HttpFoundation/InputBag.php

  5. • コードを読む際に理解しやすい • ドキュメントを生成できる → phpDocumentor • IDEの補完が効きやすくなる → PhpStorm

    • 静的解析ができる → PHPStan, Phan など 何のために書くの?
  6. ドキュメント生成 https://github.com/PHPMailer/PHPMailer/blob/e7acd3d92fa02728c51bf64b90615bffc84815f0/src/PHPMailer.php

  7. ドキュメント生成 http://phpmailer.github.io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html#method_html2text

  8. IDEで補完

  9. 静的解析 引数の型が違う、プロパティ・メソッドが存在しない、などを検出 DateTimeクラスにないメ ソッド 引数の型が違う

  10. 静的解析 PHPStan

  11. 静的解析 Phan

  12. PHPDocの仕様? 各ツールでサポートする記法が少しずつ異なる PSR-5, PSR-19として標準化する動きはあるが、現時点ではまだ提案段階

  13. PHPDocを書いてみる 題材:Userクラス   ORマッパーのEntityクラスのイメージ

  14. None
  15. PHPDocを書いてみる PHPDocをちゃんと書いてるからヨシ! ……? → 全ユーザのユーザ名を表示する関数を書いてみる

  16. 補完が効かない

  17. 補完が効かない

  18. 静的解析でエラー検知できない PHPStan Phan

  19. なんで? array型は中の要素の型はわからない → 補完も静的解析もできない

  20. なんとかならないの? User[] と書きましょう プリミティブの配列でもOK • int[] • string[] • (User|string)[]※PhpStorm

    2020.2時点で未対応
  21. None
  22. PHPStan Phan

  23. その他の配列型の書き方 @return array<int> @return array<string, int> @return array{id: int, name:

    string} 上記3つはPhpStorm 2020.2では未対応
 (ただのarray扱いになる)

  24. まとめ • PHPDocを書くと楽できる ◦ 自動でドキュメントを作ってくれる ◦ IDEで補完できる ◦ 静的解析ができる •

    配列は要素の型も書く ◦ int[]形式 ◦ 連想配列はarray<string, int> か array{id: int}形式 ▪ ただしPhpStormは未対応 • PHPDocはしっかり書きましょう!!!
  25. 参考資料 • 2018年のPHPDoc事情とPSR-5 - Qiita https://qiita.com/tadsan/items/72b02339d12120ca37d7 • array shapes記法(Object-like arrays)と旧PSR-5記法で型をつける

    - Qiita https://qiita.com/tadsan/items/bfa9465166c351da37e5 • PSR-19: PHPDoc tagsを予習してみよう - BASE開発チームブログ https://devblog.thebase.in/entry/2019/12/14/110000