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
vanilla-extractを使ってみた!with React
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Azusa Okamoto
April 24, 2022
Programming
870
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
vanilla-extractを使ってみた!with React
Azusa Okamoto
April 24, 2022
More Decks by Azusa Okamoto
See All by Azusa Okamoto
GraphQLでAPI開発 やってみよう!
azunyan
0
37
「わたし色」の見方で拓く世界
azunyan
0
28
ちゃんとSvelte, Hello Worldした!
azunyan
0
73
最近取り組んでいることについて喋ってみる
azunyan
0
22
フロントエンドエンジニアが関数型プログラミングに出会った話
azunyan
0
120
TECH WOMAN KANSAIの 取り組みと今後~2024年の振り返りと2025年へ~
azunyan
0
100
Go初心者が開発やってみた!
azunyan
1
570
デブサミウーマン2023 アウトプットって何が良いの?
azunyan
0
1.3k
個人的に楽しかった実装2022
azunyan
0
150
Other Decks in Programming
See All in Programming
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
Inside Stream API
skrb
1
690
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
340
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
2
1.4k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.3k
スマートグラスで並列バイブコーディング
hyshu
0
120
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
110
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
240
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
490
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
560
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
Claude Code のすすめ
schroneko
67
230k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Code Review Best Practice
trishagee
74
20k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Typedesign – Prime Four
hannesfritz
42
3.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
vanilla-extractを使ってみた! with React 2022/04/24_とにかくほめる!マウントなしのLT会 あずにゃん
自己紹介 フロントエンドエンジニア。 言語: JavaScript・TypeScript FW/ライブラリ: Vue.js・React・jQuery @azunyan_eng
今日お話しすること 1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 4 感想 5
参考資料
今日お話しすること 先月、microCMSさんのLT会で vanilla-extractを知った! 見やすそうだし、CSS Modulesだし... なんか、良さそう!
今日お話しすること styled-componentsやSassを使った業務経験が 過去にあり。
1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 4 感想 5 参考資料
vanilla-extractとは 2021年5月リリース。 CSS Modulesの考え方がベース。 オブジェクト形式で記述。
1 vanilla-extractとは 3 つまづいたこと 4 感想 5 参考資料 2 主な使い方
主な使い方 提供されているAPIと関数を 組み合わせて利用!
Styling API〜style~ export = ({ : , : }); const
toDoStyle style display justifyContent 'flex' 'space-between'
Styling API~globalStyle~ 全体を通して共通化したいスタイルを記述。
Styling API~globalStyle~ globalStyle( , { : , : , :
, : , : , : }); 'body, #root' '#FFFFFF' '#1A1A1A' '0' 'flex' 'column' '100vh' backgroundColor color margin display flexDirection minHeight
Styling API~globalStyle~ import ; "./styles/global.css"
Styling API~createTheme~ 同じcss.tsファイル内でのみ使える変数を 作成!
Styling API~createTheme~ export export , = ({ : { :
} }); = ({ : . . }); const const [themeClass vars] alertBtn vars createTheme style background alert backgroundColor background alert 'red'
Styling API~createTheme~ < = > = > 全て削除する div button
=> button div className onClick className { } { } { } themeClass alertBtn < = </ > </ > () () handleDeleteAll
Styling API~createGlobalTheme~ 共通で使える変数を作成!
Styling API~createGlobalTheme~ export = ( , { : { :
, : }, : { : }, : { : }, : { : , : , : } }); const globalTheme createGlobalTheme ':root' '#1A1A1A' '#7FFF7F' '#FFFFFF' '#7FFF7F' '0.5rem' '1.5rem' '2.5rem' background main success font color color success size xs s m
Styling API~createGlobalTheme~ export = ({ : , : . .
, : . . }); const footerStyle globalTheme globalTheme style marginTop backgroundColor background main color font color 'auto'
Sprinkles API ユーティリティクラスを作成! conditionsを使ってレスポンシブ対応も!
Sprinkles API const = ({ : { : { :
}, : { : } }, : , : { : [ , ], : [ ], : [ , ], : [ , ], : . , : . } }); responsiveStyle globalTheme globalTheme defineProperties conditions desktop mobile defaultCondition properties display justifyContent textAlign width paddingLeft size paddingRight size '@media' 'screen and (min-width: 1024px)' '@media' 'screen and (max-width: 1023px)' 'desktop' 'flex' 'block' 'center' 'center' 'left' '50%' '100%'
Sprinkles API export = ( ); const sprinkles responsiveStyle createSprinkles
Sprinkles API < > < /> < /> < =
, > < /> < /> </ > </ > div div div div Form DeleteAllBtn ToDos DoneToDos className display: justifyContent: { 'flex' 'center' } sprinkles( ) { }
1 vanilla-extractとは 2 主な使い方 4 感想 5 参考資料 3 つまづいたこと
つまづいたこと そもそも、vanilla-extract自体を 適用するのに手間取った!
つまづいたこと〜原因〜 create-react-appをサポートしていなかった...。 ※公式からのサポート状況に関する言及は特になし。 ※公式のGitHub Issueでは、サポートしていないとの回答が。 ※Cracoを一緒に使うことで利用できるようになるとの回答も。
つまづいたこと〜原因〜 Craco導入したらいけるかな〜?? Webpack等の構成を 上書きできる! eject不要!
つまづいたこと〜原因〜 ダメだった...。
つまづいたこと〜解決〜 create-react-appに頼らない! 面倒くさがらずに、Webpackのinstall、 webpack.config.jsの作成もやりましょう!
1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 5 参考資料 4 感想
感想 CSS Modulesの方が好みなので、使い勝手が良いと感 じた! styled-componentsとは異なり、オブジェクト形式だ と書きやすい!見やすい! 定義元に簡単に移動できるのは助かる!
1 vanilla-extractとは 2 主な使い方 3 つまづいたこと 4 感想 5 参考資料
参考資料 vanilla-extract公式ドキュメント CSS in JSとしてVanilla-Extractを選んだ話と技術選定 の記録の残し方 vanilla-extract を試す vanilla-extractを使ってみた感想
参考資料 create-react-app公式ドキュメント Craco公式GitHubリポジトリ styled-components公式ドキュメント
ご清聴ありがとうございました!