#phpcon 2023で登壇してきました https://phpcon.php.gr.jp/2023/
© 2012-2023 BASE, Inc. 1PHP Conference 2023BASE株式会社 永野 峻輔 ( @glassmonekey )PHPerにとってのWebAssemblyの可能性
View Slide
© 2012-2023 BASE, Inc. 2自己紹介所属BASE 株式会社 BASE BANKチーム Engineering Program Manager資金調達プロダクト「YELL BANK」の開発責任者やってます。Go, PHP, Pythonを書きつつ時々データエンジニアも。趣味個人開発最近は日帰り温泉とかも SNSX(Twitter): @glassmonekey Github: https://github.com/glassmonkey永野 峻輔 (ながの しゅんすけ)昨日ディズニーで全身バキバキ...
© 2012-2023 BASE, Inc. 3このトークの目的● WebAssemblyの基本的な理解● PHPerがWebAssembly(Wasm)と仲良くなること
© 2012-2023 BASE, Inc. 4123WasmとはWasmを使って実装してみるPHPerにとってのWasmの可能性今日話すこと
© 2012-2023 BASE, Inc. 5Wasm触ったことある人✋
© 2012-2023 BASE, Inc. 6Wasmを業務で使ったことがある人✋
© 2012-2023 BASE, Inc. 7ぜひ帰ったら遊んでみてください
© 2012-2023 BASE, Inc. 8Wasm とは
© 2012-2023 BASE, Inc. 9Wasmとは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.shLinuxを模倣したものhttps://webassembly.sh
© 2012-2023 BASE, Inc. 12例2 php-play.devhttps://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. 15Webアプリのリッチ化
© 2012-2023 BASE, Inc. 16JavaScriptだけだと辛い● ブラウザゲーム(特に3D)● AR/VR● 画像処理… etc
© 2012-2023 BASE, Inc. 17JavaScript + WasmWebAssembly: How and whyhttps://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71/WASMはJSの一部の代替え
© 2012-2023 BASE, Inc. 18導入事例から見るWasmhttps://madewithwebassembly.com/
© 2012-2023 BASE, Inc. 191Password● 入力解析部分で主な改善● Chromeで最大13倍、Firefoxだと39倍 https://blog.1password.com/1password-x-may-2019-update/
© 2012-2023 BASE, Inc. 20TensorFlow● パフォーマンス向上(約10倍)● 機械学習のようなCPUなどのリソースを酷使する場合とは相性が良いhttps://yashints.dev/blog/2019/12/17/tfjs-wasm
© 2012-2023 BASE, Inc. 21Wasmの特徴
© 2012-2023 BASE, Inc. 22Web Assemblyとは(2回目)Webブラウザを含む実行環境でコード実行とコンパクトなコード表現を実現するバイナリ形式https://developer.mozilla.org/ja/docs/WebAssembly/Concepts
© 2012-2023 BASE, Inc. 23Wasmの特徴● 移植性○ 任意の言語でWebAssemblyにbuildできたら良い● セキュア○ Runtimeが隔離(Sandbox化)されているのでセキュアWasmHost SystemWasi APIWasm Runtime
© 2012-2023 BASE, Inc. 24Wasmと仕様● 基本仕様○ Wasm-Core● ブラウザ用仕様○ Wasm Web API○ Wasm JS API● ブラウザ外仕様○ Wasi (Web Assembly System Interface)https://webassembly.org/specs/それぞれ別物!!
© 2012-2023 BASE, Inc. 25Wasmと仕様● 基本仕様○ Wasm-Core● ブラウザ用仕様○ Wasm Web API○ Wasm JS API● ブラウザ外仕様○ Wasi (Web Assembly System Interface)https://webassembly.org/specs/今回はこれにフォーカスする
© 2012-2023 BASE, Inc. 26WASI(Web Assembly System Interface)任意のシステムで呼び出すための仕様詳しくはhttps://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/WasmHost SystemWasi APIWasm Runtime● Wasm Runtime上ならどこでも動かすことができる○ 例) Wasmtime, NodeJS などなど
© 2012-2023 BASE, Inc. 27呼び出し例 (NodeJS)https://nodejs.org/api/wasi.html
© 2012-2023 BASE, Inc. 28Wasiで動くプログラムを書いてみよう
© 2012-2023 BASE, Inc. 29Wasmtimeとは● Rust製の軽量runtime● Bytecode Alliance projectの1つ● Rust, Python, Go, .Net, C/C++ には埋め込み可能○ 残念ながらPHPは未対応
© 2012-2023 BASE, Inc. 30Bytecode Allianceとはhttps://nodejs.org/api/wasi.html● 様々なプラットフォームでWasmを実行できる基盤を作る団体○ ブラウザだけでなくIoTデバイスなどなど● インテル、Mozilla、Red Hat、Fastlyの4社が創立に関与● ここのニュースを抑えておけばWasmの動向は大体わかるhttps://bytecodealliance.org/
© 2012-2023 BASE, Inc. 31RustでWasmを作ってみる● エントリーポイント実行でハローワールドが出力される● モジュールとして2つのintを足して返却する関数を定義● WasmはI/Fで数値しか扱えない。文字列扱い場合は工夫が必要○ build時のglueコードを使うという手がある
© 2012-2023 BASE, Inc. 32Wasi用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. 35Wasmを使った開発のデバッグ方法WebAssembly/wabt がおすすめ● WebAssembly Binary Toolkitの略● Wasmはbinaryファイルなので生成物の把握が難しい。● wabtを使って様座な角度からデバッグすることができる。● 今回はWasmをWat (Wasm textformat)に変換するwasm2watのみ扱う。
© 2012-2023 BASE, Inc. 36wasm2watを使ってみる● 事前にCMAKEをインストールしておく必要はある。● build後はよしなにpathを通しておく必要がある● 基本的にはlinux/macで使う前提ビルドするwasm2watを実行する
© 2012-2023 BASE, Inc. 37Wasmファイルを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. 38PHPerにとってのWasm
© 2012-2023 BASE, Inc. 39Wasmの可能性は無限大nginxで呼び出せるようになったり
© 2012-2023 BASE, Inc. 40Wasmの可能性は無限大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. 42Wasmの可能性● どこでも動く軽量スクリプト● 軽量ランタイム● 言語を跨いだライブラリ
© 2012-2023 BASE, Inc. 43Wasmの可能性● どこでも動く軽量スクリプト● 軽量ランタイム● 言語を跨いだライブラリ
© 2012-2023 BASE, Inc. 44どこでも動く軽量スクリプト● luaがやりたかったこと○ nginx-lua○ Redis lua○ etc..● ファイルアクセスやホスト側とのデータのやりとりに課題が多いが、Cとかの資産を活かすことができる● 文字列が扱いずらい点は結構つらいので今後に期待
© 2012-2023 BASE, Inc. 45api7/wasm-nginx-modulehttps://github.com/api7/wasm-nginx-module現在開発中。envoyプロジェクトで発端で策定されたwasm + proxyの仕様のnginx上の実装。
© 2012-2023 BASE, Inc. 46Redis + Wasmhttps://github.com/redis-rs/redis-rs/issues/508現在提案がある形ではあるが、luaの代替えとして検討が進んでそう。
© 2012-2023 BASE, Inc. 47Wasmの可能性● どこでも動く軽量スクリプト● 軽量ランタイム● 言語を跨いだライブラリ
© 2012-2023 BASE, Inc. 48軽量ランタイム● 脱コンテナ○ Docker Desktopのサポートが始まったり○ 昨今のCPUアーキテクチャ事情(ローカルと本番で異なる場合あり○ RuntimeにOSが必ずしも必要とは言えなくなってきた● エッジコンピューティング○ FaaSを求めている場合ホストOSは不要○ 起動の軽量化が大事
© 2012-2023 BASE, Inc. 49Wasmの可能性● どこでも動く軽量スクリプト● 軽量ランタイム● 言語を跨いだライブラリ
© 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.devhttps://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 !!