SlideShare a Scribd company logo
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
toranoana.deno #0

虎の穴ラボ

奥谷 一陽

今まで公開してきた

Deno Third Party Modules

-- Deno での WebAssembly の利用の話 --

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
自己紹介

奥谷 一陽



所属:虎の穴ラボ株式会社

担当:とらコインSHOPなど新規事業系の開発



おすすめコンテンツ:

   『お耳に合いましたら』

   『機界戦隊ゼンカイジャー』



Twitter:@okutann88

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
今までに公開した Deno Third Party Modules

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
今までに公開した Deno Third Party Modules

asset_builder

base64 エンコードしたファイルを埋め込んだ、

JavaScript ファイルを作るツール

deno-csrf

- Rust のrust-csrf クレートを WebAssembly を介して

Denoから使用できるようにしたモジュール

js_with_embedded_wasm

- wasm-bindgen で作られた WebAssembly を埋め込んだ 

JavaScript ファイルを作るツール

今日の主な話

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.


WebAssembly はモダンなウェブブラウザーで実行できる新しいタイプのコードで
す。ネイティブに近いパフォーマンスで動作するコンパクトなバイナリー形式の低
レベルなアセンブリ風言語です。さらに、 C/C++ や Rust のような言語のコンパイ
ル対象となって、それらの言語をウェブ上で実行することができます。
WebAssembly は JavaScript と並行して動作するように設計されているため、両方
を連携させることができます。

(MDNより引用)

WebAssembly とは?

要するに、

JavaScript と連携してバイナリ形式のプログラムをブラウザで使える



何がいいのか?

C、C++ 、Rustなどのライブラリ資産をブラウザで動作させられる

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
deno-csrf で使った WebAssembly の作り方

Rust で、WebAssembly を作成するに当たり、

読み込むためのJavaScript やTypeScript 型定義 なども作成してくれる。

Deno 向けのオプションもある。

=>GOOD!



wasm-bindgenを使う

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
しかし! 生成されたJavaScriptは....

Deno.readFileSync を使っており、ネットワークから読み込むことを前提にして
いない!

deno.land/x で公開上の障害に!

でも、deno.land/x で公開したい!

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
Deno 公式のスタンスは?

3種類の方法を案内

1. Webassembly をUint8Array に変換して、ソースコードに載せる

https://deno.land/manual/getting_started/webassembly より引用
2. Deno.readFile を使う(wasm-bindgen で採用されている方針)

3. WebAssembly.instantiateStreaming を使う
  ホストするサーバが MIME type application/wasm に対応が必須!

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
Deno 公式のスタンスは?

3種類の方法を案内

1. Webassembly をUint8Array に変換して、ソースコードに載せる

https://deno.land/manual/getting_started/webassembly より引用
2. Deno.readFile を使う(wasm-bindgen で採用されている方針)

3. WebAssembly.instantiateStreaming を使う
  ホストするサーバが MIME type application/wasm に対応が必須!

deno-csrf で採用した方法

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
Webassembly を Uint8Array に変換して、ソースコードに載せる

方針は立ったが、探してはみたものの作成するツールは無い!?

なので作りました!

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
js_with_embedded_wasm を作りました

wasm-bindgen で作られた WebAssembly を埋め込んだ 

JavaScript ファイルを作るツール

https://deno.land/x/js_with_embedded_wasm@0.0.1
Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
js_with_embedded_wasm を作りました

変換

=> WebAssembly を import で扱える JavaScript として配布できる!

wasm-bindgen で生成されたコード 

js_with_embedded_wasm で変換したコード 

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
まとめ

・Deno で WebAssembly を使う(呼び出す)事自体は、かなり簡単

・WebAssembly を作成する環境もかなり整っていると思う

・しかし、deno.land/x で配布するには超える壁がある

・ツールを作ったので、ぜひWebAssemblyで、Denoを拡張してください

Copyright  (C) 2021 Toranoana Inc. All Rights Reserved.
ありがとうございました!


More Related Content

