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
PHPerにとってのWebAssemblyの可能性
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
glassmonenkey
October 08, 2023
Technology
1
1.5k
PHPerにとってのWebAssemblyの可能性
#phpcon 2023で登壇してきました
https://phpcon.php.gr.jp/2023/
glassmonenkey
October 08, 2023
Tweet
Share
More Decks by glassmonenkey
See All by glassmonenkey
encoding/json/v2で何が変わるか
nagano
14
4.6k
アジャイルテストの4象限で考える プロダクト開発の品質への向き合い方
nagano
1
2.4k
パッケージ管理ツール Ryeへの旅路
nagano
1
620
PHPをブラウザで動かす技術
nagano
0
2.8k
PHPとWebAssembly
nagano
19
6.4k
アジャイルで始める データ分析基盤構築
nagano
1
3.6k
Goで始めるTDD
nagano
1
3k
Python製の姓名分割 ライブラリをGoに移植した話
nagano
0
1.7k
PHPとGraphQL
nagano
3
6.4k
Other Decks in Technology
See All in Technology
脳内メモリ、思ったより揮発性だった
koutorino
0
350
最強のAIエージェントを諦めたら品質が上がった話 / how quality improved after giving up on the strongest AI agent
kt2mikan
0
180
わたしがセキュアにAWSを使えるわけないじゃん、ムリムリ!(※ムリじゃなかった!?)
cmusudakeisuke
1
730
マルチプレーンGPUネットワークを実現するシャッフルアーキテクチャの整理と考察
markunet
2
250
楽しく学ぼう!ネットワーク入門
shotashiratori
1
370
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
210
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
250
OSC仙台プレ勉強会 AlmaLinuxとは
koedoyoshida
0
170
非情報系研究者へ送る Transformer入門
rishiyama
11
7.5k
楽しく学ぼう!ネットワーク入門
shotashiratori
4
3.3k
S3はフラットである –AWS公式SDKにも存在した、 署名付きURLにおけるパストラバーサル脆弱性– / JAWS DAYS 2026
flatt_security
0
1.8k
ガバメントクラウドにおけるAWSの長期継続割引について
takeda_h
2
110
Featured
See All Featured
Designing for Timeless Needs
cassininazir
0
160
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
140
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
550
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
160
AI: The stuff that nobody shows you
jnunemaker
PRO
3
390
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
970
Git: the NoSQL Database
bkeepers
PRO
432
66k
Transcript
© 2012-2023 BASE, Inc. 1 PHP Conference 2023 BASE株式会社 永野
峻輔 ( @glassmonekey ) PHPerにとっての WebAssemblyの可能性
© 2012-2023 BASE, Inc. 2 自己紹介 所属 BASE 株式会社 BASE
BANKチーム Engineering Program Manager 資金調達プロダクト「YELL BANK」の開発責任者やってます。 Go, PHP, Pythonを書きつつ時々データエンジニアも。 趣味 個人開発 最近は日帰り温泉とかも SNS X(Twitter): @glassmonekey Github: https://github.com/glassmonkey 永野 峻輔 (ながの しゅんすけ) 昨日ディズニーで全身バキバキ...
© 2012-2023 BASE, Inc. 3 このトークの目的 • WebAssemblyの基本的な理解 • PHPerがWebAssembly(Wasm)と仲良くなること
© 2012-2023 BASE, Inc. 4 1 2 3 Wasmとは Wasmを使って実装してみる
PHPerにとってのWasmの可能性 今日話すこと
© 2012-2023 BASE, Inc. 5 Wasm触ったことある人 ✋
© 2012-2023 BASE, Inc. 6 Wasmを 業務で使ったことがある人✋
© 2012-2023 BASE, Inc. 7 ぜひ帰ったら遊んでみてください
© 2012-2023 BASE, Inc. 8 Wasm とは
© 2012-2023 BASE, Inc. 9 Wasmとは Webブラウザを含む実行環境で コード実行とコンパクトなコード表現を実現するバイナリ形式 https://developer.mozilla.org/ja/docs/WebAssembly/Concepts
© 2012-2023 BASE, Inc. 10 対応状況 https://developer.mozilla.org/ja/docs/WebAssembly モダンな環境なら基本動く
© 2012-2023 BASE, Inc. 11 例1 webassembly.sh Linuxを模倣したもの https://webassembly.sh
© 2012-2023 BASE, Inc. 12 例2 php-play.dev https://php-play.dev 最近 PHP
8.3入荷しました。寄付待ってます!!
© 2012-2023 BASE, Inc. 13 詳細はblogや過去slideで https://speakerdeck.com/nagano/phpwoburauzadedong-kasuji-shu https://zenn.dev/glassmonkey/articles/ae6cadef80c6c4
© 2012-2023 BASE, Inc. 14 なぜ Wasm なのか
© 2012-2023 BASE, Inc. 15 Webアプリのリッチ化
© 2012-2023 BASE, Inc. 16 JavaScriptだけだと辛い • ブラウザゲーム(特に3D) • AR/VR
• 画像処理 … etc
© 2012-2023 BASE, Inc. 17 JavaScript + Wasm WebAssembly: How
and why https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71/ WASMはJSの一部の代替え
© 2012-2023 BASE, Inc. 18 導入事例から見るWasm https://madewithwebassembly.com/
© 2012-2023 BASE, Inc. 19 1Password • 入力解析部分で主な改善 • Chromeで最大13倍、Firefoxだと39倍
https://blog.1password.com/1password-x-may-2019-update/
© 2012-2023 BASE, Inc. 20 TensorFlow • パフォーマンス向上(約10倍) • 機械学習のようなCPUなどのリソースを酷使する場合とは相性が良い
https://yashints.dev/blog/2019/12/17/tfjs-wasm
© 2012-2023 BASE, Inc. 21 Wasmの特徴
© 2012-2023 BASE, Inc. 22 Web Assemblyとは(2回目) Webブラウザを含む実行環境で コード実行とコンパクトなコード表現を実現するバイナリ形式 https://developer.mozilla.org/ja/docs/WebAssembly/Concepts
© 2012-2023 BASE, Inc. 23 Wasmの特徴 • 移植性 ◦ 任意の言語でWebAssemblyにbuildできたら良い
• セキュア ◦ Runtimeが隔離(Sandbox化)されているのでセキュア Wasm Host System Wasi API Wasm Runtime
© 2012-2023 BASE, Inc. 24 Wasmと仕様 • 基本仕様 ◦ Wasm-Core
• ブラウザ用仕様 ◦ Wasm Web API ◦ Wasm JS API • ブラウザ外仕様 ◦ Wasi (Web Assembly System Interface) https://webassembly.org/specs/ それぞれ別物!!
© 2012-2023 BASE, Inc. 25 Wasmと仕様 • 基本仕様 ◦ Wasm-Core
• ブラウザ用仕様 ◦ Wasm Web API ◦ Wasm JS API • ブラウザ外仕様 ◦ Wasi (Web Assembly System Interface) https://webassembly.org/specs/ 今回はこれにフォーカスする
© 2012-2023 BASE, Inc. 26 WASI(Web Assembly System Interface) 任意のシステムで呼び出すための仕様
詳しくは https://hacks.mozilla.org/2019/03/stan dardizing-wasi-a-webassembly-system-i nterface/ Wasm Host System Wasi API Wasm Runtime • Wasm Runtime上ならどこでも動かすことができる ◦ 例) Wasmtime, NodeJS などなど
© 2012-2023 BASE, Inc. 27 呼び出し例 (NodeJS) https://nodejs.org/api/wasi.html
© 2012-2023 BASE, Inc. 28 Wasiで動くプログラムを 書いてみよう
© 2012-2023 BASE, Inc. 29 Wasmtimeとは • Rust製の軽量runtime • Bytecode
Alliance projectの1つ • Rust, Python, Go, .Net, C/C++ には埋め込み可能 ◦ 残念ながらPHPは未対応
© 2012-2023 BASE, Inc. 30 Bytecode Allianceとは https://nodejs.org/api/wasi.html • 様々なプラットフォームでWasmを実行できる基盤を作る団体
◦ ブラウザだけでなくIoTデバイスなどなど • インテル、Mozilla、Red Hat、Fastlyの4社が創立に関与 • ここのニュースを抑えておけばWasmの動向は大体わかる https://bytecodealliance.org/
© 2012-2023 BASE, Inc. 31 RustでWasmを作ってみる • エントリーポイント実行でハロー ワールドが出力される •
モジュールとして2つのintを足して 返却する関数を定義 • WasmはI/Fで数値しか扱えない。 文字列扱い場合は工夫が必要 ◦ build時のglueコードを使うという 手がある
© 2012-2023 BASE, Inc. 32 Wasi用Wasmへコンパイルする • targetをwasm32-wasiにする • Wasi用のwasmが生成される
© 2012-2023 BASE, Inc. 33 呼び出し例 (Wasmtime) https://nodejs.org/api/wasi.html 実行 インストール
© 2012-2023 BASE, Inc. 34 呼び出し例 (Go with Wasmtime)
© 2012-2023 BASE, Inc. 35 Wasmを使った開発のデバッグ方法 WebAssembly/wabt がおすすめ • WebAssembly
Binary Toolkitの略 • Wasmはbinaryファイルなので生成物の 把握が難しい。 • wabtを使って様座な角度からデバッグ することができる。 • 今回はWasmをWat (Wasm text format)に変換するwasm2watのみ扱 う。
© 2012-2023 BASE, Inc. 36 wasm2watを使ってみる • 事前にCMAKEをインストールしておく 必要はある。 •
build後はよしなにpathを通しておく必 要がある • 基本的にはlinux/macで使う前提 ビルドする wasm2watを実行する
© 2012-2023 BASE, Inc. 37 WasmファイルをWatに ファイルの中身を抜粋 • WatはWasmと相互変換が可能 •
WatはLISPでおなじみのS式という表現 • main関数は引数なしでintが返却される • add関数は引数2つでintが返却される • 内部的使われるシンボル定義も見えたりする 詳しくはWebAssembly テキスト形式の理解を参照 ください。 https://developer.mozilla.org/ja/docs/WebAssembly/Understanding_the_text_format
© 2012-2023 BASE, Inc. 38 PHPerにとってのWasm
© 2012-2023 BASE, Inc. 39 Wasmの可能性は無限大 nginxで呼び出せるようになったり
© 2012-2023 BASE, Inc. 40 Wasmの可能性は無限大 Wasi用build対応RFCも https://github.com/php/php-src/pull/10457
© 2012-2023 BASE, Inc. 41 ブラウザ上でPHPが動いたり https://php-play.dev
© 2012-2023 BASE, Inc. 42 Wasmの可能性 • どこでも動く軽量スクリプト • 軽量ランタイム
• 言語を跨いだライブラリ
© 2012-2023 BASE, Inc. 43 Wasmの可能性 • どこでも動く軽量スクリプト • 軽量ランタイム
• 言語を跨いだライブラリ
© 2012-2023 BASE, Inc. 44 どこでも動く軽量スクリプト • luaがやりたかったこと ◦ nginx-lua
◦ Redis lua ◦ etc.. • ファイルアクセスやホスト側とのデータのやりとりに 課題が多いが、Cとかの資産を活かすことができる • 文字列が扱いずらい点は結構つらいので今後に期待
© 2012-2023 BASE, Inc. 45 api7/wasm-nginx-module https://github.com/api7/wasm-nginx-module 現在開発中。envoyプロジェクトで発端で策定されたwasm + proxyの仕様
のnginx上の実装。
© 2012-2023 BASE, Inc. 46 Redis + Wasm https://github.com/redis-rs/redis-rs/issues/508 現在提案がある形ではあるが、luaの代替えとして検討が進んでそう。
© 2012-2023 BASE, Inc. 47 Wasmの可能性 • どこでも動く軽量スクリプト • 軽量ランタイム
• 言語を跨いだライブラリ
© 2012-2023 BASE, Inc. 48 軽量ランタイム • 脱コンテナ ◦ Docker
Desktopのサポートが始まったり ◦ 昨今のCPUアーキテクチャ事情(ローカルと本番で異なる場合あり ◦ RuntimeにOSが必ずしも必要とは言えなくなってきた • エッジコンピューティング ◦ FaaSを求めている場合ホストOSは不要 ◦ 起動の軽量化が大事
© 2012-2023 BASE, Inc. 49 Wasmの可能性 • どこでも動く軽量スクリプト • 軽量ランタイム
• 言語を跨いだライブラリ
© 2012-2023 BASE, Inc. 50 言語を跨いだライブラリ • 複数のマイクロサービスを跨いだライブラリの作成 • バリデーションなどBEとFEで一貫性を持たせたい部分
の共通ロジック化 • OSSなどで各種言語への移植したい場合など
© 2012-2023 BASE, Inc. 51 まとめ
© 2012-2023 BASE, Inc. 52 まとめ Wasmの可能性は無限大
© 2012-2023 BASE, Inc. 53 まとめ Wasmと仲良くなりましょう
© 2012-2023 BASE, Inc. 54 まとめ • WasmはWebアプリのリッチ化で始まった技術 • バックエンド上の活用が増えてきた
• PHPが任意の言語上で動く未来も遠くないかも • Wasm(Wasi)の動向は要チェック
© 2012-2023 BASE, Inc. 55 宣伝
© 2012-2023 BASE, Inc. 56 宣伝その1 php-play.dev https://php-play.dev 最近 PHP
8.3入荷しました。機能追加のissueやDMお待ちしています
© 2012-2023 BASE, Inc. 57 宣伝その2「BASEからPHPerの挑戦状」 • スポンサーブースで 「BASEからのPHPerへの挑戦状」というクイズをします。 ぜひお越しください!PHP8.3ネタも用意しています。
「BASEからPHPerへの挑戦状」 に挑戦する方はQRコードをよみとってください! 挑戦してくださった方にはコーヒーパックをプレゼントします!
© 2012-2023 BASE, Inc. 58 フルサイクル開発やってます!! Go, Pythonも書いてます!! DM待ってます!! We
are hiring !!