SlideShare a Scribd company logo
1 of 37
Download to read offline
フロントからバックエンドまで
— WebAssemblyで広がる可能性
YAMAMOTO Yuji (山本悠滋)
2020-12-16 IIJ Technical WEEK 2020 DAY 3
Copyright © 2020 IIJ Innovation Institute Inc.
はじめまして!
 山本悠滋 (@igrep)
 所属: IIJ-II 技術開発室
 趣味ではHaskeller歴約8年
Copyright © 2020 IIJ Innovation Institute Inc.
私とWebAssembly
 WASIが発表されたあたり(2019年の春頃)くらいから
WebAssemblyに強い関心が
 仕様を追いかけてみたり少しフィードバックしたり
 WebAssemblyを使った新しいウェブサービスを模索中
 趣味ではWebAssemblyをArm32にコンパイルするコンパイラー
をゆっくり開発
 先週WebAssembly nightというイベントで発表しました
Copyright © 2020 IIJ Innovation Institute Inc.
📝今日話すこと
 そもそもWebAssemblyとは
 現在のWebAssemblyの活躍
 なぜ安全か
 ウェブブラウザー以外における活躍
 これからの活躍
Copyright © 2020 IIJ Innovation Institute Inc.
そもそもWebAssemblyとは
 ウェブブラウザー上でJavaScriptのように(プラグインなしで)動
作させることを目的として作られた命令セットと、そのバイナリー
フォーマット
 2017年11月、主要な4つのウェブブラウザー(Chrome・Firefox・
Safari・旧Edge)がver. 1.0をサポート
 2019年12月、W3CによりHTML・CSS・JavaScriptに続く「ウェブ
ブラウザーで動く4つめの言語」として標準化
 World Wide Web Consortium (W3C) brings a new language to the Web
as WebAssembly becomes a W3C Recommendation
Copyright © 2020 IIJ Innovation Institute Inc.
現在のWebAssemblyの活躍
 Google Meet
 FFMPEG.WASM
 Blazor WebAssembly
 Showcase | Magnum Engine
Copyright © 2020 IIJ Innovation Institute Inc.
Google Meet
Google AI Blog: Background Features in Google Meet, Powered by
Web ML
 背景ぼかし機能の実装にWebAssemblyが!
 C++で書かれたGoogle製機械学習フレームワーク MediaPipe
をWebAssemblyにコンパイルして実現
 関連: WebAssemblyでの機械学習モデルデプロイの動向
Copyright © 2020 IIJ Innovation Institute Inc.
FFMPEG.WASM
https://ffmpegwasm.github.io/
 様々なコーデックを利用して動画や音声の変換ができるCLIツー
ル ffmpeg をWebAssemblyに移植!
 動画のエンコードなどが全部ウェブブラウザー上で完結!
Copyright © 2020 IIJ Innovation Institute Inc.
Blazor WebAssembly
https://docs.microsoft.com/ja-jp/aspnet/core/blazor/hosting-
models?view=aspnetcore-5.0
 ASP.NET Core Blazor: C#・F#向けウェブアプリケーションフレ
ームワーク
 クライアントもサーバーも概ねC#で書ける
 実行モデルを切り替えれば主要な処理をサーバーで実行したり
WebAssemblyで実行したりと切り替えられる
Copyright © 2020 IIJ Innovation Institute Inc.
Showcase | Magnum Engine
https://magnum.graphics/showcase/
 「Magnum Engine」というC++向けグラフィックスエンジンのサン
プル集
Copyright © 2020 IIJ Innovation Institute Inc.
なぜ安全か
 ホストのAPIからの分離
 ホストのデータからの分離
 index空間の分離
Copyright © 2020 IIJ Innovation Institute Inc.
なぜ安全か
用語
 ホスト: ウェブブラウザーなど、WebAssemblyを動作させること
ができるプログラム
 後述のとおりブラウザー以外でもWebAssemblyを動かすプログラムがある
 index空間: 配列の添え字(index)の集合
 e.g. 長さ50の配列であれば0から49までの50個のindexの集合
 「名前空間」の「名前」を文字列から整数に置き換えたバージョン
 WAT
 「WebAssembly Text Format」の略
 WebAssemblyはバイナリーフォーマットなので直接人間が読むのは難しい
ため、テキストファイルとして読めるよう翻訳したもの
 「普通の機械語」に対する「アセンブリー」と同じ役割
Copyright © 2020 IIJ Innovation Institute Inc.
ホストのデータからの分離
WebAssemblyでは
 原則: ホストのメモリーには勝手にアクセスできない!
 ホストとデータをやりとりしたくなったら
 Memoryオブジェクトが表す、割り当てられた専用の領域を使う
 ホスト側でサイズを指定して作って、WebAssemblyを呼ぶときに渡す
Copyright © 2020 IIJ Innovation Institute Inc.
ホストのデータからの分離
コード例 (WAT):
この行でMemoryをimportする必要が
あることを明示
Copyright © 2020 IIJ Innovation Institute Inc.
ホストのデータからの分離
コード例 (Node.js):
ここでMemoryを作って
ここでimport
ここで書き込み
出力: 7
Copyright © 2020 IIJ Innovation Institute Inc.
ホストのAPIからの分離
普通の機械語では
 リンクした関数やOSのシステムコールは原則どのモジュールも
