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で 作っている話
Search
にしはら
October 25, 2025
Technology
1
340
個人でデジタル庁の デザインシステムをVue.jsで 作っている話
デジタル庁が公開しているデザインシステムをVue.jsで実装した話です。デザインシステムを作っていく中で感じた強力なv-modelやcomputedの魅力などをお伝えします。
にしはら
October 25, 2025
Tweet
Share
More Decks by にしはら
See All by にしはら
速くて安いWebサイトを作る
nishiharatsubasa
17
16k
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
740
defineModelを使って気軽にコンポーネントのv-modelをやろう
nishiharatsubasa
3
1.4k
2023 CSS
nishiharatsubasa
7
4.7k
vue_component_from_composable
nishiharatsubasa
2
650
エルデンリングに学ぶ道に迷わないUIと世界観
nishiharatsubasa
0
1.4k
HTMLとCSSだけでつくるリアルな絵 / How to make a realistic picture only HTML and CSS
nishiharatsubasa
2
7.1k
Other Decks in Technology
See All in Technology
Databricks AI/BI Genie の「値ディクショナリー」をAmazonの奥地(S3)まで見に行く
kameitomohiro
1
380
FinOps について (ちょっと) 本気出して考えてみた
skmkzyk
0
190
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
「最速」で Gemini CLI を使いこなそう! 〜Cloud Shell/Cloud Run の活用〜 / The Fastest Way to Master the Gemini CLI — with Cloud Shell and Cloud Run
aoto
PRO
0
140
フレームワークを意識させないワークショップづくり
keigosuda
0
240
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
170
AWS UG Grantでグローバル20名に選出されてre:Inventに行く話と、マルチクラウドセキュリティの教科書を執筆した話 / The Story of Being Selected for the AWS UG Grant to Attending re:Invent, and Writing a Multi-Cloud Security Textbook
yuj1osm
1
120
AIエージェント入門 〜基礎からMCP・A2Aまで〜
shukob
1
150
RDS の負荷が高い場合に AWS で取りうる具体策 N 連発/a-series-of-specific-countermeasures-available-on-aws-when-rds-is-under-high-load
emiki
7
4.5k
Building a cloud native business on open source
lizrice
0
160
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
12
81k
ハノーファーメッセ2025で見た生成AI活用ユースケース.pdf
hamadakoji
0
370
Featured
See All Featured
Making Projects Easy
brettharned
120
6.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
130k
Six Lessons from altMBA
skipperchong
29
4k
Building Adaptive Systems
keathley
44
2.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
We Have a Design System, Now What?
morganepeng
53
7.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Transcript
ݸਓͰσδλϧிͷ σβΠϯγεςϜΛ7VFKTͰ ࡞͍ͬͯΔ ʙͦͯ͠ɺվΊͯײͨ͡7VFKTͷັྗʙ 7VF'FT+BQBO
ݪཌྷ גࣜձࣾ*$4 ϑϩϯτΤϯυΤϯδχΞ !DSBZpTIFS@[BSJ
*$4.&%*"ͰهࣄΛॻ͍͍ͯ·͢ ศརʁ ͦΕͱࠞཚʁ $44ͷJG ؔ IUUQTJDTNFEJBFOUSZ IUUQTJDTNFEJBFOUSZ Σϒͷ৽ػೳ͍ͭ·Ͱͯ ࣮ફೖͰ͖Δ͔
σδλϧிσβΠϯγεςϜͱʁ
σδλϧிσβΠϯγεςϜͱʁ ओʹߦػؔެڞػؔͰར༻͞ΕΔ͜ͱΛ೦಄ʹߏங͞Ε͍ͯΔ σβΠϯγεςϜͰ͢ɻಛͱͯ͠ɺ ΞΫηγϏϦςΟͷ֬อΛ༏ઌͨ͠ ͭ͘Γʹͳ͍ͬͯΔ͜ͱɺ ߦαʔϏεͷը໘Ͱར༻͍͢͠ϧʔϧΛ ͦΖ͍͑ͯΔ͜ͱͳͲ͕ڍ͛ΒΕ·͢ɻ ʢதུʣ σδλϧிσβΠϯγεςϜࣗମ͘ެ։͞Ε͍ͯΔͷͱͳΓ·͢ͷͰɺ ߦػؔެڞػؔͰ͋Δ͔Ͳ͏͔ΛΘͣɺ
ͲͳͨͰແྉͰར༻͢Δ͜ͱ͕Ͱ͖·͢ɻ ग़యɿIUUQTEFTJHOEJHJUBMHPKQJOUSPEVDUJPOBCPVU ڧௐҾ༻ऀ
σδλϧிσβΠϯγεςϜͱʁ ΞΫηγϒϧͰ͞·͟·ͳঢ়ଶͷίϯϙʔωϯτ͕༻ҙ͞Ε͍ͯΔ
σδλϧிσβΠϯγεςϜͱʁ ʢҰ෦ʣ ίϯϙʔωϯτʹ͍ͭͯ5BJMXJOE3FBDUͰͷίʔυ͕ ެ͔ࣜΒఏڙ͞Ε͍ͯΔ
σδλϧிσβΠϯγεςϜͱʁ Ͱɺ 7VFKT൛ͳ͍ʜ
σδλϧிσβΠϯγεςϜͱʁ ͕ࣗ࡞͍ͬͯ·͢ IUUQTHJUIVCDPN$SBZpTIFS[BSJEJHJUBMBHFODZEFTJHOTZTUFN ͪͳΈʹ࣮ͷ044ͱͯ͠ͷެ։ࣗͷํ͕ૣ͍
σδλϧிσβΠϯγεςϜͱʁ ެ։͞Ε͍ͯΔ'JHNBͷσβΠϯΛͱʹ7VFKTͰ࣮
σδλϧிσβΠϯγεςϜͱʁ Ͱ͖Δ͚ͩγϯϓϧʹखܰʹ͑ΔΑ͏ʹ͢Δͷ͕ίϯηϓτͰ͢
σδλϧிσβΠϯγεςϜͱʁ ఏڙ͞Ε͍ͯΔͷ͓͓Α࣮͍ͦͯ͠·͢ ਵ࣌Ճத
σδλϧிσβΠϯγεςϜͱʁ தظͷӡ༻Λߟ͑ͯɺ࣮ߦ࣌ͷґଘ7VFKTͷΈͰ͢
σδλϧிσβΠϯγεςϜͱʁ ͪͳΈʹຊϓϩδΣΫτ σδλϧிͱҰ͕ؔ͋Γ·ͤΜ σβΠϯɿ$$#: ίʔυεχϖοτɿ.*5ϥΠηϯε ͜ΕΒͷϥΠηϯεͷͱʹ։ൃ͍ͯ͠·͢
վΊͯײͨ͡7VFKTͷັྗ
WNPEFM
վΊͯײͨ͡7VFKTͷັྗ WNPEFMೖྗͱঢ়ଶͷಉظʹ͑Δ ͷΈʹ͢ΕΑ͘ɺ Πϕϯτॲཧʹؾʹ͔͚ͳͯ͘Α͍ ˣ͜͏ॻ͚Δ <input :value="text" @change="handleChange" /> <input
v-model="text" />
վΊͯײͨ͡7VFKTͷັྗ ίϯϙʔωϯτؒͷΛ͔ΜͨΜʹ࿈ܞͰ͖Δ ίϯϙʔωϯτʹWNPEFM͕͑Δ const labels = ["બࢶ1", "બࢶ2", "બࢶ3"]; const
checked = ref([]); <CheckboxGroup v-model="checked" :labels="labels" />
DPNQVUFE
const TAX_RATE = 1.1; const price = ref(100); const taxIncluded
= computed(() => price.value * TAX_RATE); <p>੫ࠐΈɿ{{ taxIncluded }}</p> վΊͯײͨ͡7VFKTͷັྗ DPNQVUFEґଘͷ͕ෆมͳݶΓΩϟογϡΛฦ͢ͷͰ ϋΠύϑΥʔϚϯε ࢉग़Ͱ͖ΔDPNQVUFEͰ࠷దԽͰ͖Δ
վΊͯײͨ͡7VFKTͷັྗ جຊతʹ໎Θͣ͑0,ɻ ڭՊॻͲ͓Γʹ͢Ε࠷దԽ͞ΕΔ
TMPU
վΊͯײͨ͡7VFKTͷັྗ ΞΠίϯͷཧϘλϯίϯϙʔωϯτͰߦ͍ͨ͘ͳ͍ ίϯϙʔωϯτͷதͷΛ͍ͨ͠
<button> <span class="frontIcon"> <slot name="frontIcon" /> </span> <slot name="label" />
<span class="backIcon"> <slot name="backIcon" /> </span> </button> <MyButton> <template #frontIcon> <Icon /> </template> <template #label> ϥϕϧ </template> </MyButton> վΊͯײͨ͡7VFKTͷັྗ ˝.Z#VUUPOWVFίϯϙʔωϯτ ˝ݺͼग़͢ଆ TMPUΛͬͯϨΠΞτ·ͰΛ࣋ͭ ίϯϙʔωϯτͷංେԽΛ͗ɺ ίϯϙʔωϯτͷ൚༻ੑΛߴΊΔ
σδλϧிσβΠϯγεςϜΛ ࣮ͯ͠ಘΒΕͨͷ
σδλϧிσβΠϯγεςϜΛ࣮ͯ͠ಘΒΕͨͷ ΞΫηγϒϧͳίϯϙʔωϯτͷ࡞Γํͷݟ ։ൃऀମݧΛҙࣝͨ͠ίϯϙʔωϯτཻɺ ͷ͚ํ 7VFύϫϑϧʂσβΠϯγεςϜͮ͘Γʹྑ͍ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ גࣜձࣾ*$4ͰϑϩϯτΤϯυΤϯδχΞΛืूதʂ IUUQTJDTXFCKQSFDSVJU