Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Vanilla JS challenge
Search
tomoaki kanayama
February 11, 2024
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vanilla JS challenge
tomoaki kanayama
February 11, 2024
More Decks by tomoaki kanayama
See All by tomoaki kanayama
Gemini API で デロリアン
aknow2
0
160
Other Decks in Programming
See All in Programming
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
Heart of Swift Concurrency
koher
0
750
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
120
App Intentsのビルドプロセスを支える技術
kntkymt
0
370
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
550
wkhtmltopdfの次どうするか問題2026
willnet
1
100
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
460
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.7k
「新人AI禁止のその先へ ― 参加と協働のステップアップ」Vibe TOKYO, AI & CRAFT / 2026年8月21日
kentarowada
0
100
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
620
新卒PdEのリアル
ryu1013
1
500
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
560
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Believing is Seeing
oripsolob
1
220
Producing Creativity
orderedlist
PRO
348
41k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How to Ace a Technical Interview
jacobian
281
24k
Scaling GitHub
holman
464
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Making Projects Easy
brettharned
120
6.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Transcript
Vanilla JS challenge 金山智昭
だれ 金山智昭 (Kanayama Tomoaki) 三重県津市在住のプログラマーです Frontend(React, Vue, webgl) Apps (Electron,
ReactNative) Cloud (AWS, Firebase, Supabase) Backend (django, RoR) GeoVisualization Agile
去年末のある日 https://www.youtube.com/shorts/91WgzdDF3yk
アプリにしたら楽しそう
作った https://6-ro.com
今回開発する上での縛り 1. ブラウザで動作するWebアプリ プラットフォームとか考えるとネイティブ面倒 HTMLとjsのみで動作する 2. Vanilla jsで行く http://vanilla-js.com/ 要は全部自分で書く
モチベーション ReactとかVue、Three, p5とか.jsはもうお腹いっぱい 最近はWeb標準のAPIでも色々出来るようになってきている FWを使わずに、Web標準でどこまで快適に行けるか試してみよう
開始10分後
ただし、色々面倒なので以下は使う Vite 開発体験向上(HMR, Bundler, unittest) Typescript WebGL回りはコードがゴチャるのでTypescriptがあった方が安心 というかChatGPTが吐いたコードが、、、
Vanilla.jsで試したい事 コンポーネント指向の開発 AngularやVue,Reactでの流行り始めたやつ UI(ボタン、フォーム)とかパーツかして使い回せる様にして開発する 従来はCSSで実現してたが、DOMや振る舞いまで使い回せるところが違う Reactive 値が変わったら勝手にUIが更新されるよ!ってやつ(後述) CSS SCSSいらん CSS
in JSもいらん WebGL WebGPU WebGL2 WebGL
コンポーネント指向の開発 React // index.jsx function HelloWorld(props) { return <span className="title">Hello!
{props.name}<span> } function Root() { return <div> <HelloWorld name="world"> <HelloWorld name="vanilla js"> </div> }
コンポーネント指向の開発 Web component <!-- DOMを独自に定義 --> <hello-world name="world"> <hello-world name="Vanilla
JS"> class HelloWorld extends HTMLElement { connectedCallback() { const shadow = this.attachShadow({ mode: 'closed' }); // このコンポーネント専用のCSSが書ける shadow.innerHTML = /* html */ ` <style> span { text-align: center; } </style> <span>Hello ${ this.name }!</span>`; } } defineComponent('hello-world', HelloWorld)
Reactive 状態が変わったら勝手にUIが更新される Excelの表を想像
Reactive Web component <Counter id="counter" count="0"></counter> class Counter extends HTMLElement
{ // 属性の値が変わったら更新される attributechangedcallback() { const shadow = this.shadowRoot; const count = this.getAttribute('count') shadow.innerHTML = /* html */ ` <span>Count: ${ count }!</span>`; } } const counter = document.getElementById('counter') counter.setAttribute("count", "6")
Reactive 状態管理 特に目新しい事が無くて、面白味がないので割愛 いわゆるObserberパターンで実装
CSS コンポーネントに閉じられるので、名前被りの心配は要らない(BEMとか要らない) グローバルなCSSが出来ないのが逆に面倒。色とかは、共通CSSを準備して全ての コンポーネントで読み込んでいる。かなり冗長 CSSのネストもサポートされはじめたしSCSSは不要では?
WebGL WebGPUを使ってみたかったが、Safariとかが未対応だったのでWebGL2を採用 正直、簡単に書きたいならライブラリ使った方が良い Shaderで細かく調整したいなら、生で書いた方が楽そう 特に今回は全体を回転させたり、特殊な事を色々したかったので、ライブラリ使 わずにやったのは正解だった気がする # vertex ... void
main() { ... mat2 rotation = mat2(c, -s, s, c); gl_Position = vec4(rotation * a_position, 0.0, 1.0); } # fragment void main(){ gl_Frag_color = v_color; }
まとめ FWのバージョンアップに悩まされないし、趣味で書くにはフレームワーク要らな いんじゃね?とはなる まともに仕事で開発しようと思ったら、まだまだ辛い チームで開発するにはオレオレフレームワークにせざるを得ないので、規律を決 めるのが面倒そう
None