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
1.3k
PHPerにとってのWebAssemblyの可能性
#phpcon 2023で登壇してきました
https://phpcon.php.gr.jp/2023/
glassmonenkey
October 08, 2023
Tweet
Share
More Decks by glassmonenkey
See All by glassmonenkey
パッケージ管理ツール Ryeへの旅路
nagano
1
480
PHPをブラウザで動かす技術
nagano
0
2.2k
PHPとWebAssembly
nagano
19
5.1k
アジャイルで始める データ分析基盤構築
nagano
1
3.2k
Goで始めるTDD
nagano
1
2.8k
Python製の姓名分割 ライブラリをGoに移植した話
nagano
0
1.4k
PHPとGraphQL
nagano
3
5.5k
BASEの資金調達サービスを New Relicで楽に パフォーマンス改善できた話
nagano
0
1.4k
PHP Conference Japan 2021
nagano
1
1.9k
Other Decks in Technology
See All in Technology
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
650
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
アジャイルでの品質の進化 Agile in Motion vol.1/20241118 Hiroyuki Sato
shift_evolve
0
160
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
0
110
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
150
rootlessコンテナのすゝめ - 研究室サーバーでもできる安全なコンテナ管理
kitsuya0828
3
390
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
組織成長を加速させるオンボーディングの取り組み
sudoakiy
2
170
複雑なState管理からの脱却
sansantech
PRO
1
150
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1.1k
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
Featured
See All Featured
A Philosophy of Restraint
colly
203
16k
Done Done
chrislema
181
16k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Rails Girls Zürich Keynote
gr2m
94
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
96
Ruby is Unlike a Banana
tanoku
97
11k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Designing the Hi-DPI Web
ddemaree
280
34k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
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 !!