SlideShare a Scribd company logo
04:00 PM - 04:40 PM
Tetsuro Takao
Blazor WebAssemblyと
JavaScriptのインターオペラビリティ
Microsoft Developers Day 2022.02.03
Profile
システム構築のプロセス評価、改
善、策定、開発フレームワークの設
計、実装管理、プリセールスやプロ
ジェクトの立ち上げなど
ブログ : http://blog.processtune.com
プロフィール : Facebook, Twitter or MVP
コミュニティ : .NETラボの運営スタッフ
Microsoft MVP : July 2010 ~ Jun 2022
Current expertise : MVP for Developer Technologies
1
2
3
4
Agenda
Microsoft Developers Day 2022.02.03
04:00 PM - 04:40 PM
WebAssemblyとは
Azure Static Web Apps
エコシステムの作成例
JavaScriptとの相互運用
Microsoft Developers Day 2022.02.03 セクション1
WebAssemblyとは
WebAssemblyが動くしくみ
セクション1 : WebAssemblyとは
X86, 64, Arm,
RISC, …
IDE
Compiler
ActionScript, Ada, C#, Common Lisp,
PicoLisp, Crystal, CUDA, D, Delphi,
Dylan, Forth, Fortran, Graphical G,
Halide, Haskell, Java bytecode, Julia,
Kotlin, Lua, Objective-C, OpenCL,
PostgreSQL's SQL and PLpgSQL, Ruby,
Rust, Scala, Swift, XC, Xojo and Zig.
プログラム
Mono(includes Roslyn)
Mono LLVM, Clang, Gollvm
rustc_codegen_llvm2
rustc_codegen_cranelift
GCC(G++, GCJ, GNAT)
フロントエンド
LLVM※, Cranelift
Singlepass
GCC(ツールの一部分)
バックエンド
Emscripten, Cloud ABI
TynyGo
WASMターゲット
なバックエンド
Node.js 、Wasmtime 、Wasmer
Lucet、WebAssembly Micro Runtime
WAVM、 Wasm3
(Portable WebAssembly system interface)
Runtime on Browser
マルチ・プラットフォーム
WebAssembly JavaScript API
JavaScript
Process
WASM
Browser
(WebAssembly system interface)
(WebAssembly)
※Low-level Virtual Machine
WebAssembly
Language
Go
Compile
Gollvm
Includes
WebAssembly
Runtime
JavaScript
System call
Runtime
C/C++
System call
Language
Go
Compile
Gollvm
Runtime
LLVM
System call
WASM
PWSIX
WebAssemblyの役割
セクション1 : WebAssemblyとは
X86, 64, Arm,
RISC, …
IDE
Compiler
ActionScript, Ada, C#, Common Lisp,
PicoLisp, Crystal, CUDA, D, Delphi,
Dylan, Forth, Fortran, Graphical G,
Halide, Haskell, Java bytecode, Julia,
Kotlin, Lua, Objective-C, OpenCL,
PostgreSQL's SQL and PLpgSQL, Ruby,
Rust, Scala, Swift, XC, Xojo and Zig.
プログラム
Mono(includes Roslyn)
Mono LLVM, Clang, Gollvm
rustc_codegen_llvm2
rustc_codegen_cranelift
GCC(G++, GCJ, GNAT)
フロントエンド
LLVM※, Cranelift
Singlepass
GCC(ツールの一部分)
バックエンド
Emscripten, Cloud ABI
TynyGo
WASMターゲット
なバックエンド
Node.js 、Wasmtime 、Wasmer
Lucet、WebAssembly Micro Runtime
WAVM、 Wasm3
(Portable WebAssembly system interface)
PWSIX
Runtime on Browser
マルチ・プラットフォーム
WASM
WebAssembly JavaScript API
JavaScript
Process
WASM
Browser
(WebAssembly system interface)
(WebAssembly)
※Low-level Virtual Machine
WebAssembly
Language
Go
Compile
Gollvm
Includes
WebAssembly
Runtime
JavaScript
System call
Runtime
C/C++
System call
Language
Go
Compile
Gollvm
Runtime
LLVM
System call
WebAssemblyは
1. 既存機能をWebで再利用
2. さまざまなアーキテクチャで形成される巨大なエコシステムのパズル
本日のお話は、WebAssemblyというアーキテクチャがパズルとしての
役割を果たして、JavaScriptとRust、C#を相互運用した巨大なエコ
システムを形成する例を解説します。
Microsoft Developers Day 2022.02.03 セクション2
Azure Static Web Apps
エコシステム
CD/CIレイヤー
エコシステム形成(仮想化)
セクション2 : Azure Static Web Apps
Azure
C# Ecosystem
Container
Rust Ecosystem
On-premise
JavaScript Ecosystem
WebAssembly
WebAssembly
System Interface
WebAssembly
Blazor WebAssembly
MongoDB
Azure
Storage
Azure Static Web Apps
相互運用アーキテクチャ
Node.js + Express
Web app
development environment
C#
Web mashup
development environment
Rust
Stable function & data
storage
外部APIをマッシュアップして
スタティックコンテンツを提供
するAzure Webアプリ
メッシュエンドポイントを形成
安定稼働が検証できているコ
ンポーネント化された既存のプ
ログラム・ナレッジリソース
開発が常に進行している継
続的インテグレーション開発
環境
エコシステム
CD/CIレイヤー
エコシステム形成(仮想化)
セクション2 : Azure Static Web Apps
Azure
C# Ecosystem
Container
Rust Ecosystem
On-premise
JavaScript Ecosystem
WebAssembly
WebAssembly
System Interface
WebAssembly
Blazor WebAssembly
MongoDB
Azure
Storage
Azure Static Web Apps
相互運用アーキテクチャ
Node.js + Express
Web app
development environment
C#
Web mashup
development environment
Rust
Stable function & data
storage
外部APIをマッシュアップして
スタティックコンテンツを提供
するAzure Webアプリ
メッシュエンドポイントを形成
安定稼働が検証できているコ
ンポーネント化された既存のプ
ログラム・ナレッジリソース
開発が常に進行している継
続的インテグレーション開発
環境
エコシステム
CD/CIレイヤー
エコシステム形成(仮想化)
セクション2 : Azure Static Web Apps
Azure
C# Ecosystem
Container
Rust Ecosystem
On-premise
JavaScript Ecosystem
WebAssembly
WebAssembly
System Interface
WebAssembly
Blazor WebAssembly
MongoDB
Azure
Storage
Azure Static Web Apps
相互運用アーキテクチャ
Node.js + Express
Web app
development environment
C#
Web mashup
development environment
Rust
Stable function & data
storage
外部APIをマッシュアップして
スタティックコンテンツを提供
するAzure Webアプリ
メッシュエンドポイントを形成
安定稼働が検証できているコ
ンポーネント化された既存のプ
ログラム・ナレッジリソース
開発が常に進行している継
続的インテグレーション開発
環境
CD/CIレイヤー
外部APIを利用するAzure Static Web Appを作成する
セクション2 : Azure Static Web Apps
Azure
C# Ecosystem
Container
Rust Ecosystem
On-premise
JavaScript Ecosystem
WebAssembly
WebAssembly
System Interface
WebAssembly
Blazor WebAssembly
MongoDB
Azure
Storage
Azure Static Web Apps
相互運用アーキテクチャ
Node.js + Express
Web app
development environment
C#
Web mashup
development environment
Rust
Stable function & data
storage
外部APIをマッシュアップして
スタティックコンテンツを提供
するAzure Webアプリ
メッシュエンドポイントを形成
安定稼働が検証できているコ
ンポーネント化された既存のプ
ログラム・ナレッジリソース
開発が常に進行している継
続的インテグレーション開発
環境
Azure Static Web App
WebAssembly
WebAssemblyのホストとグルーコード
セクション2 : Azure Static Web Apps
Azure
C# Ecosystem
Blazor WebAssembly
Azure
Storage
Azure Static Web Apps
HTML、Images、CSS
JavaScript、TypeScript
Geolocation API、MediaDevices、
Storage API…
UIスレッド
.NETランタイム
blazor.webassembly.js
依存
ファイル
HTML、Images、CSS
JavaScript、TypeScript
Geolocation API、MediaDevices、
Storage API…
UIスレッド
Rustランタイム
%appname%_bg.wasm
%appname%_bg.wasm.d.ts
%appname%.d.js
%appname%.js
glue code
テンプレートを使用したBlazor WebAssemblyの作成
セクション2 : Azure Static Web Apps
← dotnet new --list
↓ dotnet new blazorwasm -h
Visual Studio Codeで作業
セクション2 : Azure Static Web Apps
フォルダーを開くダイアログボックスで作業ディレクトリを
作成して「Ctrl+@」でターミナルを開き「dotnet new
blazorwasm」でプロジェクトを作成します。
ファイルが自動生成されます
ターミナルから実行
セクション2 : Azure Static Web Apps
「dotnet run」で実行、ブラウザで確認
FreeのSVGアイコンを収集する
セクション2 : Azure Static Web Apps
FreeのSVGアイコンを収集する
セクション2 : Azure Static Web Apps
FreeのSVGアイコンを収集する
セクション2 : Azure Static Web Apps
GitHubの準備
セクション2 : Azure Static Web Apps
https://git-scm.com/downloads https://cli.github.com/
GitHubの準備
セクション2 : Azure Static Web Apps
GitHubの準備
セクション2 : Azure Static Web Apps
GitHubへプッシュ
セクション2 : Azure Static Web Apps
カスタムドメインの作成
セクション2 : Azure Static Web Apps
カスタムドメインの作成
セクション2 : Azure Static Web Apps
カスタムドメインの作成
セクション2 : Azure Static Web Apps
編集とプッシュ
セクション2 : Azure Static Web Apps
Microsoft Developers Day 2022.02.03 セクション3
エコシステムの作成例
CD/CIレイヤー
セルフWebホストするRust WebAssemblyを作成する
セクション3 : エコシステムの作成例
Azure
C# Ecosystem
Container
Rust Ecosystem
On-premise
JavaScript Ecosystem
WebAssembly
WebAssembly
System Interface
WebAssembly
Blazor WebAssembly
MongoDB
Azure
Storage
Azure Static Web Apps
相互運用アーキテクチャ
Node.js + Express
Web app
development environment
C#
Web mashup
development environment
Rust
Stable function & data
storage
外部APIをマッシュアップして
スタティックコンテンツを提供
するAzure Webアプリ
メッシュエンドポイントを形成
安定稼働が検証できているコ
ンポーネント化された既存のプ
ログラム・ナレッジリソース
開発が常に進行している継
続的インテグレーション開発
環境
Rust Web API
Visual Studio Code Extensionsの準備
セクション3 : エコシステムの作成例
Rust
Teams Toolkit
Deploy Teams apps
with Microsoft Graph,
and in Azure and M365
Azure Static Web Apps
Create and manage
Azure Static Web Apps directly
Remote Development
Remote SSH
Remote Containers
Remote WSL
Docker
Containerization tool
Language support
Thunder Client
API Client Extention
MongoDB for VS Code
for working with MongoDB,
whether your own instance or in MongoDB Atlas.
Microsoft.AspNetCore.Ra
zor.VSCode.BlazorWasm
DebuggingExtension
稼働検証が終わっているRustを再利用する
セクション3 : エコシステムの作成例
Container
Rust Ecosystem
Rust
Stable function & data
storage
稼働検証が終わっているRustを再利用する
セクション3 : エコシステムの作成例
Container
Rust Ecosystem
Rust
Stable function & data
storage
コンポーネント化とデバッグモード
セクション3 : エコシステムの作成例
Container
Rust Ecosystem
Rust
Stable function & data
storage
リリース実行時にWeb出力する
セクション3 : エコシステムの作成例
Container
Rust Ecosystem
Rust
Stable function & data
storage
RustのWeb AssemblyをAPIでサービスする
セクション3 : エコシステムの作成例
Container
Rust Ecosystem
WebAssembly
WebAssembly
MongoDB
Rust
Stable function & data
storage
Rustで実装
他Webサービス
!Point
RustはWebサービス構築に向いてない
と言われています。.NETなどに比べ認
証、ルーティング、SDKなどが充実して
いないなど…
マイクロサービスでは各サービスにサイド
カーを用意したりサービスメッシュであれ
ばメッシュエンドポイントに認証やロギン
グロードバランシングなどのデータプレーン
が配置されますので、マイクロサービスに
おけるサーバーレス・ファンクションを提供
するためのWeb API機能であれば
Rustで十分作れます。
RustのWeb AssemblyをAPIでサービスする
セクション3 : エコシステムの作成例
Container
Rust Ecosystem
WebAssembly
WebAssembly
MongoDB
Rust
Stable function & data
storage
WSLとdocker
セクション3 : エコシステムの作成例
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] ¥
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
初めてWSLを使う場合はツール群をインストール
docker ce(community edition)がインストールされていない場合
GNU Privacy Guard (GnuPG, GPG)キーの取得と配置
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ apt-cache madison docker-ce
インストールできるdocker ceの確認
$ sudo apt-get install docker-ce=5:20.10.8~3-0~ubuntu-focal docker-ce-cli=5:20.10.8~3-0~ubuntu-focal containerd.io
docker ceのインストール
Ubuntuでdocker環境を作成する(Armの方向け)
セクション3 : エコシステムの作成例
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] ¥
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
初めてWSLを使う場合はツール群をインストール
docker ce(community edition)がインストールされていない場合
GNU Privacy Guard (GnuPG, GPG)キーの取得と配置
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ apt-cache madison docker-ce
インストールできるdocker ceの確認
$ sudo apt-get install docker-ce=5:20.10.8~3-0~ubuntu-focal docker-ce-cli=5:20.10.8~3-0~ubuntu-focal containerd.io
docker ceのインストール
MongoDBオフィシャル・イメージにRust追加
セクション3 : エコシステムの作成例
$ sudo docker pull mongo
$ sudo docker run -d -p 7878:7878 -p 27017:27017 --init --name svgqrcodedb mongo:latest
$ sudo docker exec -it svgqrcodedb /bin/bash
# echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null
# apt update && apt upgrade -y
# apt install curl
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
--インストーラー
>[return] --リターンで既定のインストールを選択
--インストール終了後、Rustランタイム(&パッケージマネージャー)のパスを設定
# source $HOME/.cargo/env
--コンパイラーインストール
# apt install build-essential
>[y] --yでインストールを開始
--コンパイラーインストール終了
# mkdir /home/rust
# mkdir /home/rust/QRCodeCreation
# chmod 777 /home/rust/QRCodeCreation
# cd /home/rust/QRCodeCreation
DockerのMongoDBオフィシャルイメージ
以降は以下の方法でプルグラムを作成できます
1.GitHubでLinux側へ共有
2.Visual Studio Code(要Docker Desktop)で編集
3.ソースをコピペ(Windows Arm向け)
ポート2つ持つコンテナを起動
Bashでコンテナ内を操作
Rustのインストール
Rustの実行とWindows側のプログラムの移植
セクション3 : エコシステムの作成例
# mkdir src
# cd src
# touch main.rs
# apt install vim
--インストーラー
>[y] --yでインストールを選択
--インストール終了
# vim main.rs
--vim
~[i] --iで挿入モード編集開始
fn main() {
println!("Hello World!");
}
~[esc][:][w][enter] --[:][w][enter]で保存
~[:][q][enter] --[:][q][enter]で終了
--vim終了後、コンパイルと実行
# rustc main.rs
# ./main
# vim main.rs
…--main.rsとCargo.tomlの中身をvimでコピーする
/home/rust/QRCodeCreation# cargo run
ブラウザでQRコードのWebAssemblyを表示する
セクション3 : エコシステムの作成例
$ sudo docker run -d --network host -p 7878:7878 -p 27017:27017 --init --name svgqrcodedb svgqrcodedb:v0.2
$ sudo docker exec -it svgqrcodedb /bin/bash
# apt update && apt upgrade -y
--# apt install pkg-config(入っていなかったら入れる)
# rustup target add aarch64-unknown-linux-gnu
# rustup toolchain install stable-aarch64-unknown-linux-gnu
# cd /home/rust/QRCodeCreation
--以下のどちらかを実行(この段階ではWebAssemblyではない。以下はCD/CIの運用設計によって変わる)
# cargo build --bin create_qrcode_svg --target aarch64-unknown-linux-gnu --release
or
# rustup default stable-aarch64-unknown-linux-gnu
# cargo build --bin create_qrcode_svg --release
--
# cargo run --release
Microsoft Developers Day 2022.02.03 セクション4
JavaScriptとの相互運用
CD/CIレイヤー
JavaScriptとの通信を作成する
セクション4 : JavaScriptとの相互運用
Azure
C# Ecosystem
Container
Rust Ecosystem
On-premise
JavaScript Ecosystem
WebAssembly
WebAssembly
System Interface
WebAssembly
Blazor WebAssembly
MongoDB
Azure
Storage
Azure Static Web Apps
相互運用アーキテクチャ
Node.js + Express
Web app
development environment
C#
Web mashup
development environment
Rust
Stable function & data
storage
外部APIをマッシュアップして
スタティックコンテンツを提供
するAzure Webアプリ
メッシュエンドポイントを形成
安定稼働が検証できているコ
ンポーネント化された既存のプ
ログラム・ナレッジリソース
開発が常に進行している継
続的インテグレーション開発
環境
既存JavaScriptコード
ライブラリ等
WebAssemblyをJavaScriptから操作する
セクション4 : JavaScriptとの相互運用
相互運用
セクション4 : JavaScriptとの相互運用
JavaScriptとの相互運用
セクション4 : JavaScriptとの相互運用
既存のJavaScriptの資産がある場合活用することが可能
DOMの操作(特にShadow DOM)の操作は
JavaScriptに任せるべき
その多くは、業務のステートをコミットするまでの洞察や試行
錯誤、情報収集など、エッジ・サイドでのユーザーステート
(ユーザーエクスペリエンスのためのビューステートを含む)の
ための操作であり、サービスサイドとの通信を必要としない。
高度に計画された運用設計では、ユーザーストーリーごとに
マイクロサービスを計画できるドメイン・ドリブン・デザインなど
の設計手法が多く存在し、ステート管理の設計によって
JavaScriptとWebAssemblyの相互運用が必要となる
シーンも増える
まとめ
Conclusion
参考リンク
条件付きコンパイル
https://doc.rust-jp.rs/the-rust-programming-language-ja/1.9/book/conditional-compilation.html
The js-sys
https://rustwasm.github.io/wasm-bindgen/contributing/js-sys/index.html
Building a Single-Threaded Web Server:The Rust Programming Language
https://doc.rust-lang.org/book/ch20-01-single-threaded.html
RustからWebAssembly (wasm)を生成してJavaScriptとブリッジ通信してみる
https://dev.classmethod.jp/articles/rust-webassembly-javascript/
rustwasm:crates.io
https://crates.io/teams/github:rustwasm:core
Crate web_sys
https://rustwasm.github.io/wasm-bindgen/api/web_sys/
wabt:GitHub
https://github.com/webassembly/wabt
Platform Support:The rustc book
https://doc.rust-lang.org/rustc/platform-support.html
◼ 本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に
対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。
◼ 本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。
◼ すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うこと
は、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではあり
ません。
◼ Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給さ
れる場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。
◼ Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。
その他、記載されている会社名および製品名は、一般に各社の商標です。

