Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2年かけて Deno に DOMMatrix を実装した話 / How I implement...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
petamoriken / 森建
July 24, 2026
Programming
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
FE Yatai Talks vol.2
https://fe-yatai.connpass.com/event/396289/
petamoriken / 森建
July 24, 2026
More Decks by petamoriken / 森建
See All by petamoriken / 森建
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.2k
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
280
Module Harmony
petamoriken
3
1.1k
Denoでフロントエンド開発 2025年春版 / Frontend Development with Deno (Spring 2025)
petamoriken
1
1.6k
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
680
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
350
フロントエンドの標準仕様をどう追っているか / How I follow the frontend standards specs
petamoriken
4
2.8k
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
690
DOM Observable
petamoriken
1
390
Other Decks in Programming
See All in Programming
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
Building an Out-of-Order CPU
latte72
0
690
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
アクセシビリティから考える情報設計
high_g_engineer
0
130
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
110
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
140
[KotlinConf Extended South Korea 2026] KotlinConf 2026 발표자 후기
wisemuji
0
100
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
170
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
180
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Skip the Path - Find Your Career Trail
mkilby
1
220
WCS-LA-2024
lcolladotor
0
820
Google's AI Overviews - The New Search
badams
0
1.6k
Automating Front-end Workflow
addyosmani
1369
210k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Designing for Performance
lara
611
70k
Transcript
2年かけて Deno に DOMMatrix を実装した話 FE Yatai Talks vol.2 pixiv
Inc. 森内建太 @petamoriken 2026.7.24
自己紹介 petamoriken WebDev in Fukuoka 2 • Web エンジニア •
Deno / ECMAScript コントリビューター • FEC Fukuoka 2026 ゲストスピーカー
https://scrapbox.io/petamoriken/ 3
唯一型チェック機能を持つランタイム Deno • TypeScript (tsc) 同梱 ◦ tsgo (TS v7)
をデフォルトにする作業中 ◦ JSX サポート • Linter, Formatter, LSP 内蔵 ◦ deno lint で Oxlint を使う変更が議論中 ▪ Oxlint に Type-Aware Linting が来ましたね 4
5
今日は Web 標準 API のニッチな話 6
DOMMatrix • 4x4 の行列で回転、平行移動などの線形変換を扱う ◦ 2D の場合は 2x3 のアフィン行列として扱われる const
matrix = new DOMMatrix() .rotateSelf(0, 0, 90) .translateSelf(20, 30); console.log(matrix.toString()); // "matrix(0, 1, -1, 0, -30, 20)" 7
何故 Deno に DOMMatrix を入れるのか • SSR で CSS Transforms
生成に使える(かも) • WebGPU で GPU に変換行列を送るのに使える • OffscreenCanvas で Canvas 2D を実装したい ◦ Canvas 2D 実装には DOMMatrix が必要 ◦ コンテンツに合わせて OGP の画像生成が出来る ◦ deno desktop の Raw モードでゲームを作りたい 8
コンテンツに合わせて OGP 画像生成 • Cloud Functions で node-canvas を使ったことがある ◦
導入や設定が大変 ◦ 読み込みでよくタイムアウトしてしまっていた • 今なら Satori や skia-canvas を採用するのがよさそう ◦ 絵文字対応とか大変そう • Deno でネイティブサポートしてもろもろ解決! 9
deno desktop • Deno 2.9 で入ったデスクトップアプリを作る機能 • Next.js などのフレームワークからアプリが作れる •
色々なモードがある ◦ WebView モード: OS のブラウザ使用(Tauri 相当) ◦ CFE モード: Chromium 埋め込み(Electron 相当) ◦ Raw モード: ブラウザなし(現状 WebGPU のみ) 10
DOMMatrix(再掲) • 4x4 の行列で回転、平行移動などの線形変換を扱う ◦ 2D の場合は 2x3 のアフィン行列として扱われる const
matrix = new DOMMatrix() .rotateSelf(0, 0, 90) .translateSelf(20, 30); console.log(matrix.toString()); // "matrix(0, 1, -1, 0, -30, 20)" 11
DOMMatrix は CSS Transforms をパースする • CSS Transfroms には関数が 20
個定義されている • パーサーを実装するのに CSS 仕様を読み必要がある const matrix = new DOMMatrix( "rotate(90deg) translate(20px, 30px)" ); console.log(matrix.toString()); // "matrix(0, 1, -1, 0, -30, 20)" 12
CSS Transforms は Values and Units に依存 • 引数内で CSS
Values and Units の関数が使える ◦ Values and Units には関数が 21 個定義されている ◦ 四則演算が使える • 全部頑張って実装する const matrix = new DOMMatrix( "translateX(calc(1px + 2px)) rotate(atan2(3, 2))" ); 13
14
CSS 4 から異なる次元の掛け算・割り算可能に • 四則演算の途中では物理量が基本次元でなくてもよい • が、頑張る…… 15
16
なんやかんや実装し、マージされた • 詳細は Zenn の記事へ! 17
まとめ • Deno は便利なのでみんな使ってね ◦ TypeScript を同梱している ◦ Deno 2.9
で入った deno desktop が面白そう • Web 標準 API に行列を扱う DOMMatrix がある ◦ 2年かけて Deno に実装した ◦ CSS Functions のパーサーを作るのは結構大変 18
Deno に Canvas 2D 実装中 • vello + wgpu と
vello_cpu を使っている 19