202507のブックマーク
本格的にClaude Codeを使い始めるので、いろいろ調べ始めている
Eloquent ORM便利ね......(サクッと論理削除の実装も表現できちゃう)
(まあ論理削除の採用是非は置いときつつ)カジュアルに適切な表現ができるようになってるのは悪くないからね 👌
「さすがにLaravelにもExceptionHandlerあるよね??それ期待してRuntimeExceptionは過剰にcatchしなくてもよいよね???」みたいなお話をする際に調べ直してた
モック/スタブ/フェイクオブジェクトみたいなテストダブルの種類を混同しがちなので、たびたび調べ直してる てかPHPUnitの TestCase::createStub() って全然使えてなかったな今まで......(まあ
古い実装を読むと、「普通にMockObjectを返してるんだな createStub() なのに......」ってなってたんだけど、最近のPHPUnit v12はちゃんとStubとMockObjectを分けて生成してるっぽい
以前も、内部的にはStubはMockObjectと違ってテストダブル自体へのアクセス検証はしてない、みたいな構造だったかもしれないけど、パッと見わからんかった
interfaceを返してはいたので利用側では考慮してて、内部処理的にはexpectsに含まれるメソッドを持ってなければスルーするだけだった、的なね
v12のソースコードを読むと内部の生成処理で分けてるのがわかるし、MockObjectの場合はtraitで内部用のAPIを増やして検査できるようにしてあったりする
処理のinvocationができるようにするStubApiと、invocationの記録を検査するMockObjectApiってのがtraitでそれぞれ用意されてる
MockObjectだけがTestCaseの内部に保持してあるのが見受けられる(あとでMockObjectへのexpectsを検査するため)
最近 Mockery を使うけど、こっちはモックもスタブも Mockery::mock() で用意するんやね〜〜(I/F分けてなくて、登録する際にexpects相当のメソッドが呼ばれてると検査が走る的な構図かな)
LaravelのFormRequestって認可も担ってくれるのね......(まあログイン情報も暗黙のinputデータってことなのかな)
これでカスタムルールを書いてlintingするか、phpcsを入れるか迷っている
どっちでもlintingは実現できるけど、カスタムルールを書くよりphpcsの方が設定で解決できるかもなあ......みたいなことが結構多い、的なニュアンス
こうやってStubファイルを書いてphpstan.neonで読み込ませると、パッケージ側で定義がないものを補完できるから便利ね
The phpDoc is needed only if there's not enough typeinfo in the native typehint.
PHPDocはtypehintのフォールバックとして使うだけよ、ってことね
Intersection typeが複雑すぎると解釈してくれない、みたいなケースが結構あるので悩ましい
Http\Controllerで扱うHTTPリクエストオブジェクトが持ってる $request->validate() はマクロで設定されてるんだね〜の図
まあ、設定によってValidatorを読み込む必要がある実装っぽいので、そこまで不自然ではないけど静的解析が効きづらくなる
Larastanはカスタムルールかなんかで解決してたのをちらっと見かけた
最近触ってるLaravelが結構古くて、そのままlarastanを導入できないので必要なルールだけを拝借することを検討している
PHPStanのビルドインルール、レベルの設定がattributesで書かれるようになってた(このルールがどこで対象になるかを探すのにも参考になるかな)
おそらく仕組みとしては、Attributesに書かれたものはDI用のインタフェースっぽくて、それをAttributes起点で一通り拾ってきて読み込んでるっぽい
本来、Attributesはあくまで定義されたものへの属性として扱われるだけだけど、こういう拡張がなされると本来の意図とは逸れるものの器用にはなるよね👀
てかレベルはconf/以下にあるneonファイルを読むのが早かったわ😇
ちなみに "AutowiredService" は常に適用されるやつっぽい
localStorage / sessionStorage に対応してる
globalから localStorage だったりを拾って、APIとして操作できるかを検査してるんだね〜〜
あとで調査したい(直近触ってるプロダクトに使ってる形跡を見かけた)