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
1粒で3度おいしいStorybook
Search
Yosuke Kurami
April 19, 2018
Programming
6.3k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1粒で3度おいしいStorybook
Yosuke Kurami
April 19, 2018
More Decks by Yosuke Kurami
See All by Yosuke Kurami
TypeScript LSP の今までとこれから
quramy
1
2.2k
フロントエンドテストの育て方
quramy
12
3.9k
App Router 悲喜交々
quramy
8
760
上手に付き合うコンポーネントテスト
quramy
6
2.4k
Patched fetch did not work
quramy
6
810
GraphQL あるいは React における自律的なデータ取得について
quramy
18
5.9k
Next.js App Router
quramy
15
4k
Fragment Composition of GraphQL
quramy
17
4.9k
reg-viz VRT tools
quramy
4
1.8k
Other Decks in Programming
See All in Programming
バグを直したら useEffect が消えた
colorful12
3
780
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
190
ALB ログから Trace を気合で繋げる技術
fohte
7
820
typoなんかねぇよ
raspython3
0
630
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
850
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
200
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
120
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.3k
自分的「カンファレンスの楽しみ方」
syumai
0
160
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
480
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
110
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
ラッコキーワード サービス紹介資料
rakko
1
4.6M
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
A Soul's Torment
seathinner
7
3.5k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Product Roadmaps are Hard
iamctodd
55
12k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
570
Crafting Experiences
bethany
1
270
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
490
Transcript
ҰཻͰ ࡾ͓͍͍͠ Storybook
Today’s theme: Storybook in FOLIO
Storybook in FOLIO '0-*0ϑϩϯτνʔϜͰͷ4UPSZCPPLར༻ྫ ϝϦοτΛ3ͭհ͢ΔΑ ༰ͷେ3FBDUʹґଘ͠ͳ͍Α
ؼͬͨΒ4UPSZCPPL͕͍ͨ͘ͳΔʂͣ
Introduction
Storybook is a development environment for UI components. https://github.com/storybooks/storybook
Storybook basics $PNQPOFOUΧλϩάΛੜ͢Δπʔϧ ݩʑ3FBDU͕λʔήοτ ݱࡏ༷ʑͳ6*GSBNFXPSLTʹରԠ "OHVMBS
7VFKT 3FBDU/BUJWF 1PMZNFS
None
1. Developer experience
Story driven development ίϯϙʔωϯτΛ༻ҙ͢Δ ίϯϙʔωϯτΛࢀরͨ͠TUPSJFTϑΝΠϧΛ࡞Δ QSPQTͷύλʔϯʹԠͯ͡TUPSZΛ૿͍ͯ͘͠
).3 )PU.PEVMF3FQMBDFNFOU ରԠͯ͠ΔͷͰɺ αΫαΫը໘Λ։ൃͰ͖Δ
Demo
Tips: Scaffold your stories TUPSJFTͷܗΛੜ͢ΔTDSJQUΛ࡞͓ͬͯ͘ͱศར ྫ+49$44.PEVMFTTUPSJFT NVTUBDIFNJOJNJTUJORVJSFSΛΈ߹ΘͤΔͱ͓
खܰʹ$-*͕࡞ΕΔ ϝϯόʔͷͨΊʹಋೖোนগ͠Ͱ͓ܰͯ͘͘͠
Why do you need component catalogue? ΞϓϦέʔγϣϯʹϨΞέʔεҟৗܥ͕͖ͭͷ ௨ৗಈ࡞Ͱ౸ୡͰ͖ͳ͍ݟͨ
7JFX͕औΓಘΔঢ়ଶͯ͢ΞΫηεՄೳͰ͋Δ͖ ϨΞέʔεͷݟͨΛTUPSZͱͯ͠༻ҙ͢Δ͜ͱͰɺ ৗʹ֬ೝՄೳͳঢ়ଶʹ͓ͯ͘͠
Stories for abnormal properties ࣮ࡍͷΞϓϦέʔγϣϯͰ࠶ݱ͕໘ͳύλʔϯୡ
2. Accelerate communication
With reviewers ʮ7JFX͕औΓಘΔঢ়ଶʹΞΫηεՄೳʯͰ͋Δҙຯ 6*ίϯϙʔωϯτͷมߋΛ4UPSZCPPLͰ֬ೝՄೳ ։ൃऀಉ࢜ͷϨϏϡʔḿΔ
With reviewers ֬ೝ͖͢TUPSZ͕Ұྎવ
With designers 4UPSZCPPLΛνʔϜͰڞ༗͢Εɺ࣮ͨ͠6*ͷ ϑΟʔυόοΫΛಘ͍͢ ΞχϝʔγϣϯάϥϑͳͲɺσβΠϯΧϯϓͷΈ Ͱදݱ͕͍͠6*ͰޮՌత σβΠϯ࣮ͷαΠΫϧΛΑΓૣ͘ճ͢͜ͱ͕Ͱ
͖Δ
Tips: How to deploy Storybook build-storybook ίϚϯυͰ੩తαΠτग़ྗ (JU)VC1BHFT4ɺ$JSDMF$*"SUJGBDUTʹΞοϓϩʔυ
# .circleci/config.yml - run: yarn run build-storybook -o /tmp/storybook - store_artifacts: path: /tmp/storybook
As CircleCI artifacts
3. Improve unit testing
BTW, How to test view?
What should we assert? <template> <div class="greeting"> <div v-if="lang==='en'"> Good
evening, {{name}}. </div> <div class="fr" v-if="lang==='fr'"> Bon soir, {{name}}! </div> </div> </template> <template> <div class="greeting"> <div v-if="lang==='en'"> Good evening, {{name}}. </div> <div class="fr" v-if="lang==='fr'"> Bon soir, {{name}}! </div> </div> </template>
What should we assert? <template> <div class="greeting"> <div v-if="lang==='en'"> Good
evening, {{name}}. </div> <div class="fr" v-if="lang==='fr'"> Bon soir, {{name}}! </div> </div> </template> <template> <div class="greeting"> <div v-if="lang==='en'"> Good evening, {{name}}. </div> <div class="fr" v-if="lang==='fr'"> Bon soir, {{name}}! </div> </div> </template> assert.equal(node.textContents, ‘Bon soir Quramy!’) assert(node.hasClass(‘fr’)) assert.equal(node.nodeName, ’div’)
Does the test make sense…? %0.ͷΞαʔγϣϯෆໟʹͳΓ͕ͪ ʮEJWλάͰ͋Δ͜ͱʯΛ͔֬Ίͯҙຯͳ͍ ͰʮϨϯμϦϯά͞Εͨ͜ͱʯݕূ͍ͨ͠
Կؾͳ͍༷มߋ͕ΞαʔγϣϯΛই͚ͭͯ͠·͏ ࠷ѱͳͷςετΛॻ͘श׳͕ແ͘ͳͬͯ͠·͏͜ͱ
So, snapshot testing
Snapshot testing ςετ݁Ռ 4OBQTIPU Λʮਖ਼͍݁͠Ռʯͱͯ͠อଘ ࣍ճςετ࣌ʹલճ݁ՌͱͷࠩΛݕࠪ͢Δ The latest
snapshot (DOM String) The actual snapshot (DOM String) Update if snapshot is accepted Assertion
Snapshot with Jest import React from 'react'; import Link from
'../Link.react'; import renderer from 'react-test-renderer'; it('renders correctly', () => { const tree = renderer .create(<Link page="http://www.facebook.com">Facebook</Link>) .toJSON(); expect(tree).toMatchSnapshot(); });
Snapshot with Jest & Storybook ެࣜΞυΦϯ4UPSZTIPUT ॻ͍ͨTUPSJFT͕ͦͷ··ςετʹͳΔศརͳࢠ
֤TUPSZΛ+FTUͷςετέʔεͱͯ͠ɺ ࣗಈతʹεφοϓγϣοτςετΛ࣮ߦͯ͘͠ΕΔ
Workflow with Storyshots ίϯϙʔωϯτͷग़ྗ %0. ʹมߋ͕ͳ͍έʔε લճͷεφοϓγϣοτͱࠓճͷεφοϓγϣοτ ʹ͕ࠩੜ͡ͳ͍ͨΊɺςετ0,
Workflow with Storyshots ίϯϙʔωϯτͷग़ྗ %0. ʹมߋ͕͋Δέʔε εφοϓγϣοτʹ͕ࠩੜ͡ɺςετࣦഊ͢Δ
Workflow with Storyshots εφοϓγϣοτϑΝΠϧΛߋ৽ͯ͠ɺ 13ͷϒϥϯνʹؚΊΔ ϨϏϡΞʔɺมߋ͞ΕͨεφοϓγϣοτϑΝΠϧ ؚΊͯϨϏϡʔΛߦ͏
ҙਤ͠ͳ͍มߋ͕͋Δ߹ϨϏϡʔͰغ٫͢Δ
Tips: Coverage 4UPSZTIPUT7JFXͷΧόϨοδऔಘͯ͘͠ΕΔ
Furthermore: Screenshot test 4UPSZCPPLͰը૾ճؼςετ '0-*0Ͱະணख 4UPSZCPPLͱSFHTVJUͰؾܰʹ͡ΊΔ7JTVBM 3FHSFTTJPO5FTUJOH
https://blog.wadackel.me/2018/storybook-chrome-screenshot-with-reg-viz/ 4DSFFOTIPUUFTUJOHXJUI3FBDUBOE4UPSZCPPL https://medium.com/bleeding-edge/screenshot-testing-with-react-and- storybook-19ab7e49ec92
Summary
Storybook provides ίϯϙʔωϯτΛαΫαΫ࡞ΕΔڥ ࣮ࡍʹʮಈ͘ʯ6*ΛνʔϜશମʹڞ༗ ͦͷ··7JFXͷςετج൫ͱͯ͑͠Δ
What’s important ಋೖʹΑΔෆརӹ͕Ͳ͜ʹແ͍ ʮςετॻ͚ʂʯͰॻ͍ͯ͘ΕΕۤ࿑͠ͳ͍ ؾ͍ͮͨΒςετʹͳͬͯɺଞͷϝϯόʔتΜͰ͘ ΕΔͬͯɺ࠷ߴ͡Όͳ͍Ͱ͔͢ʁ
Appendix ࣮4UPSZCPPLΛಋೖͨ͠ͷൺֱత࠷ۙ 5; ͓Αͦϲ݄ͰͲͷఔΘΕ͍ͯΔ͔ d4UPSJFT
$PWFSBHF
Storybook is a development environment for UI components. https://github.com/storybooks/storybook
Thank you! By @Quramy