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
3
6k
個人でデジタル庁の デザインシステムをVue.jsで 作っている話
デジタル庁が公開しているデザインシステムをVue.jsで実装した話です。デザインシステムを作っていく中で感じた強力なv-modelやcomputedの魅力などをお伝えします。
にしはら
October 25, 2025
Tweet
Share
More Decks by にしはら
See All by にしはら
速くて安いWebサイトを作る
nishiharatsubasa
21
18k
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
980
defineModelを使って気軽にコンポーネントのv-modelをやろう
nishiharatsubasa
3
1.5k
2023 CSS
nishiharatsubasa
7
4.8k
vue_component_from_composable
nishiharatsubasa
2
710
エルデンリングに学ぶ道に迷わないUIと世界観
nishiharatsubasa
0
1.5k
HTMLとCSSだけでつくるリアルな絵 / How to make a realistic picture only HTML and CSS
nishiharatsubasa
2
7.2k
Other Decks in Technology
See All in Technology
Scrum Fest Morioka 2026
kawaguti
PRO
2
470
【Claude Code】Plugins作成から始まったファインディの開発フロー改革
starfish719
0
340
なぜAIは チーム開発を 速くしないのか
tan_go238
8
3.2k
【2026年版】生成AIによる情報システムへのインパクト
taka_aki
0
150
30分でわかるアーキテクチャモダナイゼーション
nwiizo
7
3.1k
AgentCore RuntimeのCDKデプロイにdeploy-time-buildを使ってみよう @ JAWS-UG Sapporo
shimagaji
2
100
欲しいを叶える個人開発の進め方 / How to Run an Indie Project That Brings Your Ideas to Life
endohizumi
0
180
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
9
780
「静的解析」だけで終わらせない。 SonarQube の最新機能 × AIで エンジニアの開発生産性を本気で上げる方法
xibuka
2
120
Amazon Bedrock AgentCoreでブラウザ拡張型AI調査エージェントを開発した話 (シングルエージェント編)
nasuvitz
2
100
#23 Turing × atmaCup 2nd 6th Place Solution + 取り組み方紹介
yumizu
0
150
AgentCore RuntimeをVPCにデプロイして 開発ドキュメント作成AIエージェントを作った
alchemy1115
3
260
Featured
See All Featured
Between Models and Reality
mayunak
1
210
For a Future-Friendly Web
brad_frost
183
10k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
78
Deep Space Network (abreviated)
tonyrice
0
75
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
800
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
810
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
エンジニアに許された特別な時間の終わり
watany
106
230k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
140
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