SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
WebAssemblyの紹介
in Dentoo.LT #20
1
自己紹介
mizdra
3年I類CSプログラム
興味のあること
JavaScript/TypeScript
Rust/WebAssembly
ポケモン乱数調整
2
今日話すこと
3
WebAssemblyの紹介
4
目次
1. 何故WebAssemblyが必要とされるのか
2. WebAssemblyとは何か
3. Rust+WebAssemblyの始め方
5
何故WebAssemblyが
必要とされるのか
6
何故WebAssemblyが必要とされる
のか
これを説明するにはWebフロントエンドの歴史を
知る必要がある
太古のWebフロントエンド
現在のWebフロントエンド
7
太古のWebフロントエンド
低速なJavaScriptエンジン
Webページ装飾するための最小限のAPI
通知/高速なグラフィック処理などが扱えない
リッチなアプリはFlash/Java Appletが担当
リッチなアプリを作るのは困難だった
8
現在のWebフロントエンド
JavaScriptエンジンの高速化(JIT)
JavaScript自体の進化(ES2015+)
静的型システムの導入(TypeScript, Flow)
富豪的プログラミングの発展(VDOM)
新アーキテクチャの発明(Flux, BFF)
ネイティブアプリのようなUXの提供(PWA)
リッチなアプリのためのAPIの提供(WebRTC)
9
雑にまとめると...
Webが進化して
ネイティブアプリのような
機能やUXを提供する
リッチなアプリが作れるように
10
Webが進化することで
多くの課題が解決されてきた
11
しかし進化することで
新たに見えてきた課題も
12
現在のWebフロントエンドの課題
JITコンパイラの性能の限界
JavaScriptという言語仕様の問題
インタプリタ言語
動的型付け
要求スペックの向上
グラフィカルなゲームなど
13
性能問題の解決策
パフォーマンスを重視したAPIの導入
TypedArray
SIMD
WebGL
高速な代替言語の導入
WebAssembly
14
性能問題の解決策
パフォーマンスを重視したAPIの導入
TypedArray
SIMD
WebGL
高速な代替言語の導入
WebAssembly
15
WebAssemblyとは何か
16
WebAssemblyとは何か
ブラウザで動く低級言語
事前に任意の言語からコンパイルして生成
C/C++/Rust/Golang
静的型付け
JavaScriptよりも高速に動作する
17
なるほど
18
皆さんはこう思っているはず
19
WebAssembly
なんだか良さそう
20
とりあえず触ってみたい
21
でも触り方が分からない…
22
そんな人のために
お得な情報
23
http://www.mizdra.net/entry/2018/05/07/080000
24
WebAssembly 開発環境構築の本
Rust を用いたWebAssembly の開発環境を構築す
る手法を紹介する電子書籍
ハマりポイントの紹介
モジュールバンドラとの連携
関連ツールの紹介
私が書きました
JSer.info でも紹介された
今日は書籍の内容を掻い摘んでに紹介
25
はじめよう
Rust+WebAssembly
26
Rustのセットアップ
rustupをインストールするとコンパイラなどのツ
ール一式が揃う
## Rust をインストール
$ curl https://sh.rustup.rs -sSf | sh
$ export PATH="$HOME/.cargo/bin:$PATH"
## WebAssembly へのコンパイル機能をインストール
$ rustup target add wasm32-unknown-unknown
27
プロジェクトを作成
cargo new --lib でRust のライブラリ用のプロジェ
クトテンプレートを作成
Cargo.toml : プロジェクトの設定ファイル
src/lib.rs : エントリポイント
$ cargo new --lib hello-wasm
$ tree hello-wasm
hello-wasm
├── Cargo.toml
└── src
└── lib.rs
28
WebAssembly向けの設定を追加する
生成されるバイナリにはメタデータが含まれる
他のRustプログラムから利用される時に利用さ
れる
今回はwasmバイナリはJSからのみ利用されるので,
メタデータを付けないよう cdylib を設定
[package]
name = "hello-wasm"
version = "0.1.0"
authors = ["mizdra <pp.mizdra@gmail.com>"]
[lib]
crate-type = ["cdylib"]
29
Rustを書く
2 つの符号付き32bit 整数を引数として受け取り,
その和を返す関数
pub キーワードで外部に関数を公開
/src/lib.rs
#[no_mangle]
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
30
#[no_mangle] について
アトリビュート
ブロックやメソッドなどを修飾する構文
「Rustコンパイラに次の関数の名前をマングリン
グせずにコンパイルせよ」と指示
JavaScript から add という名前で関数にアクセス
できるようになる
31
コンパイルする
cargo build コマンドを使う
--target で生成するバイナリの種類をwasmに指定
release は最適化オプション
$ cargo build --target=wasm32-unknown-unknown --release
$ /target/wasm32-unknown-unknown/release/hello_wasm.wasm
32
JavaScriptからwasmを利用する
/index.html
<!DOCTYPE html>
<title>Hello, WebAssembly!</title>
<script>
const wasm = `./target/wasm32-unknown-unknown/release
/wasm_dev_book_hello_wasm.wasm`
fetch(wasm)
.then(response => response.arrayBuffer())
.then(bytes => WebAssembly.instantiate(bytes, {}))
.then(results =>
console.log(results.instance.exports.add(1, 2))
)
</script>
33
34
35
36
37
38
Q. 何故JSで再コンパイルするの?
39
A. OSはそのままではwasmを解釈
できないため
40
Q. 何故JSで再コンパイルするの?
ブラウザは様々なOSで動作する
だが, OSが解釈できる機械語はOSごとに異なる
ブラウザがOSが解釈できる機械語にコンパイルす
る
41
実行
HTTPサーバを立てて index.html にアクセス
$ npx http-server .
$ open http://127.0.0.1:8080
42
43
動いた
44
実際どれくらい速いの?
45
実際どれくらい速いの?
wasmで乱数調整補助ツール作ってみた
http://search-tinymt-seed.netlify.com
WebpackのバグでChromeでは動かない
Firefoxでの実行時間
JavaScript: 約300分
WebAssembly: 約13分
場合によってはJSのほうが速いことも
wasmのランタイムはまだ登場したばかり
46
まとめ
47
まとめ
JavaScriptよりも高速なブラウザで動く言語として
WebAssemblyが必要とされている
WebAssemblyはブラウザで動く低級言語
Rust+WebAssemblyの始め方を紹介した
48
まとめ
JavaScriptよりも高速なブラウザで動く言語として
WebAssemblyが必要とされている
WebAssemblyはブラウザで動く低級言語
Rust+WebAssemblyの始め方を紹介した
とりあえず電子書籍を読んでくれ!!
49

