Upgrade to Pro — share decks privately, control downloads, hide ads and more …

reli-sendaiphp-20260313

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for sji sji
March 13, 2026

 reli-sendaiphp-20260313

2026 年 3 月 13 日の第 2 回仙台 PHP 勉強会で使ったスライド

Avatar for sji

sji

March 13, 2026
Tweet

More Decks by sji

Other Decks in Programming

Transcript

  1. これまでの Reli 発表 PHP で PHP のプロファイラをつくろう(PHPerKaigi 2022 ) PHP

    で PHP のメモリプロファイラをつくろう(PHP Conference Japan 2023 ) PHP で読む楽しいコアダンプ(PHPerKaigi 2024 ) 3
  2. できてなかったこと スレッドセーフ版(ZTS )の PHP 処理系の対応 デバッグビルドについては 対応できていた かつて ZTS の

    PHP 処理系は利 用シーンがあまりなかった 比較的新しい PHP ランタイム FrankenPHP が ZTS 前提 docker から使えるのがデバ ッグ情報のない本番ビルド 9
  3. ZTS で何が困るか スレッドごとの領域(TLS )をちゃんと見ないといけない 「TLS 内の何バイト目に処理系内部状態があるか」が strip で消える 実際には処理系内部状態へのポインタ、たった 8

    バイトのデータ 処理系内部情報へたどり着けなくなる 通常の処理系(非 ZTS )では strip で消えない情報で全部足りてた部分 デバッグビルドに限っては strip されないので ZTS でも対応できてた 15
  4. 久しぶりに触ってみた きっかけ Claude Code のチャットに Reli の話を振ってみていた 実装継承やってる箇所をな んとかしたいんだよなーみ たいな、関係ない話

    わりと会話の成立が楽しかった PHP でメモリを読もうみた いなニッチな話の通じる相 手があまりいない 18
  5. スレッドごとの領域(TLS ) TLS (Thread Local Storage )のどこかに ZTS の処理系情報が居る 各スレッドの

    TLS 自体がどこにあるかは CPU の情報を読むとわかる 名前情報があれば名前で TLS 内の位置を引ける 名前がなければローラー作戦でしらみ潰しに見る、は非効率? 21
  6. 今回の PR 内容 stripped ZTS binary 対応を追加 issue と以前に PoC

    まで作った PR を Claude Code に教えた やる気の足りない俺にかわって コード整理をやってくれた 「コードの整理改善しよう と思ってたけど詳細忘れた」 みたいなぶん投げ 29
  7. 低レイヤでも会話が成立した 「PHP で別プロセスのメモリを読みながら実行ファイルの ELF バイナリ解析して る自作ツールが strip された ZTS バイナリだと処理系内部状態を得るためのアド

    レスがシンボル解決できずに困っているんだけどブルートフォースでなんとかし てやるぜ」 この話をされた人間のいくらかはたぶん途中で理解のレールから脱落する AI 先生はわりと普通に通じるしコードの整理までできる 自分から同等の対応案を出してはこないけど話せば分かるやつ 34