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
6.1k
3
Share
個人でデジタル庁の デザインシステムをVue.jsで 作っている話
デジタル庁が公開しているデザインシステムをVue.jsで実装した話です。デザインシステムを作っていく中で感じた強力なv-modelやcomputedの魅力などをお伝えします。
にしはら
October 25, 2025
More Decks by にしはら
See All by にしはら
速くて安いWebサイトを作る
nishiharatsubasa
21
18k
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
1k
defineModelを使って気軽にコンポーネントのv-modelをやろう
nishiharatsubasa
3
1.6k
2023 CSS
nishiharatsubasa
7
4.8k
vue_component_from_composable
nishiharatsubasa
2
720
エルデンリングに学ぶ道に迷わない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
AIエージェントを構築して感じた、AI時代のCDKとの向き合い方
smt7174
1
240
聞き手の目線で考えるプロポーザル
takefumiyoshii
0
410
【Findy FDE登壇_2026_04_14】— 現場課題を本気で解いてたら、FDEになってた話
miyatakoji
0
1.1k
CloudSec JP #005 後締め ~ソフトウェアサプライチェーン攻撃から開発者のシークレットを守る~
lhazy
0
190
最近の技術系の話題で気になったもの色々(IoT系以外も) / IoTLT 花見予定会(たぶんBBQ) @都立潮風公園バーベキュー広場
you
PRO
1
170
Revisiting [CLS] and Patch Token Interaction in Vision Transformers
yu4u
0
100
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
Azure Static Web Apps の自動ビルドがタイムアウトしやすくなった状況に対応した件/global-azure2026
thara0402
0
260
🀄️ on swiftc
giginet
PRO
0
360
最新の脅威動向から考える、コンテナサプライチェーンのリスクと対策
kyohmizu
0
110
DevOpsDays Tokyo 2026 軽量な仕様書と新たなDORA AI ケイパビリティで実現する、動くソフトウェアを中心とした開発ライフサイクル / DevOpsDays Tokyo 2026
n11sh1
0
130
Code Interpreter で、AIに安全に コードを書かせる。
yokomachi
0
6k
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
110
RailsConf 2023
tenderlove
30
1.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
370
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
BBQ
matthewcrist
89
10k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
210
The Curious Case for Waylosing
cassininazir
0
300
Chasing Engaging Ingredients in Design
codingconduct
0
170
Six Lessons from altMBA
skipperchong
29
4.2k
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