Weitere ähnliche Inhalte

Was ist angesagt?

Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築Hirata Tomoko
 
WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術Sho Okada
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - 健人 井関
 
CSS Nite LP26 CodeKitで始める次世代Web制作
CSS Nite LP26 CodeKitで始める次世代Web制作CSS Nite LP26 CodeKitで始める次世代Web制作
CSS Nite LP26 CodeKitで始める次世代Web制作Maboroshi.inc
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるHirata Tomoko
 
サーバ構築実践入門
サーバ構築実践入門サーバ構築実践入門
サーバ構築実践入門優之 田中
 
WordPressでの制作説明
WordPressでの制作説明WordPressでの制作説明
WordPressでの制作説明Toshiaki Endo
 
これから始める人のためのjQuery入門 先生:大竹 孔明
これから始める人のためのjQuery入門 先生:大竹 孔明これから始める人のためのjQuery入門 先生:大竹 孔明
これから始める人のためのjQuery入門 先生:大竹 孔明schoowebcampus
 
タスクランナー導入 〜とあるWordPress制作環境〜
タスクランナー導入 〜とあるWordPress制作環境〜タスクランナー導入 〜とあるWordPress制作環境〜
タスクランナー導入 〜とあるWordPress制作環境〜Masaya Kogawa
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発Tatsumi Naganuma
 
A 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web StackA 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web StackGoAzure
 
サーバ・VM+コンテナ管理Tips@オンライン合宿2020
サーバ・VM+コンテナ管理Tips@オンライン合宿2020サーバ・VM+コンテナ管理Tips@オンライン合宿2020
サーバ・VM+コンテナ管理Tips@オンライン合宿2020Yuki Nihei
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリットIto Kohta
 
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点Jun-ichi Sakamoto
 
About SnapKit - Open source lab -
About SnapKit - Open source lab -About SnapKit - Open source lab -
About SnapKit - Open source lab -Daisuke Yamashita
 

Was ist angesagt? (20)

Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
Mbed2013
Mbed2013Mbed2013
Mbed2013
 
WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築
 
WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
CSS Nite LP26 CodeKitで始める次世代Web制作
CSS Nite LP26 CodeKitで始める次世代Web制作CSS Nite LP26 CodeKitで始める次世代Web制作
CSS Nite LP26 CodeKitで始める次世代Web制作
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
 
Html5 nagoya 07
Html5 nagoya 07Html5 nagoya 07
Html5 nagoya 07
 
