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

PHPカンファレンス振り返りと プロポーザルについて話します / PHP Tech Talk ...

PHPカンファレンス振り返りと プロポーザルについて話します / PHP Tech Talk Night ~ after phpcon 2026

PHP Tech Talk Night ~ after phpcon 2026, 2026/08/27

Avatar for Hiroya-W / yuyukun

Hiroya-W / yuyukun

August 27, 2026

More Decks by Hiroya-W / yuyukun

Other Decks in Technology

Transcript

  1. ピクシブ株式会社 Pixiv Division / Pixiv Section バックエンドエンジニア / 24卒 PHP

    / Google Cloud / Neovim yuyukun ヤニすう / ヤニねこ / きみ死ぬ / リゼロ 2
  2. プロポーザル その1(20分) / 内容 • pixiv小説には、小説を執筆する にあたって独自の記法によって 章やルビなどを表現することが できる •

    バックエンドはこれを正規表現 でパースしていたので、 これを文法定義とそこから 生成されるパーサーで処理 8
  3. プロポーザル その1(20分) / 内容 • フロントエンド向けの パーサーは既に存在する • see: pixiv/pixiv-novel-parser

    • TypeScript <> PHP間で共通化 してパーサーを管理するように • 移行してみてよかったこと、 大変だったこと 9
  4. プロポーザル その2(5分) / 内容 • PSR-14: EventDispatcher • これを実装した symfony/event-dispatcher

    を 読んでみよう、という話 • コード自体は300行程度と シンプル。キューではなく 多次元配列での管理 11
  5. PHPカンファレンス 2026 現地参加してみて • 1日、あっという間でした...! • ブースでお話しする時間も多く楽しいものだったんですが、その合間に セッションを聞いたり、他の企業ブースでお話を聞いたりしようとすると 時間が足りない •

    PHP 8.6のこと、AIまわりの活用方法、JITとOPCacheの計測の お話が個人的に印象に残っています ◦ AI活用...個人的にも気になるトピックなので次はAIの話をしたい 23
  6. タグ除去処理の従来の実装 • チャプターとルビの入れ子 テキストを処理するケース • パーツに分解すれば何を やっているのかまだ読める /\[chapter: \]\n{0,1}/' :

    chapterタグ + 改行にマッチ • (?: )* ◦ ?: はグループ化であり、マッチした部分を取り出さな い、ということを明記している。 ◦ [^\[\]]+ ▪ `タグ以外のテキストで構成される部分 ◦ \[\[rb:[^\]]+\]\] ▪ ルビタグで構成される部分 29
  7. 破滅的バックトラック • ユーザが [chapter:あいうえおかきくけこ... と書き、最後の ] を書き 忘れたケース 1. 2.

    3. 4. あいうえおかきくけこ... 全体で1つの塊として試す ➔ 失敗 あいうえおかきくけ と こ の2つに分けて試す ➔ 失敗 あいうえおかきく と けこ の2つに分けて試す ➔ 失敗 あいうえおかきく と け と こ の3つに分けて試す ➔ 失敗 • 文字数が増えるごとに組み合わせが指数関数的(O(N^2))に増大 してしまう 32
  8. バックエンドのパーサー移行 • フロントエンド側 ◦ peg.js パーサージェネレータを利用 ◦ 文法定義とパーサーのJavaScriptコードを生成 ◦ →

    PHPも同じ文法定義からパーサーを生成できていたい • pegjs/pegjs は最終コミットが7年前 ◦ → 後継の peggy.js が開発され、メンテナンスされている ◦ → JSの代わりにPHPのコードを生成する MarcelBolten/phpeggy を発見!!! 36