呼べちゃう!
 あなたがダウンロードした悪質なプログラムが、意図しない関数
を呼ぶかも知れない!
※アセンブリーの内容に特に意味はありません
Copyright © 2020 IIJ Innovation Institute Inc.
ホストのAPIからの分離
WebAssemblyでは
 明示的にimportした外部の関数しか呼べない!
 何も明示しない限りは何もできない
 ※もう一つ、間接呼び出しを実現するためのTableという機能が
ありますが割愛
ここでimportした関数しか呼べない!
Copyright © 2020 IIJ Innovation Institute Inc.
index空間の分離
普通の機械語では
 概ねどこにでもジャン
プ(goto)できるように
作られている
 ※CPUによって細かい
制約はありますが
 😈プログラムに脆弱性
があると、攻撃者によ
ってジャンプ先を意図
しないアドレスに書き
換えられてしまう
※アセンブリーの内容に特に意味はありません
Copyright © 2020 IIJ Innovation Institute Inc.
index空間の分離
WebAssemblyでは
 関数呼び出しやブロッ
クを抜け出したいとき
に使う命令毎に「
index空間」が分かれ
ている
 図における(call
0)の0と(br 0)の0
は完全に別の配列へ
のindexとして解釈さ
れる
Copyright © 2020 IIJ Innovation Institute Inc.
index空間の分離
関数呼び出し命令callの場合
 callの引数に渡せるのは、関数専用のindexだけ!
 (func …)で定義した関数の他importした関数が含まれる
 関数専用のindex空間が区切られている
Copyright © 2020 IIJ Innovation Institute Inc.
index空間の分離
ブロックから抜け出す命令brの場合
 brに渡せるのは、brを囲っているブロックのうち、「内側から何
番目のブロックから抜け出すか」を表すindexのみ指定できる
 図ではbrしている箇所で3つのblockに囲われているので0, 1, 2のい
ずれか
Copyright © 2020 IIJ Innovation Institute Inc.
ウェブブラウザー以外における活躍
 PostgreSQL
 Envoy Proxy
 Krustlet
 WASI
Copyright © 2020 IIJ Innovation Institute Inc.
PostgreSQL
Announcing the first Postgres extension to run WebAssembly
 PostgreSQLのSQLからWebAssemblyで定義した関数が呼べ
る!
Copyright © 2020 IIJ Innovation Institute Inc.
Envoy Proxy
Istio / Redefining extensibility in proxies - introducing
WebAssembly to Envoy and Istio
 Microservice向けのプロキシサーバー
 「独自の認証・認可機構を使いたい」・「標準でサポートされてないプロトコル
を扱いたい」といったケースのために、拡張機能が
 従来:
 C++で拡張を書いて静的リンク
 => 速いけどリビルドが必要で気軽じゃない
 Mixerというアダプターにprotobufでメッセージを送る
 => 気軽だけど遅い
 WebAssemblyなら
 デプロイも簡単で動作も速い
 いろいろな言語をサポートできる
 一般化するために仕様も策定中:
 https://github.com/proxy-wasm
Copyright © 2020 IIJ Innovation Institute Inc.
Krustlet
What is Krustlet?
 KubernetesのノードとしてのWebAssembly処理系wasmtimeを
動かす
 Dockerのimageの代わりに、WebAssemblyのモジュールをとっ
てきてKubernetesクラスターにデプロイできる
Copyright © 2020 IIJ Innovation Institute Inc.
WASI
WASI: WebAssembly System Interface
 WebAssemblyがPOSIX風のAPIを利用できるようにするための
標準仕様
 importしない限りprintfとかopenとかが使えない!
 => importする関数の名前や型を決めましょう!
 WebAssemblyがアクセスできるファイル・ディレクトリーを制限す
る機能を提供することで、セキュリティーを保つ
 importしないとホストのAPIを利用できないのと同様に、ファイル・ディレク
トリーにもホストが明示的な許可を与える仕組みを
Copyright © 2020 IIJ Innovation Institute Inc.
これからの活躍
 Docker v.s. WebAssembly
 Shopify
 Flash Playerの移植
 まだまだパーツが足りない
 WASIのさらなる発展
 他の言語処理系を埋め込みやすく
 ホストとの連携を強める
Copyright © 2020 IIJ Innovation Institute Inc.
Docker v.s. WebAssembly
DockerのCo-founder, Solomon HykesさんのTwitterでの発言
 「2008年にWebAssemblyとWASIがあれば、Dockerを作る必要
はなかっただろう」
 Krustletのような仕組みが発達すれば、コンテナーの代わりに
WebAssemblyという時代が来る?
Copyright © 2020 IIJ Innovation Institute Inc.
Shopify
Making Commerce Extensible with WebAssembly, Mitch Dickinson
- YouTube
 テナントのいろいろな要求をテナント側のコードで実現するため
