PHPerにとってのWebAssemblyの可能性
by
glassmonenkey
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
© 2012-2023 BASE, Inc. 1 PHP Conference 2023 BASE株式会社 永野 峻輔 ( @glassmonekey ) PHPerにとっての WebAssemblyの可能性
Slide 2
Slide 2 text
© 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 永野 峻輔 (ながの しゅんすけ) 昨日ディズニーで全身バキバキ...
Slide 3
Slide 3 text
© 2012-2023 BASE, Inc. 3 このトークの目的 ● WebAssemblyの基本的な理解 ● PHPerがWebAssembly(Wasm)と仲良くなること
Slide 4
Slide 4 text
© 2012-2023 BASE, Inc. 4 1 2 3 Wasmとは Wasmを使って実装してみる PHPerにとってのWasmの可能性 今日話すこと
Slide 5
Slide 5 text
© 2012-2023 BASE, Inc. 5 Wasm触ったことある人 ✋
Slide 6
Slide 6 text
© 2012-2023 BASE, Inc. 6 Wasmを 業務で使ったことがある人✋
Slide 7
Slide 7 text
© 2012-2023 BASE, Inc. 7 ぜひ帰ったら遊んでみてください
Slide 8
Slide 8 text
© 2012-2023 BASE, Inc. 8 Wasm とは
Slide 9
Slide 9 text
© 2012-2023 BASE, Inc. 9 Wasmとは Webブラウザを含む実行環境で コード実行とコンパクトなコード表現を実現するバイナリ形式 https://developer.mozilla.org/ja/docs/WebAssembly/Concepts
Slide 10
Slide 10 text
© 2012-2023 BASE, Inc. 10 対応状況 https://developer.mozilla.org/ja/docs/WebAssembly モダンな環境なら基本動く
Slide 11
Slide 11 text
© 2012-2023 BASE, Inc. 11 例1 webassembly.sh Linuxを模倣したもの https://webassembly.sh
Slide 12
Slide 12 text
© 2012-2023 BASE, Inc. 12 例2 php-play.dev https://php-play.dev 最近 PHP 8.3入荷しました。寄付待ってます!!
Slide 13
Slide 13 text
© 2012-2023 BASE, Inc. 13 詳細はblogや過去slideで https://speakerdeck.com/nagano/phpwoburauzadedong-kasuji-shu https://zenn.dev/glassmonkey/articles/ae6cadef80c6c4
Slide 14
Slide 14 text
© 2012-2023 BASE, Inc. 14 なぜ Wasm なのか
Slide 15
Slide 15 text
© 2012-2023 BASE, Inc. 15 Webアプリのリッチ化
Slide 16
Slide 16 text
© 2012-2023 BASE, Inc. 16 JavaScriptだけだと辛い ● ブラウザゲーム(特に3D) ● AR/VR ● 画像処理 … etc
Slide 17
Slide 17 text
© 2012-2023 BASE, Inc. 17 JavaScript + Wasm WebAssembly: How and why https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71/ WASMはJSの一部の代替え
Slide 18
Slide 18 text
© 2012-2023 BASE, Inc. 18 導入事例から見るWasm https://madewithwebassembly.com/
Slide 19
Slide 19 text
© 2012-2023 BASE, Inc. 19 1Password ● 入力解析部分で主な改善 ● Chromeで最大13倍、Firefoxだと39倍 https://blog.1password.com/1password-x-may-2019-update/
Slide 20
Slide 20 text
© 2012-2023 BASE, Inc. 20 TensorFlow ● パフォーマンス向上(約10倍) ● 機械学習のようなCPUなどのリソースを酷使する場合とは相性が良い https://yashints.dev/blog/2019/12/17/tfjs-wasm
Slide 21
Slide 21 text
© 2012-2023 BASE, Inc. 21 Wasmの特徴
Slide 22
Slide 22 text
© 2012-2023 BASE, Inc. 22 Web Assemblyとは(2回目) Webブラウザを含む実行環境で コード実行とコンパクトなコード表現を実現するバイナリ形式 https://developer.mozilla.org/ja/docs/WebAssembly/Concepts
Slide 23
Slide 23 text
© 2012-2023 BASE, Inc. 23 Wasmの特徴 ● 移植性 ○ 任意の言語でWebAssemblyにbuildできたら良い ● セキュア ○ Runtimeが隔離(Sandbox化)されているのでセキュア Wasm Host System Wasi API Wasm Runtime
Slide 24
Slide 24 text
© 2012-2023 BASE, Inc. 24 Wasmと仕様 ● 基本仕様 ○ Wasm-Core ● ブラウザ用仕様 ○ Wasm Web API ○ Wasm JS API ● ブラウザ外仕様 ○ Wasi (Web Assembly System Interface) https://webassembly.org/specs/ それぞれ別物!!
Slide 25
Slide 25 text
© 2012-2023 BASE, Inc. 25 Wasmと仕様 ● 基本仕様 ○ Wasm-Core ● ブラウザ用仕様 ○ Wasm Web API ○ Wasm JS API ● ブラウザ外仕様 ○ Wasi (Web Assembly System Interface) https://webassembly.org/specs/ 今回はこれにフォーカスする
Slide 26
Slide 26 text
© 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 などなど
Slide 27
Slide 27 text
© 2012-2023 BASE, Inc. 27 呼び出し例 (NodeJS) https://nodejs.org/api/wasi.html
Slide 28
Slide 28 text
© 2012-2023 BASE, Inc. 28 Wasiで動くプログラムを 書いてみよう
Slide 29
Slide 29 text
© 2012-2023 BASE, Inc. 29 Wasmtimeとは ● Rust製の軽量runtime ● Bytecode Alliance projectの1つ ● Rust, Python, Go, .Net, C/C++ には埋め込み可能 ○ 残念ながらPHPは未対応
Slide 30
Slide 30 text
© 2012-2023 BASE, Inc. 30 Bytecode Allianceとは https://nodejs.org/api/wasi.html ● 様々なプラットフォームでWasmを実行できる基盤を作る団体 ○ ブラウザだけでなくIoTデバイスなどなど ● インテル、Mozilla、Red Hat、Fastlyの4社が創立に関与 ● ここのニュースを抑えておけばWasmの動向は大体わかる https://bytecodealliance.org/
Slide 31
Slide 31 text
© 2012-2023 BASE, Inc. 31 RustでWasmを作ってみる ● エントリーポイント実行でハロー ワールドが出力される ● モジュールとして2つのintを足して 返却する関数を定義 ● WasmはI/Fで数値しか扱えない。 文字列扱い場合は工夫が必要 ○ build時のglueコードを使うという 手がある
Slide 32
Slide 32 text
© 2012-2023 BASE, Inc. 32 Wasi用Wasmへコンパイルする ● targetをwasm32-wasiにする ● Wasi用のwasmが生成される
Slide 33
Slide 33 text
© 2012-2023 BASE, Inc. 33 呼び出し例 (Wasmtime) https://nodejs.org/api/wasi.html 実行 インストール
Slide 34
Slide 34 text
© 2012-2023 BASE, Inc. 34 呼び出し例 (Go with Wasmtime)
Slide 35
Slide 35 text
© 2012-2023 BASE, Inc. 35 Wasmを使った開発のデバッグ方法 WebAssembly/wabt がおすすめ ● WebAssembly Binary Toolkitの略 ● Wasmはbinaryファイルなので生成物の 把握が難しい。 ● wabtを使って様座な角度からデバッグ することができる。 ● 今回はWasmをWat (Wasm text format)に変換するwasm2watのみ扱 う。
Slide 36
Slide 36 text
© 2012-2023 BASE, Inc. 36 wasm2watを使ってみる ● 事前にCMAKEをインストールしておく 必要はある。 ● build後はよしなにpathを通しておく必 要がある ● 基本的にはlinux/macで使う前提 ビルドする wasm2watを実行する
Slide 37
Slide 37 text
© 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
Slide 38
Slide 38 text
© 2012-2023 BASE, Inc. 38 PHPerにとってのWasm
Slide 39
Slide 39 text
© 2012-2023 BASE, Inc. 39 Wasmの可能性は無限大 nginxで呼び出せるようになったり
Slide 40
Slide 40 text
© 2012-2023 BASE, Inc. 40 Wasmの可能性は無限大 Wasi用build対応RFCも https://github.com/php/php-src/pull/10457
Slide 41
Slide 41 text
© 2012-2023 BASE, Inc. 41 ブラウザ上でPHPが動いたり https://php-play.dev
Slide 42
Slide 42 text
© 2012-2023 BASE, Inc. 42 Wasmの可能性 ● どこでも動く軽量スクリプト ● 軽量ランタイム ● 言語を跨いだライブラリ
Slide 43
Slide 43 text
© 2012-2023 BASE, Inc. 43 Wasmの可能性 ● どこでも動く軽量スクリプト ● 軽量ランタイム ● 言語を跨いだライブラリ
Slide 44
Slide 44 text
© 2012-2023 BASE, Inc. 44 どこでも動く軽量スクリプト ● luaがやりたかったこと ○ nginx-lua ○ Redis lua ○ etc.. ● ファイルアクセスやホスト側とのデータのやりとりに 課題が多いが、Cとかの資産を活かすことができる ● 文字列が扱いずらい点は結構つらいので今後に期待
Slide 45
Slide 45 text
© 2012-2023 BASE, Inc. 45 api7/wasm-nginx-module https://github.com/api7/wasm-nginx-module 現在開発中。envoyプロジェクトで発端で策定されたwasm + proxyの仕様 のnginx上の実装。
Slide 46
Slide 46 text
© 2012-2023 BASE, Inc. 46 Redis + Wasm https://github.com/redis-rs/redis-rs/issues/508 現在提案がある形ではあるが、luaの代替えとして検討が進んでそう。
Slide 47
Slide 47 text
© 2012-2023 BASE, Inc. 47 Wasmの可能性 ● どこでも動く軽量スクリプト ● 軽量ランタイム ● 言語を跨いだライブラリ
Slide 48
Slide 48 text
© 2012-2023 BASE, Inc. 48 軽量ランタイム ● 脱コンテナ ○ Docker Desktopのサポートが始まったり ○ 昨今のCPUアーキテクチャ事情(ローカルと本番で異なる場合あり ○ RuntimeにOSが必ずしも必要とは言えなくなってきた ● エッジコンピューティング ○ FaaSを求めている場合ホストOSは不要 ○ 起動の軽量化が大事
Slide 49
Slide 49 text
© 2012-2023 BASE, Inc. 49 Wasmの可能性 ● どこでも動く軽量スクリプト ● 軽量ランタイム ● 言語を跨いだライブラリ
Slide 50
Slide 50 text
© 2012-2023 BASE, Inc. 50 言語を跨いだライブラリ ● 複数のマイクロサービスを跨いだライブラリの作成 ● バリデーションなどBEとFEで一貫性を持たせたい部分 の共通ロジック化 ● OSSなどで各種言語への移植したい場合など
Slide 51
Slide 51 text
© 2012-2023 BASE, Inc. 51 まとめ
Slide 52
Slide 52 text
© 2012-2023 BASE, Inc. 52 まとめ Wasmの可能性は無限大
Slide 53
Slide 53 text
© 2012-2023 BASE, Inc. 53 まとめ Wasmと仲良くなりましょう
Slide 54
Slide 54 text
© 2012-2023 BASE, Inc. 54 まとめ ● WasmはWebアプリのリッチ化で始まった技術 ● バックエンド上の活用が増えてきた ● PHPが任意の言語上で動く未来も遠くないかも ● Wasm(Wasi)の動向は要チェック
Slide 55
Slide 55 text
© 2012-2023 BASE, Inc. 55 宣伝
Slide 56
Slide 56 text
© 2012-2023 BASE, Inc. 56 宣伝その1 php-play.dev https://php-play.dev 最近 PHP 8.3入荷しました。機能追加のissueやDMお待ちしています
Slide 57
Slide 57 text
© 2012-2023 BASE, Inc. 57 宣伝その2「BASEからPHPerの挑戦状」 ● スポンサーブースで 「BASEからのPHPerへの挑戦状」というクイズをします。 ぜひお越しください!PHP8.3ネタも用意しています。 「BASEからPHPerへの挑戦状」 に挑戦する方はQRコードをよみとってください! 挑戦してくださった方にはコーヒーパックをプレゼントします!
Slide 58
Slide 58 text
© 2012-2023 BASE, Inc. 58 フルサイクル開発やってます!! Go, Pythonも書いてます!! DM待ってます!! We are hiring !!