PDF
20210528 aws arm_ugokasitemita
PDF
Deno の node 互換モードと ソケット
PDF
Deno で始めるフロントエンド
PDF
Fantiaから学ぶgcp運用のノウハウ
PDF
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる
PDF
Amplify Studioを使ってみた
PDF
Deno を aws fargate で動かす
PDF
仕事部屋の温度管理をLambdaで実施した話
20210528 aws arm_ugokasitemita
Deno の node 互換モードと ソケット
Deno で始めるフロントエンド
Fantiaから学ぶgcp運用のノウハウ
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる
Amplify Studioを使ってみた
Deno を aws fargate で動かす
仕事部屋の温度管理をLambdaで実施した話

What's hot (20)

PDF
【Saitama.js】Denoのすすめ
PDF
GCPの画像認識APIの紹介
PDF
Cloud runのオートスケールを検証してみる
PDF
サーバサイドKotlinへの入門 Ktor編
PDF
DeNAのゲーム開発を支える技術 (クライアントサイド編)
PPTX
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
PDF
Effective web performance tuning for smartphone
PPT
FINAL FANTASY Record Keeper の作り方
PDF
FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話
PDF
FFRK cocos2d xレイヤーの最適化
PDF
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
PDF
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
PPTX
DeNA private cloudのその後 #denatechcon
PDF
DeNAインフラの今とこれから - 今編 -
PDF
RustでWebブロック崩し作ってみた
PDF
FINAL FANTASY
 Record Keeper 演出データについて
PPTX
マンガボックスのiOS10プッシュ通知導入事例
PPTX
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
PDF
DeNA流cocos2d xとの付き合い方
PPT
制作を支えたツール達 (パズル戦隊デナレンジャー)
【Saitama.js】Denoのすすめ
GCPの画像認識APIの紹介
Cloud runのオートスケールを検証してみる
サーバサイドKotlinへの入門 Ktor編
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
Effective web performance tuning for smartphone
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話
FFRK cocos2d xレイヤーの最適化
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
DeNA private cloudのその後 #denatechcon
DeNAインフラの今とこれから - 今編 -
RustでWebブロック崩し作ってみた
FINAL FANTASY
 Record Keeper 演出データについて
マンガボックスのiOS10プッシュ通知導入事例
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
DeNA流cocos2d xとの付き合い方
制作を支えたツール達 (パズル戦隊デナレンジャー)
Ad

Similar to 今まで公開してきた Deno Third Party Modules -- Deno での WebAssembly の利用の話 -- (6)

PDF
Denoハンズオン【とらのあなラボ】
PDF
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
PDF
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
PPTX
Rust + web assemblyやってみた
PDF
WebAssemblyの紹介
PPTX
Web Assembly in action
Denoハンズオン【とらのあなラボ】
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
Rust + web assemblyやってみた
WebAssemblyの紹介
Web Assembly in action
Ad

More from 虎の穴 開発室 (20)

PDF
FizzBuzzで学ぶJavaの進化
PDF
Railsのデバッグ どうやるかを改めて確認する
PDF
虎の穴ラボ エンジニア採用説明資料 .pdf
PDF
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
PDF
toranoana.deno #6 アジェンダ 採用説明
PDF
Deno 向け WEB 開発用のツールを作ったので 紹介します
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
PDF
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
PDF
GitHub APIとfreshで遊ぼう
PDF
通販開発部の西田さん「通販開発マネジメントの5ルール」
PDF
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
PDF
セキュリティを強化しよう!CloudArmorの機能解説
PDF
いいテスト会 (スプリントレビュー) をやろう!
PDF
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
PDF
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
PDF
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
PDF
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
PDF
【20220120 toranoana.deno#4】denoでffiの続き
PDF
虎の穴ラボ エンジニア採用説明資料
PDF
虎の穴ラボにおけるリモートワークの働き方
FizzBuzzで学ぶJavaの進化
Railsのデバッグ どうやるかを改めて確認する
虎の穴ラボ エンジニア採用説明資料 .pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
toranoana.deno #6 アジェンダ 採用説明
Deno 向け WEB 開発用のツールを作ったので 紹介します
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
GitHub APIとfreshで遊ぼう
通販開発部の西田さん「通販開発マネジメントの5ルール」
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
セキュリティを強化しよう!CloudArmorの機能解説
いいテスト会 (スプリントレビュー) をやろう!
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
【20220120 toranoana.deno#4】denoでffiの続き
虎の穴ラボ エンジニア採用説明資料
虎の穴ラボにおけるリモートワークの働き方

