Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPerにとってのWebAssemblyの可能性

glassmonenkey
October 08, 2023

 PHPerにとってのWebAssemblyの可能性

#phpcon 2023で登壇してきました
https://phpcon.php.gr.jp/2023/

glassmonenkey

October 08, 2023
Tweet

More Decks by glassmonenkey

Other Decks in Technology

Transcript

  1. © 2012-2023 BASE, Inc. 1 PHP Conference 2023 BASE株式会社 永野

    峻輔 ( @glassmonekey ) PHPerにとっての WebAssemblyの可能性
  2. © 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 永野 峻輔 (ながの しゅんすけ) 昨日ディズニーで全身バキバキ...
  3. © 2012-2023 BASE, Inc. 4 1 2 3 Wasmとは Wasmを使って実装してみる

    PHPerにとってのWasmの可能性 今日話すこと
  4. © 2012-2023 BASE, Inc. 17 JavaScript + Wasm WebAssembly: How

    and why https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71/ WASMはJSの一部の代替え
  5. © 2012-2023 BASE, Inc. 23 Wasmの特徴 • 移植性 ◦ 任意の言語でWebAssemblyにbuildできたら良い

    • セキュア ◦ Runtimeが隔離(Sandbox化)されているのでセキュア Wasm Host System Wasi API Wasm Runtime
  6. © 2012-2023 BASE, Inc. 24 Wasmと仕様 • 基本仕様 ◦ Wasm-Core

    • ブラウザ用仕様 ◦ Wasm Web API ◦ Wasm JS API • ブラウザ外仕様 ◦ Wasi (Web Assembly System Interface) https://webassembly.org/specs/ それぞれ別物!!
  7. © 2012-2023 BASE, Inc. 25 Wasmと仕様 • 基本仕様 ◦ Wasm-Core

    • ブラウザ用仕様 ◦ Wasm Web API ◦ Wasm JS API • ブラウザ外仕様 ◦ Wasi (Web Assembly System Interface) https://webassembly.org/specs/ 今回はこれにフォーカスする
  8. © 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 などなど
  9. © 2012-2023 BASE, Inc. 29 Wasmtimeとは • Rust製の軽量runtime • Bytecode

    Alliance projectの1つ • Rust, Python, Go, .Net, C/C++ には埋め込み可能 ◦ 残念ながらPHPは未対応
  10. © 2012-2023 BASE, Inc. 30 Bytecode Allianceとは https://nodejs.org/api/wasi.html • 様々なプラットフォームでWasmを実行できる基盤を作る団体

    ◦ ブラウザだけでなくIoTデバイスなどなど • インテル、Mozilla、Red Hat、Fastlyの4社が創立に関与 • ここのニュースを抑えておけばWasmの動向は大体わかる https://bytecodealliance.org/
  11. © 2012-2023 BASE, Inc. 31 RustでWasmを作ってみる • エントリーポイント実行でハロー ワールドが出力される •

    モジュールとして2つのintを足して 返却する関数を定義 • WasmはI/Fで数値しか扱えない。 文字列扱い場合は工夫が必要 ◦ build時のglueコードを使うという 手がある
  12. © 2012-2023 BASE, Inc. 35 Wasmを使った開発のデバッグ方法 WebAssembly/wabt がおすすめ • WebAssembly

    Binary Toolkitの略 • Wasmはbinaryファイルなので生成物の 把握が難しい。 • wabtを使って様座な角度からデバッグ することができる。 • 今回はWasmをWat (Wasm text format)に変換するwasm2watのみ扱 う。
  13. © 2012-2023 BASE, Inc. 36 wasm2watを使ってみる • 事前にCMAKEをインストールしておく 必要はある。 •

    build後はよしなにpathを通しておく必 要がある • 基本的にはlinux/macで使う前提 ビルドする wasm2watを実行する
  14. © 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
  15. © 2012-2023 BASE, Inc. 44 どこでも動く軽量スクリプト • luaがやりたかったこと ◦ nginx-lua

    ◦ Redis lua ◦ etc.. • ファイルアクセスやホスト側とのデータのやりとりに 課題が多いが、Cとかの資産を活かすことができる • 文字列が扱いずらい点は結構つらいので今後に期待
  16. © 2012-2023 BASE, Inc. 48 軽量ランタイム • 脱コンテナ ◦ Docker

    Desktopのサポートが始まったり ◦ 昨今のCPUアーキテクチャ事情(ローカルと本番で異なる場合あり ◦ RuntimeにOSが必ずしも必要とは言えなくなってきた • エッジコンピューティング ◦ FaaSを求めている場合ホストOSは不要 ◦ 起動の軽量化が大事
  17. © 2012-2023 BASE, Inc. 54 まとめ • WasmはWebアプリのリッチ化で始まった技術 • バックエンド上の活用が増えてきた

    • PHPが任意の言語上で動く未来も遠くないかも • Wasm(Wasi)の動向は要チェック
  18. © 2012-2023 BASE, Inc. 56 宣伝その1 php-play.dev https://php-play.dev 最近 PHP

    8.3入荷しました。機能追加のissueやDMお待ちしています
  19. © 2012-2023 BASE, Inc. 57 宣伝その2「BASEからPHPerの挑戦状」 • スポンサーブースで 「BASEからのPHPerへの挑戦状」というクイズをします。 ぜひお越しください!PHP8.3ネタも用意しています。

    「BASEからPHPerへの挑戦状」 に挑戦する方はQRコードをよみとってください! 挑戦してくださった方にはコーヒーパックをプレゼントします!