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
実務における Vue.js と Atomic Design
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Norito Uehara
May 27, 2020
Programming
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実務における Vue.js と Atomic Design
Norito Uehara
May 27, 2020
Other Decks in Programming
See All in Programming
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
120
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.7k
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
220
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
490
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
その節約、円になってますか?
isamumumu
1
730
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
680
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
470
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
150
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
190
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
540
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Designing for Timeless Needs
cassininazir
1
440
The Cult of Friendly URLs
andyhume
79
7k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Unsuck your backbone
ammeep
672
58k
Thoughts on Productivity
jonyablonski
76
5.3k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
240
Designing for Performance
lara
611
70k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Transcript
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design May 27, 2020 ࣮ʹ͓͚Δ Vue.js
ͱ Atomic Design
ࣗݾհ ໊લ ্ݪ ಙਓ ॴଐ Crevo גࣜձࣾ ৬ ϦʔυΤϯδχΞ ܦྺ
ԭೄͰ 7 ɺ౦ژͰ Crevo Ͱ 3 ։ൃऀͱͯ͠׆ ಈத ͖ͳΤσΟλ Emacs ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
Crevo ͱ ʮಈը৽࣌ͷΫϦΤΠλʔܦࡁݍΛͭ͘Δɻ ʯͱ͍͏ϛογϣϯ Λܝ͛ͯ׆ಈ͍ͯ͠ΔελʔτΞοϓاۀͰ͢ɻ Crevo https://corp.crevo.jp ࣮ʹ͓͚Δ Vue.js ͱ
Atomic Design
Crevo ͷ֤छαʔϏε Crevo Pro ༧ࢉ༻్ʹ߹Θͤͨ࠷దͳಈըΛاըʙ੍࡞·ͰҰ؏͢Δಈը ੍࡞αʔϏεಈը੍࡞αʔϏε https://crevo.jp ࣮ʹ͓͚Δ Vue.js ͱ
Atomic Design
Crevo ͷ֤छαʔϏε Crevo Jobs ࠃ֎ 7,000 ໊Λӽ͑ΔϓϩಈըΫϦΤΠλʔͱͷϚονϯά αʔϏε https://jobs.crevo.jp ࣮ʹ͓͚Δ
Vue.js ͱ Atomic Design
Crevo ͷ֤छαʔϏε Crevo Base ΫϦΤΠςΟϒ੍࡞ʹಛԽ੍ͨ͠࡞ཧπʔϧ https://base.crevo.jp ࣮ʹ͓͚Δ Vue.js ͱ Atomic
Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design Crevo ͷγεςϜʹ Vue.js ͱ Atomic
Design Λಋೖͯ͠ಘΒΕͨ ݟΛڞ༗͠·͢ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design લఏ 2014 ͔Β։ൃ͞Εଓ͚ͯΔͦΕͳΓͷྺ࢙͕͋Δ Web Ξ
ϓϦέʔγϣϯ جຊతʹαʔόαΠυΤϯδχΞ͕ϝϯς͖ͯͨ͠ ͦͷͨΊ jQuery ͕׆༂ͯͨ͠Γ CSS पΓ͕ࠞಱͷۃΈͩͬ ͨΓ͢Δ Ember.js ೖͬͯΔ͚ͲॏྔڃͰѻ͍ͮΒͯͭ͘Β͍ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design ͦ͏͍͏ͱ͜ΖͰ Vue.js Λಋೖ͢Δͱ Developer Experience
͕ ্͠·͢! ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design Vue.js ͱ Atomic Design ͷ؆୯ͳઆ໌
Vue.js ίϯϙʔωϯτࢦͷ JS ϑϨʔϜϫʔΫ Atomic Design ը໘ͷߏཁૉΛ 5 ֊ʹ͚ɺ࠷ऴతͳ UI ͱ UI ͷجૅͱͳΔσβΠϯγεςϜΛಉ࣌ʹ࡞͢Δઃ ܭํ๏ Vue.js ͷίϯϙʔωϯτࢦͱ Atomic Design ͷઃܭࢥ ૬ੑ͕ྑ͍ Atomic Design ͷߏཁૉͱίϯϙʔωϯτΛ 1 ର 1 ରԠ͞ ͤΒΕΔ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design ಋೖͯ͠࠷ऴతʹͲ͏ͳ͔ͬͨ Atomic Design Λڞ௨ݴޠͱͯ͠ઃܭͷ͕ٞͰ͖ΔΑ͏ʹ ͳͬͨ
CSS ઃܭҰ৽͞Εͯ࠶ར༻ੑ͕૿ͨ͠ BEM ࠾༻ͨ͠ͷͰطଘͷը໘ͷ͍ճ͠༰қ ݹ͍ΞϓϦݹ͍ը໘͕͖ʜʜ Storybook ͰίϯϙʔωϯτΛΧλϩάԽͨ͠ͷͰͦ͜Ͱڍ ಈ֬ೝͰ͖ͯศར ͞Βʹ CircleCI ͰӾཡՄೳʹ͍ͯ͠Δͱ֤ϒϥϯνͷ࠷৽ί ϯϙʔωϯτ͕͍ͭͰݟΕΔΑ͏ʹͨ͠ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design CSS ه๏ͱͯ͠ BEM Λઌʹಋೖͨ͠ BEM
ಋೖલͷ CSS Scoped CSS ͔ͩΒͱ .title, .description Έ͍ͨͳΫϥ εΛྔ࢈͍ͯ͠Δͱ Slot Λͬͨ࣌ʹόοςΟϯάͯͭ͠Β ͍͜ͱʹͳΓ͕ͪ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design όοςΟϯάྫ ίϯϙʔωϯτ <template lang='pug'> div
.title hoge child .title fuga </template> <style lang='scss' scoped> .title { font-size: 2em; } </style> ࢠίϯϙʔωϯτ <template lang='pug'> div // ͕͜͜ҙਤͤͣ 2em ʹ .title foo .content slot </template> <style lang='scss' scoped> .title { color: #00f; } </style> ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design BEM ಋೖޙͷ CSS BEM Ͱॻ͍ͯΕ
slot ΛͬͯΔ߹ʹόοςΟϯά ͕ى͖ʹ͍͘ ͜ͷ࣌ Block ίϯϙʔωϯτ໊ʹ͢Δͷ͕ϙΠϯτ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design ίϯϙʔωϯτ <template lang='pug'> .o-parent .o-parent__title
hoge child .o-child-title fuga </template> <style lang='scss' scoped> .o-parent-title { font-size: 2em; } </style> ࢠίϯϙʔωϯτ <template lang='pug'> .o-child // Өڹड͚ͳ͍ .o-child__title foo .o-child__content slot </template> <style lang='scss' scoped> .o-child-title { color: #00f; } </style> ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design ίϯϙʔωϯτͷઃܭ Atomic Design ಋೖલ ໌֬ͳࢦ͕ͳͯ͘ɺ࠶ར༻ੑͷͳ͍ίϯϙʔωϯτ͕࡞ΒΕ͕
ͪͩͬͨ A ʮίϯϙʔωϯτͰ͖·ͨ͠! ʯ B ( Θ͋ɺશ෦ೖΓͰ࠶ར༻Ͱ͖ͳ͍ʙ) B ʮ͜ͷ··ͩͱ࠶ར༻ੑ͕͍͔Βׂ͍ͯ͜͠͏͔ʯ A ʮͲ͏ׂ͠·͔͢? ʯ B ( ຖׂͷ૬ஊʹͳΔͳ͋ʜʜ) ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design Atomic Design ಋೖޙ Atomic Design
Λࢦʹ͢Δͱڞ௨ͷݴ༿Ͱઃܭͷ͕Ͱ͖ΔΑ ͏ʹͳͬͨ A ʮMolecule ίϯϙʔωϯτͰ͖·ͨ͠! ͜͜طଘͷ Atom Λ͍·ͨ͠ʯ B ʮ͓ɺ͍͍Ͷ! ͜͜ Organism ʹׂ͍ͯ͠ΔͶɻ͔͠ ͯ͠ Molecule Ͱ͍͍ͷͰʯ A ʮ୯ମͰཱ͍ࣗͯ͠ΔͷͰ Organism ͕ద͔ͱ! ʯ B ʮͳΔ΄Ͳʙʯ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design CSS ͷϝϯςφϯεੑ Atomic Design ಋೖલͷ
CSS ࡶʹ HTML, CSS Λॻ͍ͯΔͱ BEM Λͬͯ B__E__E__E_M Έ͍ͨͳ͜ͱʹͳΓ͕ͪ Α͋͘ΔΞϯνύλʔϯ 3 ֊Ҏ্ਂ͘ͳΔͱϝϯςφϯεͱͯͭΒ͍ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design ྫ (Pug) .form label.form__row input.form__row__input.form__row__input--disabled
ྫ (SASS) .form &__row &__input &--disabled ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design Atomic Design ಋೖޙͷ CSS Atomic
Design ϕʔεͰίϯϙʔωϯτׂ͢Ε֊Խ͞Εͨ ֤ίϯϙʔωϯτͰ CSS ͕ॻ͔ΕΔͷͰ BEM ͷ֊ਂ͘ͳΓ ʹ͍͘ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design ྫ (Pug) .o-form label.m-form-row input.a-input.a-input--disabled
ྫ (SASS) .o-form .m-form-row .a-input &--disabled ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design طଘͷը໘ͷ CSS ͷ͍ճ͠ ଉͷ͍γεςϜͰ Vue
Λಋೖͯͯ͠ੲͷը໘ Vue Ͱͳ͍͜ͱ͕ଟʑ͋Δ ίϯϙʔωϯτͷ CSS Λͦ͏͍͏ը໘ʹద༻ͨ͘͠ͳΔ ˠ ͜ͷ߹ BEM Ͱॻ͍ͯΕطଘͷ CSS ͱͷόοςΟ ϯά͕ى͖ʹ͍͘ ͜͜ྫΛग़͠ʹ͍͘ͷͰׂѪʜʜ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design CircleCI Ͱ storybook Λ build
͢Δͱศར खݩͷϚγϯͰ storybook Λಈ͔ͯ͠σβΠφʔʹݟ͑ ͳ͍ ֤ϒϥϯνͰίϯϙʔωϯτΛ૿ͨ͠ࡍʹ֬ೝͯ͠Β ͍͍ͨ ˠ CircleCI ͰͦΕΛ୭ͰݟΕΔͱ֬ೝ࡞ۀ͕ḿΔ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design CircleCI ͷઃఆྫ build_storybook: executor: ruby
steps: - restore_workspace: reload: false - run: command: | yarn run build-storybook -c .storybook \ -o /tmp/storybook-static - store_artifacts: path: /tmp/storybook-static destination: storybook ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design Cirlce CI ͷ Artifacts ࣮ʹ͓͚Δ
Vue.js ͱ Atomic Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design ࣮ࡍͷը໘ ࣮ʹ͓͚Δ Vue.js ͱ Atomic
Design
࣮ʹ͓͚Δ Vue.js ͱ Atomic Design Vue.js ͱ Atomic Design Λಋೖͨ݁͠Ռ
Atomic Design Λڞ௨ݴޠͱͯ͠ઃܭͷ͕ٞͰ͖ΔΑ͏ʹ ͳͬͨ CSS ઃܭҰ৽͞Εͯ࠶ར༻ੑ͕૿ͨ͠ BEM ಉ࣌࠾༻ͨ͠ͷͰطଘͷը໘ͷ͍ճ͠༰қ ݹ͍ΞϓϦݹ͍ը໘͕͖ʜʜ Storybook ͰίϯϙʔωϯτΛΧλϩάԽͨ͠ͷͰͦ͜Ͱڍ ಈ֬ೝͰ͖ͯศར ͞Βʹ CircleCI ͰӾཡՄೳʹ͍ͯ͠Δͱ֤ϒϥϯνͷ࠷৽ί ϯϙʔωϯτ͕͍ͭͰݟΕΔΑ͏ʹͨ͠ ࣮ʹ͓͚Δ Vue.js ͱ Atomic Design
࠷ޙʹ ಈըࢢͷࣗࣾ SaaS αʔϏε։ൃΛ͍ͨ͠ΤϯδχΞΛืूத Ͱ͢! https://corp.crevo.jp/recruit/engineer ࣮ʹ͓͚Δ Vue.js ͱ Atomic
Design