Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
令和時代の PHP Extension の 作り方 〜 FFI を添えて〜
Search
COLOPL Inc.
October 11, 2023
Technology
0
1.9k
令和時代の PHP Extension の 作り方 〜 FFI を添えて〜
COLOPL Inc.
October 11, 2023
Tweet
Share
More Decks by COLOPL Inc.
See All by COLOPL Inc.
PHPStan をできる限り高速化してみる
colopl
0
560
コロプラ最新作インフラ構成について
colopl
0
170
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.3k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
520
大規模トラフィックを支える ゲームバックエンドの課題と構成の変遷 ~安定したゲーム体験を実現するために~
colopl
3
5.9k
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
3
1.8k
ゲームを支えるバックエンドエンジニアのリアルを公開!
colopl
1
1.6k
コロプラ_SRE_LCE_ゲームバックエンド_性能との戦い
colopl
0
1.1k
Other Decks in Technology
See All in Technology
生成AIとM5Stack / M5 Japan Tour 2025 Autumn 東京
you
PRO
0
190
業務自動化プラットフォーム Google Agentspace に入門してみる #devio2025
maroon1st
0
180
Optuna DashboardにおけるPLaMo2連携機能の紹介 / PFN LLM セミナー
pfn
PRO
1
860
20250929_QaaS_vol20
mura_shin
0
110
10年の共創が示す、これからの開発者と企業の関係 ~ Crossroad
soracom
PRO
1
170
DataOpsNight#8_Terragruntを用いたスケーラブルなSnowflakeインフラ管理
roki18d
1
330
データエンジニアがこの先生きのこるには...?
10xinc
0
440
GopherCon Tour 概略
logica0419
2
180
about #74462 go/token#FileSet
tomtwinkle
1
280
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
9k
OpenAI gpt-oss ファインチューニング入門
kmotohas
2
930
バイブコーディングと継続的デプロイメント
nwiizo
2
410
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Side Projects
sachag
455
43k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
610
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Statistics for Hackers
jakevdp
799
220k
Six Lessons from altMBA
skipperchong
28
4k
The World Runs on Bad Software
bkeepers
PRO
71
11k
It's Worth the Effort
3n
187
28k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Transcript
令和時代の PHP Extension の 作り方 〜 FFI を添えて〜 株式会社コロプラ 技術基盤本部
サーバー基盤チーム 工藤 剛 1
アジェンダ 2 1. 自己紹介 2. PHP Extension とは 3. PHP
7.4 の FFI とは 4. How to Extension 開発 ◦ PHPT によるテスト ◦ Valgrind によるメモリチェック ◦ LLVM Sanitizer によるチェック
工藤 剛 技術基盤本部 第3バックエンドエンジニア部 サーバー基盤グループ PEチーム 2017 年新卒入社 運用タイトルのサーバーサイドエンジニアを経験後 SRE
に その後は PE として全社共通部分などの開発、導入などを担当 PHP 8.2 の ext-random とか作ったり X (formerly Twitter): @zeriyoshi Mastodon: @
[email protected]
3 氏名 : 部署名 : 自己紹介
PHP の実行エンジンを拡張し、機能を提供する仕組み 組み込みの関数・クラスなどの多くも PHP Extension PHP Extension とは 4
Zend Extension PHP Extension PHP FFI PHP Library 記述言語 C
*1 C *1 PHP + C *2 PHP 実行形態 ネイティブ ネイティブ ハイブリッド Zend VM 拡張性 ほぼ何でも 広い 広い 言語の範囲内 開発難度 非常に高い 高い 中程度 低い 導入難度 高い 高い 非常に高い 低い PHP Extension とは 5 *1: C ABI (PHP ABI) に準拠したバイナリを出力可能なもの *2: FFI で呼び出した先はネイティブ, それ以外は Zend VM または ext-ffi で実行 主要な PHP の機能を拡張する仕組み
PHP 7.4 の FFI とは 6 PHP 7.4 から導入された C
ABI のライブラリを 利用できるようにする PHP Extension (ext-ffi) Extension を作らずともネイティブライブラリを利用可能に! …ただし
PHP 7.4 の FFI とは 7 動作させるために必要な要件が結構多い! • ext-ffi PHP
Extension が必要 ◦ 標準的な PHP 環境には入っていない ◦ Linux では libffi が必要 • 危険なこともできてしまう ◦ Z-Engine (ランタイムで実行エンジンに変更を加える) https://github.com/lisachenko/z-engine
PHP 7.4 の FFI とは 8 FFI を用いて libc の関数を呼び出してみる
開発環境での検証用に使うのは良いが 本番環境に導入は厳しそう... (個人の感想です) PHP 7.4 の FFI とは 9
How to Extension 開発 10 PHP 同梱の ext_skel.php が使える が、少々ハードルが高い...
How to Extension 開発 11 開発環境含めてすぐ構築できるテンプレートを作成 コンパイラや VSCode の設定済みなので 面倒くさい環境構築ほぼゼロで開発が可能
GitHub Actions による CI も構築済みで すぐ使える (はず) https://github.com/zeriyoshi/pskel
実演 How to Extension 開発 - Pskel 12
How to Extension 開発 - PHPT によるテスト 13 PHP は本体含め
PHPT でテストが書かれている https://qa.php.net/phpt_details.php 最近追加されたドキュメント化されていないディレクティブ • EXTENSION: 読み込まれていなければスキップ • XLEAK: テストケースによる leak (Valgrind) を許容
How to Extension 開発 - Valgrind によるメモリチェック メモリやスレッド管理の不備を実行時に チェックできるツールチェーン メモリリークや未初期化アクセスなどを
事前に検出可能 run-tests.php を実行する際に -m オプションを指定することで実行可能 14
How to Extension 開発 - LLVM Sanitizerによるチェック ※ Pskel では
MemorySanitizer のみ Valgrind 同様、メモリリークや未初期化領域へのアクセスを検出可能 Valgrind で見逃すようなものも検出可能なのでかけておくと一層安心できる run-tests.php を実行する際に –msan オプションを指定することで利用可能 15
PHP を拡張する機運は FFI の導入や Extension Skeleton の整備で 高まってきている! コードサンプルを交えた具体的な例は COLOPL
Tech Blog で後日...! 空き時間はスポンサーブースにもいます! まとめ 16