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
910
令和時代の PHP Extension の 作り方 〜 FFI を添えて〜
COLOPL Inc.
October 11, 2023
Tweet
Share
More Decks by COLOPL Inc.
See All by COLOPL Inc.
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
3
1k
ゲームを支えるバックエンドエンジニアのリアルを公開!
colopl
1
480
コロプラ_SRE_LCE_ゲームバックエンド_性能との戦い
colopl
0
440
新卒3年目の ゲームバックエンドエンジニアが これまでに経験したこと
colopl
1
850
大規模タイトルを ノーメンテで運用するコツ
colopl
1
810
サーバーサイドエンジニアの ゲーム企画との向き合い方
colopl
1
790
大規模/長期運用プロジェクト が抱える課題への チーム、個人の取り組み
colopl
1
770
K8s 上で laravel を 快適に運用する方法
colopl
0
910
ゲームタイトル開発側と サーバー基盤の連携事例の紹介
colopl
0
750
Other Decks in Technology
See All in Technology
PhpStorm超絶技巧40分集中講義 #phpconkagawa
yusuke
4
800
PHP 9 に備えよ - 動的プロパティ、どうすればいぃ?
taisukearase
0
410
Deno Queue を使って OGP画像の遅延作成をやってみる
toranoana
1
100
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
16
6.7k
AWSの生成AI入門書を執筆しました🎉
minorun365
PRO
0
160
Password cracking: past, present, future
openwall
0
330
シンプルなHITL機械学習と様々なタスクにおけるHITL機械学習
naohachi89
0
340
株式会社EventHub・エンジニア採用資料
eventhub
0
2.1k
パフォーマンス最適化のベストプラクティス
databricksjapan
0
220
使われないものを作るな!出口から作るデータ分析基盤 / Data Platform Development Starting from the User Needs
amaotone
16
5k
Prisma ORMを2年運用して培ったノウハウを共有する
tockn
19
5.2k
Taking Flight with Tailwind CSS
opdavies
0
4.3k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
29
4.1k
Building Applications with DynamoDB
mza
88
5.7k
Fireside Chat
paigeccino
22
2.7k
The Invisible Side of Design
smashingmag
294
49k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Design by the Numbers
sachag
274
18k
How to train your dragon (web standard)
notwaldorf
76
5.2k
Producing Creativity
orderedlist
PRO
338
39k
GraphQLの誤解/rethinking-graphql
sonatard
56
9.3k
Designing Experiences People Love
moore
136
23k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
2k
Robots, Beer and Maslow
schacon
PRO
155
8k
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