に、Shopifyのサーバーで動くWebAssemblyによるプラグイン機
構を構築中
 Web APIで実現するよりも高速!
Copyright © 2020 IIJ Innovation Institute Inc.
Flash Playerの移植
ruffle-rs/ruffle: A Flash Player emulator written in Rust
 2020年末(もうすぐ!)サポートが終了するFlash Player
 Flashの資産をなくさないためWebAssemblyでエミュレート!
 WebAssemblyでできること以上のことはできないので、あらゆる
Flashが動くわけではないはず
 危険なFlashが動く可能性がその分低いということ!
Copyright © 2020 IIJ Innovation Institute Inc.
まだまだパーツが足りない
 「活躍」とはいったものの、実験的なものが大半で、広く使われる
には至っていない
 CやC++, Rustなど以外の言語を動かすとWebAssemblyのサイ
ズが膨らんでしまったり、
 ホストとWebAssembly間のデータの受け渡しが煩雑だったり、
など多くの問題が
Copyright © 2020 IIJ Innovation Institute Inc.
WASIのさらなる発展
 現状はファイルシステムや乱数、環境変数やコマンドライン引数
の処理が中心
 ソケットに接続したり、リッスンするAPIは策定中!
 feat(socket): berkeley socket API by 3miliano ꞏ Pull Request #312 ꞏ
WebAssembly/WASI
Copyright © 2020 IIJ Innovation Institute Inc.
他の言語処理系を埋め込みやすくする
 Exception
 Exception handling
 例外のcatch/throw
 GC
 GC Extension
 ガーベージコレクター。多くのプログラミング言語における縁の下の力持ち
 これらの機能が追加されることで、これらの機能が必要な言語を
WebAssemblyにし安く!
Copyright © 2020 IIJ Innovation Institute Inc.
ホストとの連携を強める: reference-types
WebAssembly Reference Types in Wasmtime
 externrefという「演算はできないポインターのようなもの」を表
す特殊な型が追加
 e.g. ウェブページにおけるElementへの参照
 importしたホストのAPIをWebAssemblyでラップできるように!
 FirefoxやWasmtimeが実装済み!
Copyright © 2020 IIJ Innovation Institute Inc.
ホストとの連携を強める: interface types
Interface Types Proposal
 WebAssemblyは整数や浮動小数点数(と、前述のexternref)しか
扱えない
 例えば文字列を扱おうと思ったら、一旦Memoryに書き込んだあと、アドレス
を整数として渡す必要が
 => 面倒なボイラープレートに!
 型宣言と、型の値を相互変換する際の仕様を標準化!
 => WebAssembly製の関数があたかも文字列などを直接扱えるかのように
見せるラッパーを提供
Copyright © 2020 IIJ Innovation Institute Inc.
まとめ
 WebAssemblyは、ウェブブラウザーだけでなく、様々な種類の
アプリケーションにおける拡張機構としての役割が期待されてい
る
 脆弱なWebAssemblyを実行してもユーザーに悪影響がないよう
に、工夫が凝らされた仕様となっている
 まだまだ足りない機能がたくさんあるので、更なる追加機能が検
討されている
 もっと多くのプログラミング言語をWebAssemblyで実装しやすくなって、
 もっと簡単にホストと連携できるようになりそう
Copyright © 2020 IIJ Innovation Institute Inc.
参考(言及していないもののみ)
 C#でSPAが実現できる、Blazor WebAssemblyのはじめかた
(1/3):CodeZine(コードジン)
 Istioldie 1.6 / Mixer Configuration Model (Deprecated)
 Istioldie 1.6 / Mixer Adapter Model
 Proxy-Wasm: Wasmを利用したPlugin機構の開発
 Control Flow Integrity (CFI) | Karamba Security
 たのしいバイナリの歩き方
 Security - WebAssembly
 Memory in WebAssembly (and why it’s safer than you think)
- Mozilla Hacks - the Web developer blog
 krustlet/architecture.md at master ꞏ deislabs/krustlet
 Bytecode Alliance

More Related Content

What's hot

AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~Daisuke Ikeda
 
Ansible AWXを導入してみた
Ansible AWXを導入してみたAnsible AWXを導入してみた
Ansible AWXを導入してみたsugoto
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンseiichi arai
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
AWS WAF のマネージドルールって結局どれを選べばいいの?
AWS WAF のマネージドルールって結局どれを選べばいいの?AWS WAF のマネージドルールって結局どれを選べばいいの?
AWS WAF のマネージドルールって結局どれを選べばいいの?YOJI WATANABE
 
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用Amazon Web Services Japan
 
KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢Naoyuki Yamada
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるMasatoshi Tada
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみるDevelopers Summit
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみたShoya Kai
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テストTakahiro Moteki
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppTomomitsuKusaba
 
いまさら、AWSのネットワーク設計
いまさら、AWSのネットワーク設計いまさら、AWSのネットワーク設計
いまさら、AWSのネットワーク設計Serverworks Co.,Ltd.
 

What's hot (20)

AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
 
