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

PHP で作られたゲテモノを色々紹介する(自作他作含めて)

sji
January 22, 2024

PHP で作られたゲテモノを色々紹介する(自作他作含めて)

PHP カンファレンス北海道 2024
2024/01/12 (前夜祭) 19:05〜
https://fortee.jp/phpcon-hokkaido-2024/proposal/cc682a76-153c-41dc-95af-062b42066b42

sji

January 22, 2024
Tweet

More Decks by sji

Other Decks in Technology

Transcript

  1. 複雑化していく Web の戦場で悪名を抱えつつ 生き残り続けた 複雑化が進む Web の世界 昔はもっと牧歌的だった ちょっと処理を間違えてもとにかくページが表示されれば上出来 沢山の部品を組み合わせて

    1 つのサイト、システムを作る必要の高まり 各部品が少しずつ違う方向へボタンをかけ違えれば本当に動かない より安全で確実に動くシステムへの要求 PHP は様々な罵声を浴びながら時代の変化に適応
  2. RubixML PHP による機械学習ライブラリ 行列・ベクトル計算用ライブラリである Tensor を利用 Tensor は Zephir で作られた拡張コードを持つ

    Zephir は PHP フレームワーク Phalcon のた めに作られた言語 https://rubixml.com/ https://zephir-lang.com/en https://phalcon.io/en-us
  3. phpy PHP コードと Python コードを相互に呼び出せ るようにする PHP 拡張 光と闇があわさって最強に見える どっちが闇?

    同じプロセス内で PHP と Python 両方の VM を 動かし、zval と PyObject を相互に変換 PyDict を PHP から読み書きするほうが Python で読み書きするより速い Python パッケージから PHP の IDE 用スタブの 生成も可能 examples ディレクトリに色々入っている Linux / Windows / macOS をサポート 作者は swoole の人 https://github.com/swoole/phpy
  4. PHP Desktop PHP 処理系と Chrome と Web サーバの抱き合わ せ PHP

    アプリケーションをデスクトップアプリケ ーションのように配布して各ユーザの手元で動 かせる 最近はあまり更新されていない https://github.com/cztomczak/phpdesktop
  5. NativePHP PHP 処理系と Electron / Tauri と Laravel の抱き 合わせ

    Laravel サーバと Electron / Tauri を同時に立ち上 げて HTTP 通信越しに操作 クロスプラットフォーム UI を作るのに React や Vue などを使ってもよい し Livewire も使える static-php-cli を通じバイナリをビルドして配布 するためのツールもある https://nativephp.com/
  6. php-tkui PHP から Tcl/Tk を叩く FFI ライブラリ 拡張をいじれるのは選ばれし者なので FFI だと

    多少メンテしやすい筈 選ばれし者 = PHP をやる気があって C を自由 に読み書きできる人、という母数の狭い人の 中でもさらに公開プロジェクトをメンテして いくくらいやる気のある人 https://github.com/skoro/php-tkui
  7. Z-Engine library FFI 経由で PHP VM 自体の機能を呼び出すライ ブラリ 演算子オーバーロードや final

    の実行時除去な ど、「拡張にならできる」が PHP で可能 作者が多忙であまり OSS 活動の時間がとれない らしく、最近更新されていない https://github.com/lisachenko/z-engine
  8. Reli 拙作の PHP VM 解析ツール FFI 経由でシステムコールを呼び別プロセスの PHP 処理系のメモリ内容を読む コールトレースをサンプリングして取得すれば

    遅い処理がわかる speedscope 形式などでフレームグラフの出力 も可能 メモリ内容を JSON ダンプすればメモリリーク やメモリボトルネックを jq で調べられる adsr/phpspy にインスパイアされて作った https://github.com/reliforp/reli-prof
  9. php-meta-sapi PHP の FFI で PHP 処理系を読み込み PHP スク リプトによる

    SAPI を実装する実験 隔離されたサンドボックス(別の処理系環境) に細かく干渉しながらのスクリプト実行が可能 NTS な環境へ ZTS な処理系を読み込める つまり ZTS 向けのマルチスレッド拡張を NTS 環境へアドオン可能 作者は phpspy と同じ人 https://github.com/adsr/php-meta-sapi
  10. sj-i/php-fuse PHP でファイルシステムを作る拙作ライブラリ FFI 経由で libfuse を通じて FUSE を叩く 連想配列や

    WordPress をファイルシステムとし てマウントしたりできる grep やエディタ、ファイラなどファイル操作を 行うツールで PHP スクリプト内のデータを操作 できる PHPerKaigi 2021 で発表 最近メンテしていないが面白い使い方を思いつ いたので弄りたい https://github.com/sj-i/php-fuse
  11. FlappyPHPant PHP 製の Flappy Bird ライクな 2D ゲーム という GLFW

    のバインディングを作っ ている その上に更に というゲームフレームワー クを作っている https://github.com/phpgl/flappyphpant php-glfw VISU
  12. pmmp/PocketMine-MP Minecraft: Bedrock Edition 用の PHP によるサー バ実装 10 年以上前からあるプロジェクト

    元々は Minecraft Portable Edition とそのプロト コルの解析を行うよう始まったらしい 内部的に pthreads 拡張を使ってマルチスレッド で動作 更新の止まった本家を fork して PHP 8.1 や 8.2 にも対応したもの https://github.com/pmmp/PocketMine-MP https://github.com/pmmp/ext-pmmpthread