More Related Content

PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
 
PDF
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
日本マイクロソフト株式会社
 
PDF
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
日本マイクロソフト株式会社
 
PDF
【BS2】.NET 6 最新アップデート
日本マイクロソフト株式会社
 
PDF
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
日本マイクロソフト株式会社
 
PDF
そろそろレガシーな.Net開発をやめなイカ?
Yuta Matsumura
 
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
PDF
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
日本マイクロソフト株式会社
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
日本マイクロソフト株式会社
 
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
日本マイクロソフト株式会社
 
【BS2】.NET 6 最新アップデート
日本マイクロソフト株式会社
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
日本マイクロソフト株式会社
 
そろそろレガシーな.Net開発をやめなイカ?
Yuta Matsumura
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
日本マイクロソフト株式会社
 

What's hot (20)

PDF
「指標」を支えるエンジニアリング: DataOpsNight #1
株式会社MonotaRO Tech Team
 
PDF
삶이편해지는_백엔드_개발자_지식.pdf
Seung kyoo Park
 
PDF
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
Hiromasa Oka
 
PDF
マイクロサービス 4つの分割アプローチ
増田 亨
 
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
 
PDF
Spring native について
Takamasa Mitsuji
 
PDF
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Genki WATANABE
 
PPTX
Docker超入門
VirtualTech Japan Inc.
 
