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
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
令和時代の PHP Extension の 作り方 〜 FFI を添えて〜
COLOPL Inc.
October 11, 2023
More Decks by COLOPL Inc.
See All by COLOPL Inc.
Claude Code 再入門 会話の渡し方の4つの道具 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
290
Copilot / Claude Code 両方で使えるスキル・ハーネスの紹介 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
290
実務で動くAIエージェントを作ろう!MCP×Mastraをライブコーディングで実践
colopl
0
430
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
2.5k
PHPStan をできる限り高速化してみる
colopl
1
1.3k
コロプラ最新作インフラ構成について
colopl
0
340
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.4k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.9k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
960
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
280
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
200
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
16
5.7k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
0
850
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
0
180
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.5k
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
1
180
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
110
ガバメントクラウドでのランサムウェア対策
techniczna
1
770
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
2
730
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
510
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
200
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
HDC tutorial
michielstock
2
780
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
Accessibility Awareness
sabderemane
1
170
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Become a Pro
speakerdeck
PRO
31
6.1k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
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