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.6k
令和時代の PHP Extension の 作り方 〜 FFI を添えて〜
COLOPL Inc.
October 11, 2023
Tweet
Share
More Decks by COLOPL Inc.
See All by COLOPL Inc.
コロプラ最新作インフラ構成について
colopl
0
36
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
910
コロプラのオンボーディングを採用から語りたい
colopl
7
1.8k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
0
130
大規模トラフィックを支える ゲームバックエンドの課題と構成の変遷 ~安定したゲーム体験を実現するために~
colopl
3
4k
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
3
1.6k
ゲームを支えるバックエンドエンジニアのリアルを公開!
colopl
1
1.2k
コロプラ_SRE_LCE_ゲームバックエンド_性能との戦い
colopl
0
890
新卒3年目の ゲームバックエンドエンジニアが これまでに経験したこと
colopl
1
1.5k
Other Decks in Technology
See All in Technology
Visualize, Visualize, Visualize and rclone
tomoaki0705
9
68k
【Developers Summit 2025】プロダクトエンジニアから学ぶ、 ユーザーにより高い価値を届ける技術
niwatakeru
2
1.6k
ソフトウェアエンジニアと仕事するときに知っておいたほうが良いこと / Key points for working with software engineers
pinkumohikan
1
130
Reading Code Is Harder Than Writing It
trishagee
2
110
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
830
EDRの検知の仕組みと検知回避について
chayakonanaika
2
680
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.7k
ビジネスモデリング道場 目的と背景
masuda220
PRO
9
670
2025-02-21 ゆるSRE勉強会 Enhancing SRE Using AI
yoshiiryo1
1
420
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.8k
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
18
7.1k
Apache Iceberg Case Study in LY Corporation
lycorptech_jp
PRO
0
130
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Optimizing for Happiness
mojombo
376
70k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Facilitating Awesome Meetings
lara
52
6.2k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Unsuck your backbone
ammeep
669
57k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
BBQ
matthewcrist
87
9.5k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Docker and Python
trallard
44
3.3k
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: @zeriyoshi@phpc.social 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