Ansible AWXを導入してみた
Ansible AWXを導入してみたAnsible AWXを導入してみた
Ansible AWXを導入してみた
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
AWS WAF のマネージドルールって結局どれを選べばいいの?
AWS WAF のマネージドルールって結局どれを選べばいいの?AWS WAF のマネージドルールって結局どれを選べばいいの?
AWS WAF のマネージドルールって結局どれを選べばいいの?
 
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
 
KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみた
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor App
 
いまさら、AWSのネットワーク設計
いまさら、AWSのネットワーク設計いまさら、AWSのネットワーク設計
いまさら、AWSのネットワーク設計
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
 

Similar to フロントからバックエンドまで - WebAssemblyで広がる可能性

Domino Voltアプリケーションを作成してみたよ!
Domino Voltアプリケーションを作成してみたよ!Domino Voltアプリケーションを作成してみたよ!
Domino Voltアプリケーションを作成してみたよ!Masahiko Miyo
 
Watsonを使ってAIアプリを作ってみよう!-ハンズオン-
Watsonを使ってAIアプリを作ってみよう!-ハンズオン-Watsonを使ってAIアプリを作ってみよう!-ハンズオン-
Watsonを使ってAIアプリを作ってみよう!-ハンズオン-BMXUG
 
【大阪】Bluemix勉強会 - Watson ハンズオン -
【大阪】Bluemix勉強会 - Watson ハンズオン - 【大阪】Bluemix勉強会 - Watson ハンズオン -
【大阪】Bluemix勉強会 - Watson ハンズオン - BMXUG
 
【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?
【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?
【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?Yoshiyuki Takano
 
【HackerWars 】ニフティクラウドmobile backend
【HackerWars 】ニフティクラウドmobile backend【HackerWars 】ニフティクラウドmobile backend
【HackerWars 】ニフティクラウドmobile backend史識 川原
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019昌桓 李
 
イノベート・ハブ九州 Bluemix勉強会(第2回)
イノベート・ハブ九州 Bluemix勉強会(第2回)イノベート・ハブ九州 Bluemix勉強会(第2回)
イノベート・ハブ九州 Bluemix勉強会(第2回)Atsumori Sasaki
 
Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」
Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」
Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」xyz corporation
 
オレ流クラウドデザイン
オレ流クラウドデザインオレ流クラウドデザイン
オレ流クラウドデザインAtsushi Kojima
 
Smarthome dev overview
Smarthome dev overviewSmarthome dev overview
Smarthome dev overviewNaoto Tobita
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介Yoshito Tabuchi
 
AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発Takaaki Kurasawa
 
Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601Shotaro Suzuki
 
Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601YorikoYokoyama
 
マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方
マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方
マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方Teiichi Ota
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -ShinichiAoyagi
 
Php on windows vol.2 - session.1 - 公開用
Php on windows   vol.2 - session.1 - 公開用Php on windows   vol.2 - session.1 - 公開用
Php on windows vol.2 - session.1 - 公開用hirookun
 
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションC# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションYoshito Tabuchi
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
KDDIにおけるAWS×アジャイル開発
KDDIにおけるAWS×アジャイル開発KDDIにおけるAWS×アジャイル開発
KDDIにおけるAWS×アジャイル開発Kazuya Suda
 

Similar to フロントからバックエンドまで - WebAssemblyで広がる可能性 (20)

Domino Voltアプリケーションを作成してみたよ!
Domino Voltアプリケーションを作成してみたよ!Domino Voltアプリケーションを作成してみたよ!
Domino Voltアプリケーションを作成してみたよ!
 
Watsonを使ってAIアプリを作ってみよう!-ハンズオン-
Watsonを使ってAIアプリを作ってみよう!-ハンズオン-Watsonを使ってAIアプリを作ってみよう!-ハンズオン-
Watsonを使ってAIアプリを作ってみよう!-ハンズオン-
 
【大阪】Bluemix勉強会 - Watson ハンズオン -
【大阪】Bluemix勉強会 - Watson ハンズオン - 【大阪】Bluemix勉強会 - Watson ハンズオン -
【大阪】Bluemix勉強会 - Watson ハンズオン -
 
【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?
【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?
【C-2】スマホアプリの開発は、エンタメとエンプラでどこまで違う?
 
【HackerWars 】ニフティクラウドmobile backend
【HackerWars 】ニフティクラウドmobile backend【HackerWars 】ニフティクラウドmobile backend
【HackerWars 】ニフティクラウドmobile backend
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019
 
イノベート・ハブ九州 Bluemix勉強会(第2回)
イノベート・ハブ九州 Bluemix勉強会(第2回)イノベート・ハブ九州 Bluemix勉強会(第2回)
イノベート・ハブ九州 Bluemix勉強会(第2回)
 
Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」
Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」
Web担当者Forumミーティング2013 Autumn 「マルチデバイス、HTML5がとりまくWebサイト制作とCMSの現在」
 
オレ流クラウドデザイン
オレ流クラウドデザインオレ流クラウドデザイン
オレ流クラウドデザイン
 
Smarthome dev overview
Smarthome dev overviewSmarthome dev overview
Smarthome dev overview
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
 
AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発AWSとReactで始めるShopifyアプリ開発
AWSとReactで始めるShopifyアプリ開発
 
Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601
 
Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601Decode19 cd42 fixer_public_0601
Decode19 cd42 fixer_public_0601
 
マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方
マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方
マルチデバイスへ広がる最新動画配信とビジネス現場への活かし方
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
 
Php on windows vol.2 - session.1 - 公開用
Php on windows   vol.2 - session.1 - 公開用Php on windows   vol.2 - session.1 - 公開用
Php on windows vol.2 - session.1 - 公開用
 
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションC# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
KDDIにおけるAWS×アジャイル開発
KDDIにおけるAWS×アジャイル開発KDDIにおけるAWS×アジャイル開発
KDDIにおけるAWS×アジャイル開発
 

More from IIJ

プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例
プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例
プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例IIJ
 
IIJ_デジタルワークプレース事業紹介資料
IIJ_デジタルワークプレース事業紹介資料IIJ_デジタルワークプレース事業紹介資料
IIJ_デジタルワークプレース事業紹介資料IIJ
 
監視 Overview
監視 Overview監視 Overview
監視 OverviewIIJ
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解するIIJ
 
DevOps Overview
DevOps OverviewDevOps Overview
DevOps OverviewIIJ
 
ただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学び
ただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学びただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学び
ただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学びIIJ
 
上っ面スクラムチームにならないために気を付けたいこと
上っ面スクラムチームにならないために気を付けたいこと上っ面スクラムチームにならないために気を付けたいこと
上っ面スクラムチームにならないために気を付けたいことIIJ
 
Super Easy Memory Forensics
Super Easy Memory ForensicsSuper Easy Memory Forensics
Super Easy Memory ForensicsIIJ
 
チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談
チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談
チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談IIJ
 
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?IIJ
 
コロナ禍での白井データセンターキャンパスの運用施策
コロナ禍での白井データセンターキャンパスの運用施策コロナ禍での白井データセンターキャンパスの運用施策
コロナ禍での白井データセンターキャンパスの運用施策IIJ
 
コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装IIJ
 
セキュリティ動向2020
セキュリティ動向2020セキュリティ動向2020
セキュリティ動向2020IIJ
 
バックボーン運用から見るインターネットの実情
バックボーン運用から見るインターネットの実情バックボーン運用から見るインターネットの実情
バックボーン運用から見るインターネットの実情IIJ
 
データセンターのエネルギーコントロールの仕組み
データセンターのエネルギーコントロールの仕組みデータセンターのエネルギーコントロールの仕組み
データセンターのエネルギーコントロールの仕組みIIJ
 
世界のインターネット事情
世界のインターネット事情世界のインターネット事情
世界のインターネット事情IIJ
 
あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~
あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~
あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~IIJ
 
インシデント調査システムが内製すぎる件~CHAGEのご紹介~
インシデント調査システムが内製すぎる件~CHAGEのご紹介~インシデント調査システムが内製すぎる件~CHAGEのご紹介~
インシデント調査システムが内製すぎる件~CHAGEのご紹介~IIJ
 
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっていますIIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっていますIIJ
 
IIJ Technical DAY 2019 ~ セキュリティ動向2019
IIJ Technical DAY 2019 ~ セキュリティ動向2019IIJ Technical DAY 2019 ~ セキュリティ動向2019
IIJ Technical DAY 2019 ~ セキュリティ動向2019IIJ
 

More from IIJ (20)

プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例
プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例
プロダクトオーナーと開発者が別会社・別組織でも前のめりなチームを生み出す取り組み事例
 
IIJ_デジタルワークプレース事業紹介資料
IIJ_デジタルワークプレース事業紹介資料IIJ_デジタルワークプレース事業紹介資料
IIJ_デジタルワークプレース事業紹介資料
 
監視 Overview
監視 Overview監視 Overview
監視 Overview
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解する
 
DevOps Overview
DevOps OverviewDevOps Overview
DevOps Overview
 
ただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学び
ただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学びただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学び
ただいま三河。あれから1年、チームNOCKncokが開発しないスクラムで成果を出した経験から得た学び
 
上っ面スクラムチームにならないために気を付けたいこと
上っ面スクラムチームにならないために気を付けたいこと上っ面スクラムチームにならないために気を付けたいこと
上っ面スクラムチームにならないために気を付けたいこと
 
Super Easy Memory Forensics
Super Easy Memory ForensicsSuper Easy Memory Forensics
Super Easy Memory Forensics
 
チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談
チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談
チームみを大切にした 私たちの“受託アジャイル・スクラム”体験談
 
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
 
コロナ禍での白井データセンターキャンパスの運用施策
コロナ禍での白井データセンターキャンパスの運用施策コロナ禍での白井データセンターキャンパスの運用施策
コロナ禍での白井データセンターキャンパスの運用施策
 
コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装コロナ禍の開発勉強会~社内教育ツールの開発と実装
コロナ禍の開発勉強会~社内教育ツールの開発と実装
 