サーバ構築実践入門
サーバ構築実践入門サーバ構築実践入門
サーバ構築実践入門
 
WordPressでの制作説明
WordPressでの制作説明WordPressでの制作説明
WordPressでの制作説明
 
これから始める人のためのjQuery入門 先生:大竹 孔明
これから始める人のためのjQuery入門 先生:大竹 孔明これから始める人のためのjQuery入門 先生:大竹 孔明
これから始める人のためのjQuery入門 先生:大竹 孔明
 
タスクランナー導入 〜とあるWordPress制作環境〜
タスクランナー導入 〜とあるWordPress制作環境〜タスクランナー導入 〜とあるWordPress制作環境〜
タスクランナー導入 〜とあるWordPress制作環境〜
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発
 
A 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web StackA 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web Stack
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
サーバ・VM+コンテナ管理Tips@オンライン合宿2020
サーバ・VM+コンテナ管理Tips@オンライン合宿2020サーバ・VM+コンテナ管理Tips@オンライン合宿2020
サーバ・VM+コンテナ管理Tips@オンライン合宿2020
 
Hello, Node.js
Hello, Node.jsHello, Node.js
Hello, Node.js
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
 
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
 
About SnapKit - Open source lab -
About SnapKit - Open source lab -About SnapKit - Open source lab -
About SnapKit - Open source lab -
 

Ähnlich wie WebAssemblyの紹介

ASP.NETの進化とASP.NET Core Blazorの凄さ
ASP.NETの進化とASP.NET Core Blazorの凄さASP.NETの進化とASP.NET Core Blazorの凄さ
ASP.NETの進化とASP.NET Core Blazorの凄さSho Okada
 
Amebaプラットフォームの作りかた
Amebaプラットフォームの作りかたAmebaプラットフォームの作りかた
Amebaプラットフォームの作りかたKazunari Hara
 
フロントエンド技術の変遷
フロントエンド技術の変遷フロントエンド技術の変遷
フロントエンド技術の変遷Ryo Higashigawa
 
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例Joni
 
WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来Jun-ichi Sakamoto
 
CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025Toshiaki Baba
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Web Standards 2018
Web Standards 2018Web Standards 2018
Web Standards 2018Shogo Sensui
 
Web開発の最新トレンド ~1から知るASP.NET~
Web開発の最新トレンド ~1から知るASP.NET~Web開発の最新トレンド ~1から知るASP.NET~
Web開発の最新トレンド ~1から知るASP.NET~miso- soup3
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門miso- soup3
 
オープニング
オープニングオープニング
オープニングkonekto
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回龍一 田中
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~KLab株式会社
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみたngi group.
 
Web study
Web studyWeb study
Web studychibita
 
リアルタイムweb入門
リアルタイムweb入門リアルタイムweb入門
リアルタイムweb入門Hiromu Shioya
 
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築Joni
 

Ähnlich wie WebAssemblyの紹介 (20)

ASP.NETの進化とASP.NET Core Blazorの凄さ
ASP.NETの進化とASP.NET Core Blazorの凄さASP.NETの進化とASP.NET Core Blazorの凄さ
ASP.NETの進化とASP.NET Core Blazorの凄さ
 
Amebaプラットフォームの作りかた
Amebaプラットフォームの作りかたAmebaプラットフォームの作りかた
Amebaプラットフォームの作りかた
 
フロントエンド技術の変遷
フロントエンド技術の変遷フロントエンド技術の変遷
フロントエンド技術の変遷
 
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
 
WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来WebAssemblyが切り拓くフロントエンドWeb開発の未来
WebAssemblyが切り拓くフロントエンドWeb開発の未来
 
CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025CloudFront構築事例 ハートビーツ 20121025
CloudFront構築事例 ハートビーツ 20121025
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
Web Standards 2018
Web Standards 2018Web Standards 2018
Web Standards 2018
 
Web開発の最新トレンド ~1から知るASP.NET~
Web開発の最新トレンド ~1から知るASP.NET~Web開発の最新トレンド ~1から知るASP.NET~
Web開発の最新トレンド ~1から知るASP.NET~
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
オープニング
オープニングオープニング
オープニング
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
 
Varnish
VarnishVarnish
Varnish
 
Web study
Web studyWeb study
Web study
 
リアルタイムweb入門
リアルタイムweb入門リアルタイムweb入門
リアルタイムweb入門
 
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
.NET Core 3.0 で Blazor を使用した​フルスタック C# Web アプリ​の構築
 

WebAssemblyの紹介