Inside Frontend #2 / 動的デザインガイドラインのつくり方 / Masanari Hamada @nairirou / #InsideFE
ಈతσβΠϯΨΠυϥΠϯͷͭ͘ΓํMasanari Hamada / @narirouYahoo! JAPAN - WebEngineerGYAO! - Engineer
View Slide
Masanari Hamada / @narirouYahoo! JAPAN ΤϯδχΞGYAO ΤϯδχΞGYAO WEB ϦϑΝΫλϦϯάGYAO WEBಈըϓϨʔϠʔ ϦϑΝΫλϦϯάGYAO iOS SwiftԽ/ϦϑΝΫλϦϯάGYAO BFF APIαʔόʔ(TypeScript)झຯ: WEB Node.jsʊਓਓਓਓਓਓਓਓਓਓਓਓਓਓਓਓʊʼɹϦϑΝΫλϦϯά͔ͯ͠͠ͳ͍ɹʻʉY^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Yʉ
❖ Design System ʹ͍ͭͯ❖ ಈతσβΠϯΨΠυϥΠϯͷ࡞ϙΠϯτ❖ GYAO! Web৽ࣄྫ- Ͳ͏ͬͯطଘߏͷWEB͔ΒҠߦͤ͞ΔʁTOPICS
͡ΊʹSGDD (ελΠϧΨΠυɾυϦϒϯɾσϕϩοϓϝϯτ)Living Design Guideline❖ طଘͷࢿ࢈Λ๊͑ͨWEBͰಋೖͰ͖Δʁ
ੜ͖ͨσβΠϯΨΠυͷΈΛͲ͏ͬͯαʔϏεͰ࣮ݱ͢Δ͔❖ ࣮ࡍʹGYAO! ͰಋೖதͷϓϩηεΛަ͑ͯհ❖ આಘʹͲ͏ͧ͡Ίʹ
DESIGN SYSETM
DESIGN SYSTEMσβΠϯఆ͚ٛͨͩ͠Ͱ࣮ݱ͠ͳ͍
DESIGN SYSTEM։ൃ͢ΔͨΊʹߟ͑Δ͜ͱͨ͘͞Μ͋Δ…❖ σβΠϯΛ࣮ݱ͢ΔͨΊͷखஈΛɺຖճݕ౼͢Δʁ❖ ϖʔδ։ൃऀ͕ෳͷνʔϜʹ͔Εͨ߹ɺͦͷߟ͑Δʁ❖ σβΠϯͷҙਤ͢ΔมߋΛਖ਼͘͠ɺෳՕॴͰө͢Δ͜ͱ͕Ͱ͖Δʁ࿙Εͳ͘ʁ❖ ඳ͍͍ͯͨσβΠϯػೳͱͯ͠ഁͳ͘ಈ͘ʁ❖ ࠓճͷมߋɺશһ͕ڞ௨ೝࣝΛ͍࣋ͬͯΔʁ
DESIGN SYSTEMຖճɺ͜ΕΛߦ͏ͷ͔ʁ➔ ϓϩηεͷ͕ݟ͑ͯ͘Δ
Complexion ReductionFlat Designग़య: https://www.swarmnyc.com/whiteboard/complexion-reduction-a-new-trend-in-design-1DESIGN SYSTEMੈؒมΘΔɻσβΠϯைྲྀͰมԽ͍ͯ͘͠…Minimal Material Micro Anim
DESIGN SYSTEMఆٛͨ͠σβΠϯΛਝʹϓϩμΫτʹө͢ΔͨΊͷγεςϜ͕ඞཁ
σβΠϯΨΠυϥΠϯߋ৽(ك)DESIGNσβΠϯݪଇCI (corporate identity)VI (visual identity)ϞοΫΞοϓ/ϓϩτλΠϐϯά։ൃ / ར༻Օॴચ͍ग़༷͠ࡦఆ(σβΠϯ͢Δ)UIʹөϓϩμΫτ
DESIGNσβΠϯݪଇCI (corporate identity)VI (visual identity)༷σβΠϯҙਤͷ໌֬ԽϓϩτλΠϐϯάσβΠϯΨΠυϥΠϯ༷σβΠϯҙਤͷѲίϯϙʔωϯτར༻ํ๏ͷѲ࣮ίʔυʹΑΔαϯϓϧ/ςετશίϯϙʔωϯτͷҰཡUI ίϯϙʔωϯτίʔυ࠶ར༻ՄೳͳదͳUIύʔπࢀর (ࣗಈੜ)࡞ϓϩμΫτ
ΞΠσΞΛ͔ʹʹө͢ΔϓϩηεDESIGNσβΠϯݪଇCI (corporate identity)VI (visual identity)༷σβΠϯҙਤͷ໌֬ԽϓϩτλΠϐϯάσβΠϯΨΠυϥΠϯ༷σβΠϯҙਤͷѲίϯϙʔωϯτར༻ํ๏ͷѲ࣮ίʔυʹΑΔαϯϓϧ/ςετશίϯϙʔωϯτͷҰཡUI ίϯϙʔωϯτίʔυ࠶ར༻ՄೳͳదͳUIύʔπࢀর (ࣗಈੜ)࡞
DESIGN SYSTEMσβΠϯγεςϜͱɺΛఏڙ͢ΔͨΊͷͰ͋ΔɻNathan Curtis
❖ σβΠϯ౷Ұ͞ΕͨUX / ࠶ར༻ੑͷߴ͍σβΠϯΞηοτ❖ ։ൃίετͰσβΠϯҙਤΛ࣮ݱ࠶ར༻ੑͷߴ͍։ൃίʔυ❖ ༷༷ɺσβΠϯҙਤͳͲίϯϙʔωϯτ୯ҐͰ໌֬Խ͞ΕΔͦͯ͜͠ΕΒ͕σβΠϯΨΠυϥΠϯͱͯ͠ӾཡՄೳDESIGN SYSTEM
ಈతσβΠϯΨΠυϥΠϯͷ࡞ϙΠϯτDESIGNσβΠϯݪଇCI (corporate identity)VI (visual identity)༷σβΠϯҙਤͷ໌֬ԽϓϩτλΠϐϯάσβΠϯΨΠυϥΠϯ༷σβΠϯҙਤͷѲίϯϙʔωϯτར༻ํ๏ͷѲ࣮ίʔυʹΑΔαϯϓϧશίϯϙʔωϯτͷҰཡUI ίϯϙʔωϯτίʔυ࠶ར༻ՄೳͳదͳUIύʔπࢀর (ࣗಈੜ)࡞
1࣮ίʔυΛࢀরͯ͠ੜ͖ͨσβΠϯΨΠυϥΠϯΛ࡞ΔσβΠϯΨΠυϥΠϯ༷σβΠϯҙਤͷѲίϯϙʔωϯτར༻ํ๏ͷѲ࣮ίʔυʹΑΔαϯϓϧશίϯϙʔωϯτͷҰཡUI ίϯϙʔωϯτίʔυ࠶ར༻ՄೳͳదͳUIύʔπࢀর (ࣗಈੜ)
2υΩϡϝϯτʹଟϨΠϠʔͷใΛؚΊΔ͜ͱσβΠϯҙਤɺϏδωε༷ٕज़ใɺར༻ํ๏➔ ٕज़ใ͔͠ͳ͍UIͷҰཡͰɺٕज़ऀཱ͔ͨ͠ͳ͍σβΠϯΨΠυϥΠϯ༷σβΠϯҙਤͷѲίϯϙʔωϯτར༻ํ๏ͷѲ࣮ίʔυʹΑΔαϯϓϧશίϯϙʔωϯτͷҰཡ
3UIίϯϙʔωϯτؒͷσʔλܕΛ໌֬ʹఆٛ͢ΔUI ίϯϙʔωϯτίʔυ࠶ར༻ՄೳͳదͳUIύʔπUI͕ड͚औΔܕσʔλΛఆ͓ٛͯ͘͠➔ ಉ͡σʔλ͑ͤ͞ίϯϙʔωϯτ͕ඞͣಉ͡ঢ়ଶͰදࣔग़དྷΔΑ͏ʹ͢Δ
σβΠϯγεςϜ࣮ྫRiff
σβΠϯγεςϜ࣮ྫATLASKIT
GYAO! Web ৽ࣄྫطଘߏͷWEB͔ΒσβΠϯγεςϜΛ࡞Δʹ
GYAO! Web ৽ࣄྫݹ͍ߏͷWEB͔ΒҠߦͤ͞Δ❖ ReactͳͲͷϞμϯڥʹҠߦ͠ͳ͍ͱ࣮ݱͰ͖ͳ͍ͷ͔ʁ͍͍͑ɺஈ֊తʹ࣮ݱͰ͖·͢ɻࢲ͕ͨͪͦͷಓΛ౿ΜͰ͍·͢ɻ
GYAO! Web ৽ࣄྫݱঢ়ͷఢΛѲҠߦϓϥϯΛཱͯΔJSͱCSSΛแ͢ΔɺςϯϓϨʔτͱϩδοΫ͕ҰମԽͨ͠ڊେPHPϑΝΠϧಉ͡Α͏ͳϘλϯɺμΠΞϩά͕10छྨҎ্
GYAO! Web ৽ࣄྫPhase 1 Phase 2 Phase 3❖ PHPΛϦϑΝΫλϦϯά (DIίϯςφΛ༻͍ͨMVVM)❖ ίʔυΛϩδοΫͱςϯϓϨʔτʹ❖ ςϯϓϨʔτΤϯδϯ(pug)Λར༻❖ ϞϊϦεΛίϯϙʔωϯτʹେ͖͘ղ❖ ղग़དྷͨͷͳ͔͔Βڞ௨ԽͰ͖ΔͷߋʹࡉԽ❖ ViewͱServerؒͷσʔλఆٛΛJSON-schemaͰ໌֬ʹ͢Δ❖ PHP͔ΒTypeScriptʹҠߦ❖ Vue.jsʹҠߦ❖ طଘͷView(pug)ͷࢼࢉΛ׆͔͢ܗ❖ ܕఆٛJSON-schema͔ΒTSͷܕ
GYAO! Web ৽ࣄྫScriptTemplate(Pug)README.mdpackage.jsonಈ࡞Style(SASS)ελΠϧςϯϓϨʔτREADME.mdσβΠϯҙਤ༻ํ๏Ϗδωε༷component֓ཁґଘ͢Δσʔλܕ(json-schemaͰఆٛ)➔ ΨΠυΛࣗಈੜ(Node.js)
GYAO! Web ৽ࣄྫ·ͣϖʔδ୯ҐͰɺঃʑʹComponentΛڞ௨Խ & ࡉԽ
GYAO! Web ৽ࣄྫϫʔΫϑϩʔͷมԽΛपDESIGNENGINEERσβΠϯΨΠυϥΠϯ༷σβΠϯҙਤͷѲίϯϙʔωϯτར༻ํ๏ͷѲ࣮ίʔυʹΑΔαϯϓϧશίϯϙʔωϯτͷҰཡUIίϯϙʔωϯτͷ࡞ΑΓεΩϧ͕ඞཁʹͳΔσβΠφͱΤϯδχΞ͕ڠྗͯ͠σβΠϯΨΠυϥΠϯΛҡ͍࣋ͯ͘͠ϑϩʔʹมԽ͢Δ
GYAO! Web ৽ࣄྫاըɺܦӦਞɺपғͷઆಘ·ͣɺݱঢ়ͷΛચ͍ग़ͯ͠ɺཧղͯ͠Β͏͜ͱ͔ΒɻΓ͍ͨཧΛཧཧ͓ͯ͘͠
ࢿྉ
ࢿྉ͜͏ͳͬͯͨͷΛʂ
ࢿྉ͜͏͍ͨ͠ʂ
આಘνʔτγʔτ✔ ։ൃऀύϑΥʔϚϯε / ίϯϙʔωϯτ୯Ґͷظ։ൃ / Ϟμϯ✔ σβΠφʔϢʔβʔʹ౷ҰੑΛ୲อͰ͖Δ / σβΠϯ͕ਝʹಧ͚ΒΕΔ࡞ۀޮͷ্✔ اը/ܦӦऀ·ͣཧղͰ͖Δࢿྉʂ / ࣄނϦεΫͷݮগɺͷݮைྲྀΛଈ࠲ʹಧ͚ΒΕͳ͍γεςϜɺܦӦΛڴ͔͢ϦεΫ
GYAO! Web ৽ࣄྫΞϑλʔϑΥϩʔ࿅शΛ࡞ͯ͠ɺॳظͷֶशίετΛݮΒ͢औΓΈLevel 2Level 3
GYAO! Web ৽ࣄྫ❖ جૅ͔ΒԠ༻·Ͱ5❖ ࠷ऴʮཁ݅ʯͷΈ͕ఏࣔ͞Ε͓ͯΓɺ࣮ࡍʹΤϯδχΞͱσβΠφʔ͕ΜͰߦ͏࣮ફʹଈͨ͠࿅श՝
GYAO! Web ৽ࣄྫLEVEL 1࠷ॳ୯७ͳόφʔΛίϯϙʔωϯτԽ͢Δ ➔
GYAO! Web ৽ࣄྫLEVEL 3ঃʑʹΛ্͍͛ͯ͘❖ σʔλͷذॲཧ❖ JSʹΑΔಈతมߋ❖ ෳࡶͳίϯϙʔωϯτͷར༻ͲΜͲΜTϙΠϯτ͕ஷ·Δ! ➔(ͪΖΜٙࣅ)
GYAO! Web ৽ࣄྫ❖ ϨϕϧผͷϑΥϩʔΞοϓ͕Մೳʹ❖ ࣮Ҋ݅ʹೖΓ͍͢❖ ৽نࢀೖϝϯόʔͷΩϟονΞοϓͷॿ͚ʹ❖ ʮָ͍͠ʯ ➔ Ҡߦͷֶशίετͷݮʹ࿅श՝ͷϝϦοτ
GYAO! Web ৽ࣄྫ݁ՌϞϊϦεঢ়ଶ͔Β50ݸҎ্ͷίϯϙʔωϯτʹͨ͜͠Ε͚ͩͷมߋΛՃ͑ͯطଘϝϯόʔʹΑΔӡ༻ۀʹࢧোͳ͘ߦ͑Δঢ়ଶ
GYAO! Web ৽ࣄྫ݁ՌUIίϯϙʔωϯτ͔ΒɺಈతσβΠϯΨΠυϥΠϯΛੜΈ
GYAO! Web ৽ࣄྫ݁ՌҰํͰɺӡ༻ϑϩʔͷมߋʹΑΔݱͷֶशίετΓ͋Δ❖ ݱͰίʔσΟϯάλεΫͱϏδϡΞϧλεΫ͕͞ΕɺͦΕͧΕ͕ಘҙͱ͢ΔʹϑΥʔΧε͢Δମ੍ͱͳͬͨ❖ UX/UIͷݕ౼ʹूத + ٕज़ઃܭʹूத ׂ୲͢Δ͜ͱ͋Δ➔ ޮͱΫΦϦςΟUP
❖ Design System ʹ͍ͭͯ❖ ಈతσβΠϯΨΠυϥΠϯͷ࡞ϙΠϯτ❖ GYAO! Web৽ࣄྫ- طଘߏͷWEB͔ΒҠߦͤ͞Δʹʁ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