セキュリティ動向2020
セキュリティ動向2020セキュリティ動向2020
セキュリティ動向2020
 
バックボーン運用から見るインターネットの実情
バックボーン運用から見るインターネットの実情バックボーン運用から見るインターネットの実情
バックボーン運用から見るインターネットの実情
 
データセンターのエネルギーコントロールの仕組み
データセンターのエネルギーコントロールの仕組みデータセンターのエネルギーコントロールの仕組み
データセンターのエネルギーコントロールの仕組み
 
世界のインターネット事情
世界のインターネット事情世界のインターネット事情
世界のインターネット事情
 
あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~
あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~
あ! やせいのEmotetがあらわれた! ~ IIJ C-SOCサービスの分析ルールについて~
 
インシデント調査システムが内製すぎる件~CHAGEのご紹介~
インシデント調査システムが内製すぎる件~CHAGEのご紹介~インシデント調査システムが内製すぎる件~CHAGEのご紹介~
インシデント調査システムが内製すぎる件~CHAGEのご紹介~
 
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっていますIIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています
IIJ Technical DAY 2019 ~ IIJのサーバインフラはここまでやっています
 
IIJ Technical DAY 2019 ~ セキュリティ動向2019
IIJ Technical DAY 2019 ~ セキュリティ動向2019IIJ Technical DAY 2019 ~ セキュリティ動向2019
IIJ Technical DAY 2019 ~ セキュリティ動向2019
 