PPTX
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
ShuheiUda
 
PDF
WPF開発での陥りやすい罠
Sho Okada
 
PDF
マイクロサービスに至る歴史とこれから - XP祭り2021
Yusuke Suzuki
 
PDF
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
Yusuke Suzuki
 
PDF
Marp Tutorial
Rui Watanabe
 
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PDF
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
Masaya Tahara
 
PDF
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
 
PDF
Redmineプラグイン導入・開発入門
Minoru Maeda
 
PDF
5分で分かるgitのrefspec
ikdysfm
 
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
 
PDF
vSphere 7 へのアップグレードについて
富士通クラウドテクノロジーズ株式会社
 
「指標」を支えるエンジニアリング: DataOpsNight #1
株式会社MonotaRO Tech Team
 
삶이편해지는_백엔드_개발자_지식.pdf
Seung kyoo Park
 
ZOZOTOWNのマルチクラウドへの挑戦と挫折、そして未来
Hiromasa Oka
 
マイクロサービス 4つの分割アプローチ
増田 亨
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
 
Spring native について
Takamasa Mitsuji
 
Office365勉強会 #23 Azure AD のテナント設計(Office365管理者向け)
Genki WATANABE
 
Docker超入門
VirtualTech Japan Inc.
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
ShuheiUda
 
