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
glassmonenkey
October 08, 2023
Technology
1.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPerにとってのWebAssemblyの可能性
#phpcon 2023で登壇してきました
https://phpcon.php.gr.jp/2023/
glassmonenkey
October 08, 2023
More Decks by glassmonenkey
See All by glassmonenkey
TypeScript で WebAssembly を用いた 型安全なプラグイン設計
nagano
2
560
encoding/json/v2で何が変わるか
nagano
14
5.2k
アジャイルテストの4象限で考える プロダクト開発の品質への向き合い方
nagano
1
2.5k
パッケージ管理ツール Ryeへの旅路
nagano
1
640
PHPをブラウザで動かす技術
nagano
0
2.9k
PHPとWebAssembly
nagano
19
6.6k
アジャイルで始める データ分析基盤構築
nagano
1
3.8k
Goで始めるTDD
nagano
1
3.1k
Python製の姓名分割 ライブラリをGoに移植した話
nagano
0
1.7k
Other Decks in Technology
See All in Technology
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
0
150
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.6k
AI Driven AI Governance
pict3
0
330
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
2
720
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
0
140
Claude Code 珍プレー好プレー
shinyasaita
0
320
SRE Next 2026 何でも屋からの脱却
bto
0
620
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
2
3.8k
cccccc
moznion
0
1.9k
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
120
生成AIの活用/high_school2026
okana2ki
0
130
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
2.6k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The Spectacular Lies of Maps
axbom
PRO
1
850
YesSQL, Process and Tooling at Scale
rocio
174
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Six Lessons from altMBA
skipperchong
29
4.3k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
800
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
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 !!