202507のブックマーク
202507付近のブラウザタブをサルベージ。
202506のブックマークは 202506のブックマーク にあります。
202508のブックマークは 202508のブックマーク にあります。
Vibetunnel: Your Mac Terminal in Any Browser | Secure & Retro
Claude CodeのCLIオプションまとめ | zenn.dev
本格的にClaude Codeを使い始めるので、いろいろ調べ始めている
Model Context Protocol (MCP) - Anthropic
#あとで読む
【MCPのトリセツ #11】Fetch MCP Server: ウェブコンテンツを取得・処理 | zenn.dev
cf. 【MCPのトリセツ #1】MCPの概要と導入方法 | zenn.dev
【Laravel】論理削除(softDelete)するときにリレーション先のデータも削除する方法 #Laravel - Qiita
Eloquent ORM便利ね......(サクッと論理削除の実装も表現できちゃう)
(まあ論理削除の採用是非は置いときつつ)カジュアルに適切な表現ができるようになってるのは悪くないからね 👌
Laravel 例外処理 ハンドラーによしなにやってもらう #PHP - Qiita
「さすがにLaravelにもExceptionHandlerあるよね??それ期待してRuntimeExceptionは過剰にcatchしなくてもよいよね???」みたいなお話をする際に調べ直してた
cf. https://github.com/laravel/framework/blob/8.x/src/Illuminate/Foundation/Exceptions/Handler.php#L211-L255
フェイクオブジェクトを活用したテストコードの信頼性の改善 | zenn.dev
モック/スタブ/フェイクオブジェクトみたいなテストダブルの種類を混同しがちなので、たびたび調べ直してる
PHPUnitでスタブとモックを理解する!【テストダブル】 | zenn.dev
てかPHPUnitの TestCase::createStub() って全然使えてなかったな今まで......(まあ
cf. #test-stubs - 6. Test Doubles — PHPUnit 10.5 Manual | docs.phpunit.de
古い実装を読むと、「普通にMockObjectを返してるんだな createStub() なのに......」ってなってたんだけど、最近のPHPUnit v12はちゃんとStubとMockObjectを分けて生成してるっぽい
以前も、内部的にはStubはMockObjectと違ってテストダブル自体へのアクセス検証はしてない、みたいな構造だったかもしれないけど、パッと見わからんかった
interfaceを返してはいたので利用側では考慮してて、内部処理的にはexpectsに含まれるメソッドを持ってなければスルーするだけだった、的なね
cf. https://github.com/sebastianbergmann/phpunit/blob/9.6.23/src/Framework/TestCase.php#L1770-L1796
v12のソースコードを読むと内部の生成処理で分けてるのがわかるし、MockObjectの場合はtraitで内部用のAPIを増やして検査できるようにしてあったりする
処理のinvocationができるようにするStubApiと、invocationの記録を検査するMockObjectApiってのがtraitでそれぞれ用意されてる
cf. https://github.com/sebastianbergmann/phpunit/blob/12.2.6/src/Framework/TestCase.php#L2305-L2334
cf. https://github.com/sebastianbergmann/phpunit/blob/12.2.6/src/Framework/MockObject/Runtime/Api/StubApi.php
cf. https://github.com/sebastianbergmann/phpunit/blob/12.2.6/src/Framework/MockObject/Runtime/Api/MockObjectApi.php
MockObjectだけがTestCaseの内部に保持してあるのが見受けられる(あとでMockObjectへのexpectsを検査するため)
最近 Mockery を使うけど、こっちはモックもスタブも Mockery::mock() で用意するんやね〜〜(I/F分けてなくて、登録する際にexpects相当のメソッドが呼ばれてると検査が走る的な構図かな)
cf. PHPのMockeryを使ってモックとスタブの違いを噛み砕いて説明する #PHPUnit - Qiita
Laravel 9.x フォームリクエストの解説 #PHP - Qiita
LaravelのFormRequestって認可も担ってくれるのね......(まあログイン情報も暗黙のinputデータってことなのかな)
PHPStanのカスタムルールを導入しました | PR TIMES 開発者ブログ
これでカスタムルールを書いてlintingするか、phpcsを入れるか迷っている
どっちでもlintingは実現できるけど、カスタムルールを書くよりphpcsの方が設定で解決できるかもなあ......みたいなことが結構多い、的なニュアンス
Stub Files | PHPStan
こうやってStubファイルを書いてphpstan.neonで読み込ませると、パッケージ側で定義がないものを補完できるから便利ね
Warn on missing PHPDoc · Issue #1824 · phpstan/phpstan | github.com
The phpDoc is needed only if there's not enough typeinfo in the native typehint.
PHPDocはtypehintのフォールバックとして使うだけよ、ってことね
Union Types vs. Intersection Types | PHPStan
Intersection typeが複雑すぎると解釈してくれない、みたいなケースが結構あるので悩ましい
https://github.com/laravel/framework/blob/12.x/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php#L140-L156
Http\Controllerで扱うHTTPリクエストオブジェクトが持ってる $request->validate() はマクロで設定されてるんだね〜の図
まあ、設定によってValidatorを読み込む必要がある実装っぽいので、そこまで不自然ではないけど静的解析が効きづらくなる
Larastanはカスタムルールかなんかで解決してたのをちらっと見かけた
cf. https://github.com/search?q=repo%3Alarastan%2Flarastan+Methods\Macro&type=code
larastan/phpstan-baseline.neon at 6431d010dd383a9279eb8874a76ddb571738564a · larastan/larastan | github.com
最近触ってるLaravelが結構古くて、そのままlarastanを導入できないので必要なルールだけを拝借することを検討している
https://github.com/phpstan/phpstan-src/blob/5d8c20985ea6a6edf55b0e907785da45294396fa/src/Rules/Exceptions/ThrowExprTypeRule.php#L21
PHPStanのビルドインルール、レベルの設定がattributesで書かれるようになってた(このルールがどこで対象になるかを探すのにも参考になるかな)
おそらく仕組みとしては、Attributesに書かれたものはDI用のインタフェースっぽくて、それをAttributes起点で一通り拾ってきて読み込んでるっぽい
cf. https://github.com/phpstan/phpstan-src/blob/5878035a0284d12982a562892ade0f4fa26fa24e/src/DependencyInjection/AutowiredAttributeServicesExtension.php#L97-L109
https://github.com/olvlvl/composer-attribute-collector みたいなAttributes起点で諸々集めてくるパッケージがいるのね〜便利だ
本来、Attributesはあくまで定義されたものへの属性として扱われるだけだけど、こういう拡張がなされると本来の意図とは逸れるものの器用にはなるよね👀
てかレベルはconf/以下にあるneonファイルを読むのが早かったわ😇
cf. https://github.com/phpstan/phpstan-src/blob/5878035a0284d12982a562892ade0f4fa26fa24e/conf/config.level1.neon
cf. https://github.com/phpstan/phpstan-src/blob/5d8c20985ea6a6edf55b0e907785da45294396fa/src/Rules/ParameterCastableToStringCheck.php#L15
ちなみに "AutowiredService" は常に適用されるやつっぽい
TypeScript: 「電話番号型」という意味を持たせた特殊なstring型の作り方 #Nominal-Type - Qiita
rt2zz/redux-persist: persist and rehydrate a redux store | github.com
localStorage / sessionStorage に対応してる
cf. https://github.com/rt2zz/redux-persist/blob/master/src/storage/getStorage.ts
globalから localStorage だったりを拾って、APIとして操作できるかを検査してるんだね〜〜
varlock | varlock
React-hook-formとyupを使ったバリデーションの実装 #react-hook-form - Qiita
あとで調査したい(直近触ってるプロダクトに使ってる形跡を見かけた)
ブラウザでCORSを無効化する方法 #Security - Qiita
#ブックマーク #links