WPF開発での陥りやすい罠
Sho Okada
 
マイクロサービスに至る歴史とこれから - XP祭り2021
Yusuke Suzuki
 
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
Yusuke Suzuki
 
Marp Tutorial
Rui Watanabe
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
Masaya Tahara
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
 
Redmineプラグイン導入・開発入門
Minoru Maeda
 
5分で分かるgitのrefspec
ikdysfm
 
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
 
vSphere 7 へのアップグレードについて
富士通クラウドテクノロジーズ株式会社
 
Ad

Similar to 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ (20)

PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PDF
WebMatrix 2 と Azure を使ったスマートフォンサイト構築のすすめ
Akira Inoue
 
PDF
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
Akira Inoue
 
PDF
WebMatrix 2 と Azure Web Sites を使ったスマートフォンサイト構築のすすめ
Akira Inoue
 
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PPTX
Interoperability of webassembly with javascript
Takao Tetsuro
 
PDF
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Akira Inoue
 
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
PDF
[AC11] サーバー管理よ、サヨウナラ。サーバーレスアーキテクチャの意義と実践
de:code 2017
 
PDF
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
Akira Inoue
 
PDF
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Akira Inoue
 
PDF
Mvc conf session_5_isami
Hiroshi Okunushi
 
PDF
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
 
PDF
.NET の過去、現在、そして未来
Akira Inoue
 
PDF
20190201 Cloud Native Kansai AKS Azure
Issei Hiraoka
 
PPTX
Azure Antenna AI 概要
Miho Yamamoto
 
PPTX
Interactive connection2
Takao Tetsuro
 
PDF
Windows 開発者のための Dev&Ops on AWS
Amazon Web Services Japan
 
PDF
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Shotaro Suzuki
 
PDF
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
Daisuke Masubuchi
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
WebMatrix 2 と Azure を使ったスマートフォンサイト構築のすすめ
Akira Inoue
 
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
Akira Inoue
 
WebMatrix 2 と Azure Web Sites を使ったスマートフォンサイト構築のすすめ
Akira Inoue
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
Interoperability of webassembly with javascript
Takao Tetsuro
 
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Akira Inoue
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
 
[AC11] サーバー管理よ、サヨウナラ。サーバーレスアーキテクチャの意義と実践
de:code 2017
 
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
Akira Inoue
 
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Akira Inoue
 
Mvc conf session_5_isami
Hiroshi Okunushi
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
日本マイクロソフト株式会社
 
