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

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

PDF
Denoハンズオン【とらのあなラボ】
虎の穴 開発室
 
PDF
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
zaru sakuraba
 
PDF
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
虎の穴 開発室
 
PPTX
Rust + web assemblyやってみた
tak
 
PDF
WebAssemblyの紹介
mizdra
 
PPTX
Web Assembly in action
t-kihira
 
Denoハンズオン【とらのあなラボ】
虎の穴 開発室
 
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
zaru sakuraba
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
虎の穴 開発室
 
Rust + web assemblyやってみた
tak
 
WebAssemblyの紹介
mizdra
 
Web Assembly in action
t-kihira
 
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の続き
虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料
虎の穴 開発室
 
虎の穴ラボにおけるリモートワークの働き方
虎の穴 開発室
 

Recently uploaded (10)

PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 

今まで公開してきた 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/[email protected]
  • 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. ありがとうございました!