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
RiotJS + CSS #meguroes
Search
mizuki_r
April 19, 2016
Technology
750
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RiotJS + CSS #meguroes
Meguro.es #3 でのトーク内容です
mizuki_r
April 19, 2016
More Decks by mizuki_r
See All by mizuki_r
FrontendUp_新規事業で_Remixを採用した理由と対策.pdf
rymizuki
0
270
税理士ドットコムの 技術的挑戦 #tapioca_lt
rymizuki
0
320
PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy
rymizuki
1
860
モダンとレガシー #gotandaem
rymizuki
0
610
Vuexに型を付けるパターンを調べた #gotandajs
rymizuki
0
160
DockerでNodeの開発は厳しいのか? #gotandajs
rymizuki
3
430
マネージャー!きみは何者だ! #gotandaem
rymizuki
0
1.9k
物語を楽しむための物語論
rymizuki
0
570
失敗と向き合う
rymizuki
0
1.6k
Other Decks in Technology
See All in Technology
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
290
AI導入は済んだ。次は統制を作り替える番だ_AI×開発組織 Summit 2026
techtekt
PRO
0
220
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
340
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
250
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
420
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
260
go-sqletch
moznion
0
140
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
The untapped power of vector embeddings
frankvandijk
2
1.9k
A Tale of Four Properties
chriscoyier
163
24k
Navigating Weather and Climate Data
rabernat
0
560
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Statistics for Hackers
jakevdp
799
230k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Transcript
RiotJSͱCSS 2016/04/19 Meguro.es #3 @mizuki_r
PROFILE @mizuki_r 5XJUUFS!NJ[VLJ@S (JUIVCSZ@NJ[VLJ OQNNJ[VLJ@S "OHVMBS 3JPU+4·ΘΓͷ͍ख (PUBOEB+4͔Β͖ͬͯ·ͨ͠ 2
AGENDA ▸ RiotJSͱ ▸ RiotJS + CSS ▸ RiotJS +
CSS + Webpack ▸ Conclusion
RIOTJSͱ INTRODUCTION
RIOTJSͱ A React-like user interface micro-library ▸ ReactͬΆ͍খ͞ͳUIϥΠϒϥϦ ▸ React͕38.56KBͰRiot͕8.61KBʢhttp://riotjs.com/ja/
▸ API͕গͳ͘ɺֶशίετ͕͍ ▸ ඞཁ࠷ݶͷػೳͷΈͰߏ͞ΕͨɺϛχϚϜελʔτΞο ϓͳײ͡ͷϥΠϒϥϦ
<todo> <!-- layout --> <h3>{ opts.title }</h3> <ul> <li each={
item, i in items }>{ item }</li> </ul> <form onsubmit={ add }> <input> <button>Add #{ items.length + 1 }</button> </form> <!-- logic --> <script> this.items = [] add(e) { var input = e.target[0] this.items.push(input.value) input.value = '' } </script> <todo>
<todo> <!-- layout --> <h3>{ opts.title }</h3> <ul> <li each={
item, i in items }>{ item }</li> </ul> <form onsubmit={ add }> <input> <button>Add #{ items.length + 1 }</button> </form> <!-- logic --> <script> this.items = [] add(e) { var input = e.target[0] this.items.push(input.value) input.value = '' } </script> <todo> ίϯϙʔωϯτΛఆٛ
<todo> <!-- layout --> <h3>{ opts.title }</h3> <ul> <li each={
item, i in items }>{ item }</li> </ul> <form onsubmit={ add }> <input> <button>Add #{ items.length + 1 }</button> </form> <!-- logic --> <script> this.items = [] add(e) { var input = e.target[0] this.items.push(input.value) input.value = '' } </script> <todo> DOMͷఆٛ
<todo> <!-- layout --> <h3>{ opts.title }</h3> <ul> <li each={
item, i in items }>{ item }</li> </ul> <form onsubmit={ add }> <input> <button>Add #{ items.length + 1 }</button> </form> <!-- logic --> <script> this.items = [] add(e) { var input = e.target[0] this.items.push(input.value) input.value = '' } </script> <todo> ৼΔ͍ͷఆٛ
RIOTJSͱ ؆୯ʹ͑Δখ͞ͳϥΠϒϥϦ ▸ JavaScript in HTML ▸ গͳ͍API ▸ lifecycle
(mount, update, updated, unmount) ▸ update ▸ yield ▸ dom events
RIOTJSͱ ·ͱΊ ▸ খͯ͘͞खૣ࢝͘ΊΒΕΔϛχϚϜͳUIϥΠϒϥϦ
RIOTJS+CSS RIOTJSʹ͓͚ΔCSSͷར༻ํ๏
RIOTJS + CSS CSSͷهड़ ▸ λάͷதʹ `<style>` Λهड़͢Δ ▸ `<style>`
ͷதʹCSSΛهड़͢Δ
RIOTJS + CSS CSSͷهड़ <todo> <!-- layout --> <h3>{ opts.title
}</h3> <style> todo { display: block } todo h3 { font-size: 120% } </style> <todo>
RIOTJS + CSS Scoped CSSͷهड़ ▸ λάͷதʹ `<style scoped>` Λهड़͢Δ
▸ `<style>` ͷதʹCSSΛهड़͢Δ ▸ `:scope` ͷٖࣅཁૉʹελΠϧΛͯΔ
RIOTJS + CSS Scoped CSSͷهड़ <todo> <!-- layout --> <h3>{
opts.title }</h3> <style scoped> scope: { display: block } h3 { font-size: 120% } </style> <todo>
RIOTJS + CSS λάΛϕʔεͱͨ͠ελΠϦϯά ▸ ͜ͷ̎ͭͷॻ͖ํಉ݁͡ՌʹͳΔ <todo> <!-- layout -->
<h3>{ opts.title }</h3> <style> todo { display: block } todo h3 { font-size: 120% } </style> <todo> <todo> <!-- layout --> <h3>{ opts.title }</h3> <style scoped> scope: { display: block } h3 { font-size: 120% } </style> <todo>
RIOTJS + CSS headλάͷૠೖ ▸ λάͷ෦ʹهࡌ͞Εͨ `<style>` `<head>` ͷඌʹૠ
ೖ͞ΕΔ ▸ Ұૠೖ͞ΕͨΒɺ࠶ૠೖ͞Εͳ͍ ▸ shadow-domͰͳ͍͕ɺ͍ۙΞϓϩʔνΛऔΔ
RIOTJS + CSS ·ͱΊ ▸ λάͷதʹ `<style>` Λهड़͠ɺͦ͜ʹCSSΛॻ͘ ▸ `<style>`
`<head>` ͷඌʹૠೖ͞ΕΔ ▸ `<style scoped>` Λ͏͜ͱͰɺλά໊ͷهࡌΛলུͰ͖Δ
RIOTJS+CSS+WEBPACK CSSϥΠϒϥϦͱͷ࿈ܞ
RIOTJS + CSS + WEBPACK CSS༷ʑͳϥΠϒϥϦʹࢧ͑ΒΕ͍ͯΔ ▸ autoprefixer ▸ meta
css ▸ postcss ▸ etc… ͜ΕΒͷԸܙΛ͋·ͣ͞ड͚͍ͨ!!!
RIOTJS + CSS + WEBPACK webpackͷར༻ ▸ հলུ ▸ riotjs-loader
+ style-loader + css-loader + anywhere
RIOTJS + CSS + WEBPACK webpackͷར༻ module: { preLoaders: [
{ test: /\.tag$/, exclude: /node_modules/, loader: 'riotjs- loader' }, ], loaders: [ { test: /\.css$/, exclude: /node_modules/, loader: 'style-loader! css-loader!postcss-loader' } ] }, postcss: () -> return [ require('postcss-calc') require('postcss-nested') require('autoprefixer') ]
RIOTJS + CSS + WEBPACK webpackͷར༻ var style = require(‘./style’)
<todo> <!-- layout --> <h3>{ opts.title }</h3> <style>{ style }</style> <todo>
RIOTJS + CSS + WEBPACK webpackΛ͏ϝϦοτ ▸ λάͷఆٛͱɺελΠϧͷఆٛΛҰॹʹཧͰ͖Δ ▸ σΟϨΫτϦʹࠝแͰ͖Δ
▸ ίϯϙʔωϯτͱͯ͠ɺใઃܭɾৼΔ͍ɾσβΠϯ͕ಠ ཱ͠ɺΞϓϦέʔγϣϯ͔Βૄ݁߹ʹͳΔ
RIOTJS + CSS + WEBPACK ·ͱΊ ▸ webpack͏ͱ͍͍Αʂ ▸ webpackΛ͏ͱίϯϙʔωϯτʹσβΠϯ·ͰแͰ͖
Δ ▸ ΞϓϦέʔγϣϯͱίϯϙʔωϯτΛૄʹͰ͖Δ
CONCLUSION ·ͱΊͱɺ͜Ε͔ΒͷCSSઃܭ
CONCLUSION RiotJSͱCSSΛ͍͍ײ͡ʹ࿈ܞͤ͞Δํ๏ͷհ ▸ RiotJSͰCSSΛ͏ʹɺλάʹ `<style>` Λॻ͘ ▸ `<style>` ʹهࡌ͞ΕͨCSS `<head>`
ͷඌʹૠೖ ▸ webpackΛͬͯίϯϙʔωϯτʹσβΠϯΛ࣋ͨͤΔ
CONCLUSION ίϯϙʔωϯτࢦ࣌ͷCSSઃܭ ▸ ίϯϙʔωϯτʹελΠϧΛӅṭ͢Δ࣌ ▸ λάʹରͯ͠ελΠϧΛͯΔ ▸ ˠࢠʹରͯ͠ɺmodifierͰίϯϙʔωϯτ֎͔Β ෦ߏΛҙࣝ͠ͳ͍ૄ݁߹ͳελΠϧ੍ޚ ▸
ίϯϙʔωϯτͱͯ͠ใઃܭɾৼΔ͍ɾσβΠϯΛந Խ͢Δ͜ͱͰɺͦΕ୯ମͷࠩ͠ସ͑ΛΑΓ؆୯ʹ
CONCLUSION ࠓޙͷ՝ ▸ ίϯϙʔωϯτͲ͜·ͰͷσβΠϯΛ͖͔࣋ͭʁ ▸ ৭ʁϨΠΞτʁ༨നʁܗʁ ▸ ͜ͷลΓDDDͷʮڥքΛҾ͘ʯ͋ͨΓͷφϨοδ͕ඞ ཁͦ͏ ▸
ࠓ·ͰҎ্ʹσβΠφͱΤϯδχΞ͕ڠྗͯ͠ઃܭΛ٧Ίͯ ͍͘ඞཁ͕͋Γͦ͏
CONCLUSION ࠷ޙʹ ▸ RiotJS؆୯ʹखૣ͘ϓϩτλΠϐϯάͰ͖ΔͷͰ͓͢͢Ί Ͱ͢ʂʂʂ
ۓٸࠂ ͨ͐͝͡ʔ͔Βͷ͓Βͤ
6/3ʹGontanda.js #4 ͷ։ ࠵Λ༧ఆͯ͠·͢ʂ @pine613 ͨ͐͝͡ʔ͔Βͷ͓Βͤ
ڵຯ͋Δํͥͻ gotanda.js.org ʂ @pine613 ͨ͐͝͡ʔ͔Βͷ͓Βͤ
THANKS!