.NET の過去、現在、そして未来
Akira Inoue
 
20190201 Cloud Native Kansai AKS Azure
Issei Hiraoka
 
Azure Antenna AI 概要
Miho Yamamoto
 
Interactive connection2
Takao Tetsuro
 
Windows 開発者のための Dev&Ops on AWS
Amazon Web Services Japan
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Shotaro Suzuki
 
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
Daisuke Masubuchi
 
Ad

More from 日本マイクロソフト株式会社 (20)

PDF
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
 
PDF
【BS12】Visual Studio 2022 40分一本勝負!
日本マイクロソフト株式会社
 
PDF
【BS9】モダン & クラウドネイティブなソフトウエア開発はじめよう ~ Azure DevOps & GitHub を使ったアプリ開発 DevOps 101
日本マイクロソフト株式会社
 
PDF
【BS8】GitHub Advanced Security で実践できる DevSecOps 対策
日本マイクロソフト株式会社
 
PDF
【BS7】GitHubをフル活用した開発
日本マイクロソフト株式会社
 
PDF
【BS5】帰ってきたハードコアデバッギング ~.NET6 を添えて~
日本マイクロソフト株式会社
 
PDF
【BS6】 マイクロソフトの GitHub との取り組み
日本マイクロソフト株式会社
 
PDF
【BS1】What’s new in visual studio 2022 and c# 10
日本マイクロソフト株式会社
 
