Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHPerにとってのWebAssemblyの可能性
Search
glassmonenkey
October 08, 2023
Technology
1.7k
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
670
encoding/json/v2で何が変わるか
nagano
14
5.9k
アジャイルテストの4象限で考える プロダクト開発の品質への向き合い方
nagano
1
2.7k
パッケージ管理ツール Ryeへの旅路
nagano
1
660
PHPをブラウザで動かす技術
nagano
0
3k
PHPとWebAssembly
nagano
19
6.8k
アジャイルで始める データ分析基盤構築
nagano
1
3.8k
Goで始めるTDD
nagano
1
3.1k
Python製の姓名分割 ライブラリをGoに移植した話
nagano
0
1.8k
Other Decks in Technology
See All in Technology
アカウント統制の健康診断
kenichinakamura
1
190
「エーアイ」をバズワードにしないために RPA 導入経験と Kiro 上での Claude モデル利用経験から
kazzpapa3
0
120
reInvent2026stby LT00 "Change your life!"
shinichirokawano
1
270
「作れる」と「リリースできる」の間にあったもの── PdMを外して見えた、PdMがやるべき仕事/Buildable ≠ Shippable: What Removing the PM Taught Me About the PM’s Job
yappli_developers
0
280
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
1k
[re:Invent2026事前勉強会(有志開催)]続きは、ラスベガスの廊下で / continue-in-the-vegas-hallway
sh_fk2
0
240
Metadata - Section 2: Simple Metadata & Meta Tags
mohab1
0
140
生成AI時代、PMは事業責任者に進化するともっと面白い〜PMだからこそ事業構造を動かせる時代に〜
kakehashi
PRO
0
870
局所最適は悪ではない。壊れているのは指標です。量と質を同時に見る先行指標の設計
recruitengineers
PRO
2
1.2k
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
540
Codex を使った障害対応机上演習の実際
orgachem
PRO
0
360
「私が一番顧客に詳しい」を捨てる~ 全員が一次情報に精通する開発チームをつくり、PMが次のボトルネックへ染み出すまで
kaminashi
4
2.4k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
370
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
610
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.8k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Paper Plane (Part 1)
katiecoart
PRO
2
12k
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 !!