フロントからバックエンドまで - WebAssemblyで広がる可能性

  • 2. Copyright © 2020 IIJ Innovation Institute Inc. はじめまして!  山本悠滋 (@igrep)  所属: IIJ-II 技術開発室  趣味ではHaskeller歴約8年
  • 3. Copyright © 2020 IIJ Innovation Institute Inc. 私とWebAssembly  WASIが発表されたあたり(2019年の春頃)くらいから WebAssemblyに強い関心が  仕様を追いかけてみたり少しフィードバックしたり  WebAssemblyを使った新しいウェブサービスを模索中  趣味ではWebAssemblyをArm32にコンパイルするコンパイラー をゆっくり開発  先週WebAssembly nightというイベントで発表しました
  • 4. Copyright © 2020 IIJ Innovation Institute Inc. 📝今日話すこと  そもそもWebAssemblyとは  現在のWebAssemblyの活躍  なぜ安全か  ウェブブラウザー以外における活躍  これからの活躍
  • 5. Copyright © 2020 IIJ Innovation Institute Inc. そもそもWebAssemblyとは  ウェブブラウザー上でJavaScriptのように(プラグインなしで)動 作させることを目的として作られた命令セットと、そのバイナリー フォーマット  2017年11月、主要な4つのウェブブラウザー(Chrome・Firefox・ Safari・旧Edge)がver. 1.0をサポート  2019年12月、W3CによりHTML・CSS・JavaScriptに続く「ウェブ ブラウザーで動く4つめの言語」として標準化  World Wide Web Consortium (W3C) brings a new language to the Web as WebAssembly becomes a W3C Recommendation
  • 6. Copyright © 2020 IIJ Innovation Institute Inc. 現在のWebAssemblyの活躍  Google Meet  FFMPEG.WASM  Blazor WebAssembly  Showcase | Magnum Engine
  • 7. Copyright © 2020 IIJ Innovation Institute Inc. Google Meet Google AI Blog: Background Features in Google Meet, Powered by Web ML  背景ぼかし機能の実装にWebAssemblyが!  C++で書かれたGoogle製機械学習フレームワーク MediaPipe をWebAssemblyにコンパイルして実現  関連: WebAssemblyでの機械学習モデルデプロイの動向
  • 8. Copyright © 2020 IIJ Innovation Institute Inc. FFMPEG.WASM https://ffmpegwasm.github.io/  様々なコーデックを利用して動画や音声の変換ができるCLIツー ル ffmpeg をWebAssemblyに移植!  動画のエンコードなどが全部ウェブブラウザー上で完結!
  • 9. Copyright © 2020 IIJ Innovation Institute Inc. Blazor WebAssembly https://docs.microsoft.com/ja-jp/aspnet/core/blazor/hosting- models?view=aspnetcore-5.0  ASP.NET Core Blazor: C#・F#向けウェブアプリケーションフレ ームワーク  クライアントもサーバーも概ねC#で書ける  実行モデルを切り替えれば主要な処理をサーバーで実行したり WebAssemblyで実行したりと切り替えられる
  • 10. Copyright © 2020 IIJ Innovation Institute Inc. Showcase | Magnum Engine https://magnum.graphics/showcase/  「Magnum Engine」というC++向けグラフィックスエンジンのサン プル集
  • 11. Copyright © 2020 IIJ Innovation Institute Inc. なぜ安全か  ホストのAPIからの分離  ホストのデータからの分離  index空間の分離
  • 12. Copyright © 2020 IIJ Innovation Institute Inc. なぜ安全か 用語  ホスト: ウェブブラウザーなど、WebAssemblyを動作させること ができるプログラム  後述のとおりブラウザー以外でもWebAssemblyを動かすプログラムがある  index空間: 配列の添え字(index)の集合  e.g. 長さ50の配列であれば0から49までの50個のindexの集合  「名前空間」の「名前」を文字列から整数に置き換えたバージョン  WAT  「WebAssembly Text Format」の略  WebAssemblyはバイナリーフォーマットなので直接人間が読むのは難しい ため、テキストファイルとして読めるよう翻訳したもの  「普通の機械語」に対する「アセンブリー」と同じ役割
  • 13. Copyright © 2020 IIJ Innovation Institute Inc. ホストのデータからの分離 WebAssemblyでは  原則: ホストのメモリーには勝手にアクセスできない!  ホストとデータをやりとりしたくなったら  Memoryオブジェクトが表す、割り当てられた専用の領域を使う  ホスト側でサイズを指定して作って、WebAssemblyを呼ぶときに渡す
  • 14. Copyright © 2020 IIJ Innovation Institute Inc. ホストのデータからの分離 コード例 (WAT): この行でMemoryをimportする必要が あることを明示
  • 15. Copyright © 2020 IIJ Innovation Institute Inc. ホストのデータからの分離 コード例 (Node.js): ここでMemoryを作って ここでimport ここで書き込み 出力: 7
  • 16. Copyright © 2020 IIJ Innovation Institute Inc. ホストのAPIからの分離 普通の機械語では  リンクした関数やOSのシステムコールは原則どのモジュールも 呼べちゃう!  あなたがダウンロードした悪質なプログラムが、意図しない関数 を呼ぶかも知れない! ※アセンブリーの内容に特に意味はありません
  • 17. Copyright © 2020 IIJ Innovation Institute Inc. ホストのAPIからの分離 WebAssemblyでは  明示的にimportした外部の関数しか呼べない!  何も明示しない限りは何もできない  ※もう一つ、間接呼び出しを実現するためのTableという機能が ありますが割愛 ここでimportした関数しか呼べない!
  • 18. Copyright © 2020 IIJ Innovation Institute Inc. index空間の分離 普通の機械語では  概ねどこにでもジャン プ(goto)できるように 作られている  ※CPUによって細かい 制約はありますが  😈プログラムに脆弱性 があると、攻撃者によ ってジャンプ先を意図 しないアドレスに書き 換えられてしまう ※アセンブリーの内容に特に意味はありません
  • 19. Copyright © 2020 IIJ Innovation Institute Inc. index空間の分離 WebAssemblyでは  関数呼び出しやブロッ クを抜け出したいとき に使う命令毎に「 index空間」が分かれ ている  図における(call 0)の0と(br 0)の0 は完全に別の配列へ のindexとして解釈さ れる
  • 20. Copyright © 2020 IIJ Innovation Institute Inc. index空間の分離 関数呼び出し命令callの場合  callの引数に渡せるのは、関数専用のindexだけ!  (func …)で定義した関数の他importした関数が含まれる  関数専用のindex空間が区切られている
  • 21. Copyright © 2020 IIJ Innovation Institute Inc. index空間の分離 ブロックから抜け出す命令brの場合  brに渡せるのは、brを囲っているブロックのうち、「内側から何 番目のブロックから抜け出すか」を表すindexのみ指定できる  図ではbrしている箇所で3つのblockに囲われているので0, 1, 2のい ずれか
  • 22. Copyright © 2020 IIJ Innovation Institute Inc. ウェブブラウザー以外における活躍  PostgreSQL  Envoy Proxy  Krustlet  WASI
  • 23. Copyright © 2020 IIJ Innovation Institute Inc. PostgreSQL Announcing the first Postgres extension to run WebAssembly  PostgreSQLのSQLからWebAssemblyで定義した関数が呼べ る!
  • 24. Copyright © 2020 IIJ Innovation Institute Inc. Envoy Proxy Istio / Redefining extensibility in proxies - introducing WebAssembly to Envoy and Istio  Microservice向けのプロキシサーバー  「独自の認証・認可機構を使いたい」・「標準でサポートされてないプロトコル を扱いたい」といったケースのために、拡張機能が  従来:  C++で拡張を書いて静的リンク  => 速いけどリビルドが必要で気軽じゃない  Mixerというアダプターにprotobufでメッセージを送る  => 気軽だけど遅い  WebAssemblyなら  デプロイも簡単で動作も速い  いろいろな言語をサポートできる  一般化するために仕様も策定中:  https://github.com/proxy-wasm
  • 25. Copyright © 2020 IIJ Innovation Institute Inc. Krustlet What is Krustlet?  KubernetesのノードとしてのWebAssembly処理系wasmtimeを 動かす  Dockerのimageの代わりに、WebAssemblyのモジュールをとっ てきてKubernetesクラスターにデプロイできる
  • 26. Copyright © 2020 IIJ Innovation Institute Inc. WASI WASI: WebAssembly System Interface  WebAssemblyがPOSIX風のAPIを利用できるようにするための 標準仕様  importしない限りprintfとかopenとかが使えない!  => importする関数の名前や型を決めましょう!  WebAssemblyがアクセスできるファイル・ディレクトリーを制限す る機能を提供することで、セキュリティーを保つ  importしないとホストのAPIを利用できないのと同様に、ファイル・ディレク トリーにもホストが明示的な許可を与える仕組みを
  • 27. Copyright © 2020 IIJ Innovation Institute Inc. これからの活躍  Docker v.s. WebAssembly  Shopify  Flash Playerの移植  まだまだパーツが足りない  WASIのさらなる発展  他の言語処理系を埋め込みやすく  ホストとの連携を強める
  • 28. Copyright © 2020 IIJ Innovation Institute Inc. Docker v.s. WebAssembly DockerのCo-founder, Solomon HykesさんのTwitterでの発言  「2008年にWebAssemblyとWASIがあれば、Dockerを作る必要 はなかっただろう」  Krustletのような仕組みが発達すれば、コンテナーの代わりに WebAssemblyという時代が来る?
  • 29. Copyright © 2020 IIJ Innovation Institute Inc. Shopify Making Commerce Extensible with WebAssembly, Mitch Dickinson - YouTube  テナントのいろいろな要求をテナント側のコードで実現するため に、Shopifyのサーバーで動くWebAssemblyによるプラグイン機 構を構築中  Web APIで実現するよりも高速!
  • 30. Copyright © 2020 IIJ Innovation Institute Inc. Flash Playerの移植 ruffle-rs/ruffle: A Flash Player emulator written in Rust  2020年末(もうすぐ!)サポートが終了するFlash Player  Flashの資産をなくさないためWebAssemblyでエミュレート!  WebAssemblyでできること以上のことはできないので、あらゆる Flashが動くわけではないはず  危険なFlashが動く可能性がその分低いということ!
  • 31. Copyright © 2020 IIJ Innovation Institute Inc. まだまだパーツが足りない  「活躍」とはいったものの、実験的なものが大半で、広く使われる には至っていない  CやC++, Rustなど以外の言語を動かすとWebAssemblyのサイ ズが膨らんでしまったり、  ホストとWebAssembly間のデータの受け渡しが煩雑だったり、 など多くの問題が
  • 32. Copyright © 2020 IIJ Innovation Institute Inc. WASIのさらなる発展  現状はファイルシステムや乱数、環境変数やコマンドライン引数 の処理が中心  ソケットに接続したり、リッスンするAPIは策定中!  feat(socket): berkeley socket API by 3miliano ꞏ Pull Request #312 ꞏ WebAssembly/WASI
  • 33. Copyright © 2020 IIJ Innovation Institute Inc. 他の言語処理系を埋め込みやすくする  Exception  Exception handling  例外のcatch/throw  GC  GC Extension  ガーベージコレクター。多くのプログラミング言語における縁の下の力持ち  これらの機能が追加されることで、これらの機能が必要な言語を WebAssemblyにし安く!
  • 34. Copyright © 2020 IIJ Innovation Institute Inc. ホストとの連携を強める: reference-types WebAssembly Reference Types in Wasmtime  externrefという「演算はできないポインターのようなもの」を表 す特殊な型が追加  e.g. ウェブページにおけるElementへの参照  importしたホストのAPIをWebAssemblyでラップできるように!  FirefoxやWasmtimeが実装済み!
  • 35. Copyright © 2020 IIJ Innovation Institute Inc. ホストとの連携を強める: interface types Interface Types Proposal  WebAssemblyは整数や浮動小数点数(と、前述のexternref)しか 扱えない  例えば文字列を扱おうと思ったら、一旦Memoryに書き込んだあと、アドレス を整数として渡す必要が  => 面倒なボイラープレートに!  型宣言と、型の値を相互変換する際の仕様を標準化!  => WebAssembly製の関数があたかも文字列などを直接扱えるかのように 見せるラッパーを提供
  • 36. Copyright © 2020 IIJ Innovation Institute Inc. まとめ  WebAssemblyは、ウェブブラウザーだけでなく、様々な種類の アプリケーションにおける拡張機構としての役割が期待されてい る  脆弱なWebAssemblyを実行してもユーザーに悪影響がないよう に、工夫が凝らされた仕様となっている  まだまだ足りない機能がたくさんあるので、更なる追加機能が検 討されている  もっと多くのプログラミング言語をWebAssemblyで実装しやすくなって、  もっと簡単にホストと連携できるようになりそう
  • 37. Copyright © 2020 IIJ Innovation Institute Inc. 参考(言及していないもののみ)  C#でSPAが実現できる、Blazor WebAssemblyのはじめかた (1/3):CodeZine(コードジン)  Istioldie 1.6 / Mixer Configuration Model (Deprecated)  Istioldie 1.6 / Mixer Adapter Model  Proxy-Wasm: Wasmを利用したPlugin機構の開発  Control Flow Integrity (CFI) | Karamba Security  たのしいバイナリの歩き方  Security - WebAssembly  Memory in WebAssembly (and why it’s safer than you think) - Mozilla Hacks - the Web developer blog  krustlet/architecture.md at master ꞏ deislabs/krustlet  Bytecode Alliance