PDF
N08_次世代通信キャリアの "Resilience" を支援する Microsoft Cloud [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
PDF
S09_プライバシー規約準拠の基本! Amazon S3 やオンプレ SQL もサポートする Azure Purview による情報分類と管理 [Micr...
日本マイクロソフト株式会社
 
PDF
S18_ゼロトラストを目指し、Windows 10 & M365E5 を徹底活用した弊社 (三井情報) 事例のご紹介 [Microsoft Japan D...
日本マイクロソフト株式会社
 
PDF
S17_25 分でわかる!Windows 365 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
PDF
S15_標準 PC にさようなら!ニューノーマルの働き方に合わせたデバイスの選択 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
PDF
S13_レガシー ID 管理者でも分かる Verifiable Credentials のセッション [Microsoft Japan Digital D...
日本マイクロソフト株式会社
 
PDF
S12_Azure AD 活用術!アプリケーション認証を ADFS から移行しましょう。 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
PDF
S10_Microsoft 365 E5 Compliance で実現する機密情報の検出・分類・保護 - Microsoft Information P...
日本マイクロソフト株式会社
 
PDF
S08_Microsoft 365 E5 Compliance による内部不正対策の実践 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
PDF
S07_経営層 / IT 部門が意識すべきコンプライアンス対応 - Microsoft 365 E5 Compliance で実現するリスク対策 - [...
日本マイクロソフト株式会社
 
PDF
S06_Microsoft Surface と Microsoft 365 が実現するモダン エンドポイント デバイス セキュリティ [Microsoft...
日本マイクロソフト株式会社
 
PDF
S04_Microsoft XDR によるセキュアなハイブリッドクラウド環境の実現 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
 
【BS12】Visual Studio 2022 40分一本勝負!
日本マイクロソフト株式会社
 
【BS9】モダン & クラウドネイティブなソフトウエア開発はじめよう ~ Azure DevOps & GitHub を使ったアプリ開発 DevOps 101
日本マイクロソフト株式会社
 
【BS8】GitHub Advanced Security で実践できる DevSecOps 対策
日本マイクロソフト株式会社
 
【BS7】GitHubをフル活用した開発
日本マイクロソフト株式会社
 
【BS5】帰ってきたハードコアデバッギング ~.NET6 を添えて~
日本マイクロソフト株式会社
 
【BS6】 マイクロソフトの GitHub との取り組み
日本マイクロソフト株式会社
 
【BS1】What’s new in visual studio 2022 and c# 10
日本マイクロソフト株式会社
 
N08_次世代通信キャリアの "Resilience" を支援する Microsoft Cloud [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
S09_プライバシー規約準拠の基本! Amazon S3 やオンプレ SQL もサポートする Azure Purview による情報分類と管理 [Micr...
日本マイクロソフト株式会社
 
S18_ゼロトラストを目指し、Windows 10 & M365E5 を徹底活用した弊社 (三井情報) 事例のご紹介 [Microsoft Japan D...
日本マイクロソフト株式会社
 
S17_25 分でわかる!Windows 365 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
S15_標準 PC にさようなら!ニューノーマルの働き方に合わせたデバイスの選択 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
S13_レガシー ID 管理者でも分かる Verifiable Credentials のセッション [Microsoft Japan Digital D...
日本マイクロソフト株式会社
 
S12_Azure AD 活用術!アプリケーション認証を ADFS から移行しましょう。 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
S10_Microsoft 365 E5 Compliance で実現する機密情報の検出・分類・保護 - Microsoft Information P...
日本マイクロソフト株式会社
 
S08_Microsoft 365 E5 Compliance による内部不正対策の実践 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
S07_経営層 / IT 部門が意識すべきコンプライアンス対応 - Microsoft 365 E5 Compliance で実現するリスク対策 - [...
日本マイクロソフト株式会社
 
S06_Microsoft Surface と Microsoft 365 が実現するモダン エンドポイント デバイス セキュリティ [Microsoft...
日本マイクロソフト株式会社
 
S04_Microsoft XDR によるセキュアなハイブリッドクラウド環境の実現 [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 

Recently uploaded (7)

PDF
共有_企業様向けご提案資料_大手企業開拓ならセールスハブ セールスハブセールスハブ
株式会社Saleshub
 
PDF
合成性フェロモン―グローバル市場シェアとランキング、全体の売上と需要予測、2025~2031
jyuzou suzuya
 
PDF
中小企業のIT放題 - サービス概要です。当サービスにご契約いただくと、すべてのサービスが利用し放題となります。
shimaguchiy
 
PDF
EdgeTech+ West 2025 「とりあえずPoC」を卒業し、未来への羅針盤を手に入れる!
Naoya Maekawa
 
PDF
20250730_fy2025_1q_ broadmedia Corporation.BM.pdf
bm_pr
 
PDF
官能化溶液重合スチレンブタジエンゴム、グローバルトップ16企業のランキングと市場シェア.pdf
jyuzou suzuya
 
PPTX
SPOファイル操作の安定化_2025072800000000000000.pptx
hamasang909
 
共有_企業様向けご提案資料_大手企業開拓ならセールスハブ セールスハブセールスハブ
株式会社Saleshub
 
合成性フェロモン―グローバル市場シェアとランキング、全体の売上と需要予測、2025~2031
jyuzou suzuya
 
中小企業のIT放題 - サービス概要です。当サービスにご契約いただくと、すべてのサービスが利用し放題となります。
shimaguchiy
 
EdgeTech+ West 2025 「とりあえずPoC」を卒業し、未来への羅針盤を手に入れる!
Naoya Maekawa
 
20250730_fy2025_1q_ broadmedia Corporation.BM.pdf
bm_pr
 
官能化溶液重合スチレンブタジエンゴム、グローバルトップ16企業のランキングと市場シェア.pdf
jyuzou suzuya
 
SPOファイル操作の安定化_2025072800000000000000.pptx
hamasang909
 

【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ

  • 1. 04:00 PM - 04:40 PM Tetsuro Takao Blazor WebAssemblyと JavaScriptのインターオペラビリティ
  • 2. Microsoft Developers Day 2022.02.03 Profile システム構築のプロセス評価、改 善、策定、開発フレームワークの設 計、実装管理、プリセールスやプロ ジェクトの立ち上げなど ブログ : http://blog.processtune.com プロフィール : Facebook, Twitter or MVP コミュニティ : .NETラボの運営スタッフ Microsoft MVP : July 2010 ~ Jun 2022 Current expertise : MVP for Developer Technologies
  • 3. 1 2 3 4 Agenda Microsoft Developers Day 2022.02.03 04:00 PM - 04:40 PM WebAssemblyとは Azure Static Web Apps エコシステムの作成例 JavaScriptとの相互運用
  • 4. Microsoft Developers Day 2022.02.03 セクション1 WebAssemblyとは
  • 5. WebAssemblyが動くしくみ セクション1 : WebAssemblyとは X86, 64, Arm, RISC, … IDE Compiler ActionScript, Ada, C#, Common Lisp, PicoLisp, Crystal, CUDA, D, Delphi, Dylan, Forth, Fortran, Graphical G, Halide, Haskell, Java bytecode, Julia, Kotlin, Lua, Objective-C, OpenCL, PostgreSQL's SQL and PLpgSQL, Ruby, Rust, Scala, Swift, XC, Xojo and Zig. プログラム Mono(includes Roslyn) Mono LLVM, Clang, Gollvm rustc_codegen_llvm2 rustc_codegen_cranelift GCC(G++, GCJ, GNAT) フロントエンド LLVM※, Cranelift Singlepass GCC(ツールの一部分) バックエンド Emscripten, Cloud ABI TynyGo WASMターゲット なバックエンド Node.js 、Wasmtime 、Wasmer Lucet、WebAssembly Micro Runtime WAVM、 Wasm3 (Portable WebAssembly system interface) Runtime on Browser マルチ・プラットフォーム WebAssembly JavaScript API JavaScript Process WASM Browser (WebAssembly system interface) (WebAssembly) ※Low-level Virtual Machine WebAssembly Language Go Compile Gollvm Includes WebAssembly Runtime JavaScript System call Runtime C/C++ System call Language Go Compile Gollvm Runtime LLVM System call WASM PWSIX
  • 6. WebAssemblyの役割 セクション1 : WebAssemblyとは X86, 64, Arm, RISC, … IDE Compiler ActionScript, Ada, C#, Common Lisp, PicoLisp, Crystal, CUDA, D, Delphi, Dylan, Forth, Fortran, Graphical G, Halide, Haskell, Java bytecode, Julia, Kotlin, Lua, Objective-C, OpenCL, PostgreSQL's SQL and PLpgSQL, Ruby, Rust, Scala, Swift, XC, Xojo and Zig. プログラム Mono(includes Roslyn) Mono LLVM, Clang, Gollvm rustc_codegen_llvm2 rustc_codegen_cranelift GCC(G++, GCJ, GNAT) フロントエンド LLVM※, Cranelift Singlepass GCC(ツールの一部分) バックエンド Emscripten, Cloud ABI TynyGo WASMターゲット なバックエンド Node.js 、Wasmtime 、Wasmer Lucet、WebAssembly Micro Runtime WAVM、 Wasm3 (Portable WebAssembly system interface) PWSIX Runtime on Browser マルチ・プラットフォーム WASM WebAssembly JavaScript API JavaScript Process WASM Browser (WebAssembly system interface) (WebAssembly) ※Low-level Virtual Machine WebAssembly Language Go Compile Gollvm Includes WebAssembly Runtime JavaScript System call Runtime C/C++ System call Language Go Compile Gollvm Runtime LLVM System call WebAssemblyは 1. 既存機能をWebで再利用 2. さまざまなアーキテクチャで形成される巨大なエコシステムのパズル 本日のお話は、WebAssemblyというアーキテクチャがパズルとしての 役割を果たして、JavaScriptとRust、C#を相互運用した巨大なエコ システムを形成する例を解説します。
  • 7. Microsoft Developers Day 2022.02.03 セクション2 Azure Static Web Apps
  • 8. エコシステム CD/CIレイヤー エコシステム形成(仮想化) セクション2 : Azure Static Web Apps Azure C# Ecosystem Container Rust Ecosystem On-premise JavaScript Ecosystem WebAssembly WebAssembly System Interface WebAssembly Blazor WebAssembly MongoDB Azure Storage Azure Static Web Apps 相互運用アーキテクチャ Node.js + Express Web app development environment C# Web mashup development environment Rust Stable function & data storage 外部APIをマッシュアップして スタティックコンテンツを提供 するAzure Webアプリ メッシュエンドポイントを形成 安定稼働が検証できているコ ンポーネント化された既存のプ ログラム・ナレッジリソース 開発が常に進行している継 続的インテグレーション開発 環境
  • 9. エコシステム CD/CIレイヤー エコシステム形成(仮想化) セクション2 : Azure Static Web Apps Azure C# Ecosystem Container Rust Ecosystem On-premise JavaScript Ecosystem WebAssembly WebAssembly System Interface WebAssembly Blazor WebAssembly MongoDB Azure Storage Azure Static Web Apps 相互運用アーキテクチャ Node.js + Express Web app development environment C# Web mashup development environment Rust Stable function & data storage 外部APIをマッシュアップして スタティックコンテンツを提供 するAzure Webアプリ メッシュエンドポイントを形成 安定稼働が検証できているコ ンポーネント化された既存のプ ログラム・ナレッジリソース 開発が常に進行している継 続的インテグレーション開発 環境
  • 10. エコシステム CD/CIレイヤー エコシステム形成(仮想化) セクション2 : Azure Static Web Apps Azure C# Ecosystem Container Rust Ecosystem On-premise JavaScript Ecosystem WebAssembly WebAssembly System Interface WebAssembly Blazor WebAssembly MongoDB Azure Storage Azure Static Web Apps 相互運用アーキテクチャ Node.js + Express Web app development environment C# Web mashup development environment Rust Stable function & data storage 外部APIをマッシュアップして スタティックコンテンツを提供 するAzure Webアプリ メッシュエンドポイントを形成 安定稼働が検証できているコ ンポーネント化された既存のプ ログラム・ナレッジリソース 開発が常に進行している継 続的インテグレーション開発 環境
  • 11. CD/CIレイヤー 外部APIを利用するAzure Static Web Appを作成する セクション2 : Azure Static Web Apps Azure C# Ecosystem Container Rust Ecosystem On-premise JavaScript Ecosystem WebAssembly WebAssembly System Interface WebAssembly Blazor WebAssembly MongoDB Azure Storage Azure Static Web Apps 相互運用アーキテクチャ Node.js + Express Web app development environment C# Web mashup development environment Rust Stable function & data storage 外部APIをマッシュアップして スタティックコンテンツを提供 するAzure Webアプリ メッシュエンドポイントを形成 安定稼働が検証できているコ ンポーネント化された既存のプ ログラム・ナレッジリソース 開発が常に進行している継 続的インテグレーション開発 環境 Azure Static Web App
  • 12. WebAssembly WebAssemblyのホストとグルーコード セクション2 : Azure Static Web Apps Azure C# Ecosystem Blazor WebAssembly Azure Storage Azure Static Web Apps HTML、Images、CSS JavaScript、TypeScript Geolocation API、MediaDevices、 Storage API… UIスレッド .NETランタイム blazor.webassembly.js 依存 ファイル HTML、Images、CSS JavaScript、TypeScript Geolocation API、MediaDevices、 Storage API… UIスレッド Rustランタイム %appname%_bg.wasm %appname%_bg.wasm.d.ts %appname%.d.js %appname%.js glue code
  • 13. テンプレートを使用したBlazor WebAssemblyの作成 セクション2 : Azure Static Web Apps ← dotnet new --list ↓ dotnet new blazorwasm -h
  • 14. Visual Studio Codeで作業 セクション2 : Azure Static Web Apps フォルダーを開くダイアログボックスで作業ディレクトリを 作成して「Ctrl+@」でターミナルを開き「dotnet new blazorwasm」でプロジェクトを作成します。 ファイルが自動生成されます
  • 15. ターミナルから実行 セクション2 : Azure Static Web Apps 「dotnet run」で実行、ブラウザで確認
  • 19. GitHubの準備 セクション2 : Azure Static Web Apps https://git-scm.com/downloads https://cli.github.com/
  • 27. Microsoft Developers Day 2022.02.03 セクション3 エコシステムの作成例
  • 28. CD/CIレイヤー セルフWebホストするRust WebAssemblyを作成する セクション3 : エコシステムの作成例 Azure C# Ecosystem Container Rust Ecosystem On-premise JavaScript Ecosystem WebAssembly WebAssembly System Interface WebAssembly Blazor WebAssembly MongoDB Azure Storage Azure Static Web Apps 相互運用アーキテクチャ Node.js + Express Web app development environment C# Web mashup development environment Rust Stable function & data storage 外部APIをマッシュアップして スタティックコンテンツを提供 するAzure Webアプリ メッシュエンドポイントを形成 安定稼働が検証できているコ ンポーネント化された既存のプ ログラム・ナレッジリソース 開発が常に進行している継 続的インテグレーション開発 環境 Rust Web API
  • 29. Visual Studio Code Extensionsの準備 セクション3 : エコシステムの作成例 Rust Teams Toolkit Deploy Teams apps with Microsoft Graph, and in Azure and M365 Azure Static Web Apps Create and manage Azure Static Web Apps directly Remote Development Remote SSH Remote Containers Remote WSL Docker Containerization tool Language support Thunder Client API Client Extention MongoDB for VS Code for working with MongoDB, whether your own instance or in MongoDB Atlas. Microsoft.AspNetCore.Ra zor.VSCode.BlazorWasm DebuggingExtension
  • 34. RustのWeb AssemblyをAPIでサービスする セクション3 : エコシステムの作成例 Container Rust Ecosystem WebAssembly WebAssembly MongoDB Rust Stable function & data storage Rustで実装 他Webサービス !Point RustはWebサービス構築に向いてない と言われています。.NETなどに比べ認 証、ルーティング、SDKなどが充実して いないなど… マイクロサービスでは各サービスにサイド カーを用意したりサービスメッシュであれ ばメッシュエンドポイントに認証やロギン グロードバランシングなどのデータプレーン が配置されますので、マイクロサービスに おけるサーバーレス・ファンクションを提供 するためのWeb API機能であれば Rustで十分作れます。
  • 35. RustのWeb AssemblyをAPIでサービスする セクション3 : エコシステムの作成例 Container Rust Ecosystem WebAssembly WebAssembly MongoDB Rust Stable function & data storage
  • 36. WSLとdocker セクション3 : エコシステムの作成例 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] ¥ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release 初めてWSLを使う場合はツール群をインストール docker ce(community edition)がインストールされていない場合 GNU Privacy Guard (GnuPG, GPG)キーの取得と配置 $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io $ apt-cache madison docker-ce インストールできるdocker ceの確認 $ sudo apt-get install docker-ce=5:20.10.8~3-0~ubuntu-focal docker-ce-cli=5:20.10.8~3-0~ubuntu-focal containerd.io docker ceのインストール
  • 37. Ubuntuでdocker環境を作成する(Armの方向け) セクション3 : エコシステムの作成例 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] ¥ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release 初めてWSLを使う場合はツール群をインストール docker ce(community edition)がインストールされていない場合 GNU Privacy Guard (GnuPG, GPG)キーの取得と配置 $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io $ apt-cache madison docker-ce インストールできるdocker ceの確認 $ sudo apt-get install docker-ce=5:20.10.8~3-0~ubuntu-focal docker-ce-cli=5:20.10.8~3-0~ubuntu-focal containerd.io docker ceのインストール
  • 38. MongoDBオフィシャル・イメージにRust追加 セクション3 : エコシステムの作成例 $ sudo docker pull mongo $ sudo docker run -d -p 7878:7878 -p 27017:27017 --init --name svgqrcodedb mongo:latest $ sudo docker exec -it svgqrcodedb /bin/bash # echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null # apt update && apt upgrade -y # apt install curl # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh --インストーラー >[return] --リターンで既定のインストールを選択 --インストール終了後、Rustランタイム(&パッケージマネージャー)のパスを設定 # source $HOME/.cargo/env --コンパイラーインストール # apt install build-essential >[y] --yでインストールを開始 --コンパイラーインストール終了 # mkdir /home/rust # mkdir /home/rust/QRCodeCreation # chmod 777 /home/rust/QRCodeCreation # cd /home/rust/QRCodeCreation DockerのMongoDBオフィシャルイメージ 以降は以下の方法でプルグラムを作成できます 1.GitHubでLinux側へ共有 2.Visual Studio Code(要Docker Desktop)で編集 3.ソースをコピペ(Windows Arm向け) ポート2つ持つコンテナを起動 Bashでコンテナ内を操作 Rustのインストール
  • 39. Rustの実行とWindows側のプログラムの移植 セクション3 : エコシステムの作成例 # mkdir src # cd src # touch main.rs # apt install vim --インストーラー >[y] --yでインストールを選択 --インストール終了 # vim main.rs --vim ~[i] --iで挿入モード編集開始 fn main() { println!("Hello World!"); } ~[esc][:][w][enter] --[:][w][enter]で保存 ~[:][q][enter] --[:][q][enter]で終了 --vim終了後、コンパイルと実行 # rustc main.rs # ./main # vim main.rs …--main.rsとCargo.tomlの中身をvimでコピーする /home/rust/QRCodeCreation# cargo run
  • 40. ブラウザでQRコードのWebAssemblyを表示する セクション3 : エコシステムの作成例 $ sudo docker run -d --network host -p 7878:7878 -p 27017:27017 --init --name svgqrcodedb svgqrcodedb:v0.2 $ sudo docker exec -it svgqrcodedb /bin/bash # apt update && apt upgrade -y --# apt install pkg-config(入っていなかったら入れる) # rustup target add aarch64-unknown-linux-gnu # rustup toolchain install stable-aarch64-unknown-linux-gnu # cd /home/rust/QRCodeCreation --以下のどちらかを実行(この段階ではWebAssemblyではない。以下はCD/CIの運用設計によって変わる) # cargo build --bin create_qrcode_svg --target aarch64-unknown-linux-gnu --release or # rustup default stable-aarch64-unknown-linux-gnu # cargo build --bin create_qrcode_svg --release -- # cargo run --release
  • 41. Microsoft Developers Day 2022.02.03 セクション4 JavaScriptとの相互運用
  • 42. CD/CIレイヤー JavaScriptとの通信を作成する セクション4 : JavaScriptとの相互運用 Azure C# Ecosystem Container Rust Ecosystem On-premise JavaScript Ecosystem WebAssembly WebAssembly System Interface WebAssembly Blazor WebAssembly MongoDB Azure Storage Azure Static Web Apps 相互運用アーキテクチャ Node.js + Express Web app development environment C# Web mashup development environment Rust Stable function & data storage 外部APIをマッシュアップして スタティックコンテンツを提供 するAzure Webアプリ メッシュエンドポイントを形成 安定稼働が検証できているコ ンポーネント化された既存のプ ログラム・ナレッジリソース 開発が常に進行している継 続的インテグレーション開発 環境 既存JavaScriptコード ライブラリ等
  • 45. JavaScriptとの相互運用 セクション4 : JavaScriptとの相互運用 既存のJavaScriptの資産がある場合活用することが可能 DOMの操作(特にShadow DOM)の操作は JavaScriptに任せるべき その多くは、業務のステートをコミットするまでの洞察や試行 錯誤、情報収集など、エッジ・サイドでのユーザーステート (ユーザーエクスペリエンスのためのビューステートを含む)の ための操作であり、サービスサイドとの通信を必要としない。 高度に計画された運用設計では、ユーザーストーリーごとに マイクロサービスを計画できるドメイン・ドリブン・デザインなど の設計手法が多く存在し、ステート管理の設計によって JavaScriptとWebAssemblyの相互運用が必要となる シーンも増える
  • 47. 参考リンク 条件付きコンパイル https://doc.rust-jp.rs/the-rust-programming-language-ja/1.9/book/conditional-compilation.html The js-sys https://rustwasm.github.io/wasm-bindgen/contributing/js-sys/index.html Building a Single-Threaded Web Server:The Rust Programming Language https://doc.rust-lang.org/book/ch20-01-single-threaded.html RustからWebAssembly (wasm)を生成してJavaScriptとブリッジ通信してみる https://dev.classmethod.jp/articles/rust-webassembly-javascript/ rustwasm:crates.io https://crates.io/teams/github:rustwasm:core Crate web_sys https://rustwasm.github.io/wasm-bindgen/api/web_sys/ wabt:GitHub https://github.com/webassembly/wabt Platform Support:The rustc book https://doc.rust-lang.org/rustc/platform-support.html
  • 48. ◼ 本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に 対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。 ◼ 本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。 ◼ すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うこと は、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではあり ません。 ◼ Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給さ れる場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。 ◼ Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。 その他、記載されている会社名および製品名は、一般に各社の商標です。