今まで公開してきた Deno Third Party Modules -- Deno での WebAssembly の利用の話 --

  • 1. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. toranoana.deno #0
 虎の穴ラボ
 奥谷 一陽
 今まで公開してきた
 Deno Third Party Modules
 -- Deno での WebAssembly の利用の話 --

  • 2. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 自己紹介
 奥谷 一陽
 
 所属:虎の穴ラボ株式会社
 担当:とらコインSHOPなど新規事業系の開発
 
 おすすめコンテンツ:
    『お耳に合いましたら』
    『機界戦隊ゼンカイジャー』
 
 Twitter:@okutann88

  • 3. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 今までに公開した Deno Third Party Modules

  • 4. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 今までに公開した Deno Third Party Modules
 asset_builder
 base64 エンコードしたファイルを埋め込んだ、
 JavaScript ファイルを作るツール
 deno-csrf
 - Rust のrust-csrf クレートを WebAssembly を介して
 Denoから使用できるようにしたモジュール
 js_with_embedded_wasm
 - wasm-bindgen で作られた WebAssembly を埋め込んだ 
 JavaScript ファイルを作るツール
 今日の主な話

  • 5. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. 
 WebAssembly はモダンなウェブブラウザーで実行できる新しいタイプのコードで す。ネイティブに近いパフォーマンスで動作するコンパクトなバイナリー形式の低 レベルなアセンブリ風言語です。さらに、 C/C++ や Rust のような言語のコンパイ ル対象となって、それらの言語をウェブ上で実行することができます。 WebAssembly は JavaScript と並行して動作するように設計されているため、両方 を連携させることができます。
 (MDNより引用)
 WebAssembly とは?
 要するに、
 JavaScript と連携してバイナリ形式のプログラムをブラウザで使える
 
 何がいいのか?
 C、C++ 、Rustなどのライブラリ資産をブラウザで動作させられる

  • 6. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. deno-csrf で使った WebAssembly の作り方
 Rust で、WebAssembly を作成するに当たり、
 読み込むためのJavaScript やTypeScript 型定義 なども作成してくれる。
 Deno 向けのオプションもある。
 =>GOOD!
 
 wasm-bindgenを使う

  • 7. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. しかし! 生成されたJavaScriptは....
 Deno.readFileSync を使っており、ネットワークから読み込むことを前提にして いない!
 deno.land/x で公開上の障害に!
 でも、deno.land/x で公開したい!

  • 8. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. Deno 公式のスタンスは?
 3種類の方法を案内
 1. Webassembly をUint8Array に変換して、ソースコードに載せる
 https://deno.land/manual/getting_started/webassembly より引用 2. Deno.readFile を使う(wasm-bindgen で採用されている方針)
 3. WebAssembly.instantiateStreaming を使う   ホストするサーバが MIME type application/wasm に対応が必須!

  • 9. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. Deno 公式のスタンスは?
 3種類の方法を案内
 1. Webassembly をUint8Array に変換して、ソースコードに載せる
 https://deno.land/manual/getting_started/webassembly より引用 2. Deno.readFile を使う(wasm-bindgen で採用されている方針)
 3. WebAssembly.instantiateStreaming を使う   ホストするサーバが MIME type application/wasm に対応が必須!
 deno-csrf で採用した方法

  • 10. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. Webassembly を Uint8Array に変換して、ソースコードに載せる
 方針は立ったが、探してはみたものの作成するツールは無い!?
 なので作りました!

  • 11. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. js_with_embedded_wasm を作りました
 wasm-bindgen で作られた WebAssembly を埋め込んだ 
 JavaScript ファイルを作るツール
 https://deno.land/x/js_with_embedded_wasm@0.0.1
  • 12. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. js_with_embedded_wasm を作りました
 変換
 => WebAssembly を import で扱える JavaScript として配布できる!
 wasm-bindgen で生成されたコード 
 js_with_embedded_wasm で変換したコード 

  • 13. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. まとめ
 ・Deno で WebAssembly を使う(呼び出す)事自体は、かなり簡単
 ・WebAssembly を作成する環境もかなり整っていると思う
 ・しかし、deno.land/x で配布するには超える壁がある
 ・ツールを作ったので、ぜひWebAssemblyで、Denoを拡張してください

  • 14. Copyright  (C) 2021 Toranoana Inc. All Rights Reserved. ありがとうございました!