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
20230511 Storybookを軸としたコンポーネント管理と自動テスト戦略
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shozo koga
May 11, 2023
Technology
810
0
Share
20230511 Storybookを軸としたコンポーネント管理と自動テスト戦略
2023/05/11(木) に開催された「スタフェス Meetup #3 - PJの技術的取り組み公開」にて登壇しました
shozo koga
May 11, 2023
More Decks by shozo koga
See All by shozo koga
Looker StudioとSnowflakeでプロダクトチームのダッシュボードを作る取り組み
koga1020
0
820
20230311 最近のElixir動向まとめ
koga1020
0
850
【Elixir】Dataloaderを導入してGraphQLのN+1問題を解消する
koga1020
1
510
20221108 WEB+DB PRESS Vol.131「はじめてのElixir」特集記念イベント
koga1020
1
260
fukuoka.exの思い出話とこれからを考える
koga1020
1
230
Ectoの全体感をまとめてみる
koga1020
0
560
Phoenix.PubSubの紹介と活用を考える
koga1020
0
540
EDI#1 発足LT会
koga1020
0
75
Web開発 × Elixir
koga1020
0
310
Other Decks in Technology
See All in Technology
DevOpsDays2026 Tokyo Cross-border practices to connect "safety" and "DX" in healthcare
hokkai7go
0
160
🀄️ on swiftc
giginet
PRO
0
380
Azure PortalなどにみるWebアクセシビリティ
tomokusaba
0
330
目的ファーストのハーネス設計 ~ハーネスの変更容易性を高めるための優先順位~
gotalab555
2
480
最初の一歩を踏み出せなかった私が、誰かの背中を押したいと思うようになるまで / give someone a push
mii3king
0
150
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
16k
OBI+APMでお手軽にアプリケーションのオブザーバビリティを手に入れよう
kenshimuto
0
310
JEDAI in Osaka 2026イントロ
taka_aki
0
220
AIエージェントを構築して感じた、AI時代のCDKとの向き合い方
smt7174
1
250
非エンジニア職からZOZOへ 〜登壇がキャリアに与えた影響〜
penpeen
0
480
DevOpsDays Tokyo 2026 軽量な仕様書と新たなDORA AI ケイパビリティで実現する、動くソフトウェアを中心とした開発ライフサイクル / DevOpsDays Tokyo 2026
n11sh1
0
130
Hello UUID
mimifuwacc
0
140
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Typedesign – Prime Four
hannesfritz
42
3k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.3k
Exploring anti-patterns in Rails
aemeredith
3
320
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
500
Navigating Team Friction
lara
192
16k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
130
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
170
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
160
The Language of Interfaces
destraynor
162
26k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
520
Transcript
Storybook を軸としたコンポーネント管理と 自動テスト戦略 2023.05.11@ スタフェス Meetup #3 - PJ の技術的取り組み公開
@koga1020_
About Me @koga1020_ @koga1020 koga1020.com 古賀 祥造(koga1020) 株式会社スターフェスティバル ソフトウェアエンジニア 2023.01に入社
/ 十五夜プロジェクト TechPM 福岡在住のリモートワーカー👨💻 FindyのChatGPTエンジニアキャリアまとめ 「ソフトウェア界の鬼殺し」「オシャレIT男子」 2
お品書き 📝 担当しているプロダクトとチーム体制 フロントエンド領域での取り組み Atomic Designの良し悪し、課題感 Storybookの活用 開発スタイル テストの方針 ドキュメンテーション
3
プロダクトとチーム体制 4
"ごちクルBusiness" というプロダクトを開発しています 従業員のアカウント管理、請求管理など、法人さまがより便利にごちクルをご利用いただけるようにするサービス 5
チーム体制 「プロダクトファースト」を掲げ、プロダクトごとに開発チームが存在する 各チームが裁量を持って、意思決定しながら開発を進めている 参考:「プロダクトファースト」へ大きく舵を切って約2年、スタフェスの現在地は?CTO x CPOが対談 KAGUYA プロジェクト PJ 横断
KAGUYA ⼗五夜 デザイナーチーム プロダクト チーム プロダクト チーム KAGUYA KM ごちクル Business PJ リーダー sotarok エンジニア PDM オペレーション 6
開発スタイル 全員リモートワークのため、対面でのコミュニケーションは無し🏠👨💻 PdM主導で要件を固めてConfluence, Figmaを整備 エンジニアと技術的な観点も踏まえて要件を詰めていく 余談:figma, confluenceのslack通知をチーム皆で設定して非同期コミュニケーションが活性化しました👍 slackで「このコメント見てください!」のコストをなくす 7
プロダクトの構成・技術スタック 8
フロントエンドの構成 ごちクルBusiness Frontend[Next.js] Backend[NestJS] Client BFF Server trpc Endpoint trpc
call API 9
フロントエンドの構成 ごちクルBusiness Frontend[Next.js] Backend[NestJS] Client BFF Server trpc Endpoint trpc
call API 10
Atomic Designでやっています おなじみAtomic Designです Pagesの扱いをNext.jsの pages ディレクトリとし、それ以外は components/ で管理しています 11
./ └── src/ ├── pages/ │ └── user/ │ └── index.tsx ・・・ pages に相当するコンポーネン └── components/ ├── atoms/ │ └── Label/ │ ├── index.tsx ・・・ Barrel file │ ├── Label.tsx ・・・ 実装ファイル │ └── Label.stories.tsx ・・・ story ├── molecules ├── organisms ├── templates └── pages ・・・ storybook 格納用
所感 atoms, moleculesはめちゃくちゃしっくりきています👏 きちんとstorybookを運用することで、再利用可能なコンポーネント開発ができています 「🧑💻 別画面でも使うTableコンポーネント作っといたで〜」 「👩💻 すでにそのUIならListコンポーネントがありますよ〜」 Figmaを眺めることで、共通の部品が見えてくる Table,
Card, Form, Modal, …etc templates、organismsも今の規模感だと違和感なし pagesの実装は今後のスケール時に要注意⚠️ 外部API呼び出しなど、ドメインロジックをpages内で実装している現状 複雑な画面だとpagesが肥大化してきているのも事実 12
機能単位でのディレクトリ構成も検討したが採用せず pagesの肥大化に対して打ち手を検討した Bulletproof Reactで紹介されているような、機能ごとに分割する構成も考えた 参考: 私の推しフロントエンドディレクトリ構成と気をつけたいポイント 今の規模感であれば、Pages内にロジックが書かれていても追えるボリュームでは?という結論に至った 機能単位に分けたことにより、実はatoms, molecules, organisms
など再利用可能なものにできるものを 個別に実装してしまう可能性を危惧した プロジェクトで再利用可能なコンポーネントを育てていく方を優先することとした 今後やたら複雑なページが出てくるなどした場合には再考の余地あり 13
再利用可能なコンポーネントを育てるには 🌱 storybookを活用しまくる!! ただ、storyの実装はコストがかかるのは事実 storybookを腐らせずに、かけたコストに対してリターンを最大限享受するためにどうするか🤔 14
Storybook の活用と自動テスト戦略 15
Storybook活用のポイント ① Storybook 駆動で開発する ② story をテストに再利用する ③ story が壊れていないことを担保する
④ 開発時のドキュメンテーションとして活用する 16
① storybook駆動で開発する 実装を書いた後にstoryを用意するのではなく、まず実装が空の状態からstoryを用意する ページに組み込む前からコンポーネントのレンダリング結果を確認する環境としてstorybookを利用する hygenを活用して、実装ファイルとストーリーファイルがコマンド一発で出来る環境を整備しています🚀 Component Story Format3(CSF3.0)だとだいぶ書きやすいです Storybook7からCSF3がデフォルトとのこと https://storybook.js.org/blog/storybook-csf3-is-here/
17
Storybook活用のポイント ① Storybook 駆動で開発する✅ ② story をテストに再利用する ③ story が壊れていないことを担保する
④ 開発時のドキュメンテーションとして活用する 18
② storyをテストに再利用する 単純なコンポーネントであれば別途specを用意せず、storybookのビルドが通るかで担保する specを書きたい!となったらそれはなんらかのロジックを伴うもののはず 別途 hooks などに関数として切り出し、その切り出した関数の単体テストを書けば十分なはず specを書く場合には、storyを再利用して書くべし 参考: Storybook
CSF3.0で登録したStoryをJestで再利用する clickやテキスト入力など、イベントが必要なテストはInteraction testとして実装する https://storybook.js.org/docs/react/writing-tests/interaction-testing 後述するChromaticではこのInteraction testが通らない場合はエラーとして検出できます🎉 19
② storyをテストに再利用する https://storybook.js.org/docs/react/writing-tests/interaction-testing 20
Storybook活用のポイント ① Storybook 駆動で開発する✅ ② story をテストに再利用する✅ ③ story が壊れていないことを担保する
④ 開発時のドキュメンテーションとして活用する 21
③ storyが壊れていないことを担保する CIでstorybookのbuildが通ることを常に担保すべし CIで見ておかないと気づいたらビルドが通らないstoryが出来ているなんてことも 割れ窓理論。割れた窓を作らないように頑張りましょう🪟💥 Chromatic が超便利 storybookのホスティングサービス。VRT(Visual Regression Test)やUIレビューが可能
前述したinteraction testも実行され、動作の担保ができる 無料枠もあり気軽にお試しできます note: 気をつけないとdependabotやrenovateでガンガン回るのでお気をつけを Turbosnap という差分ビルドの仕組みもあります StorybookのTest runnerでもビルドおよびinteraction testが通ることを担保できます 22
Storybook活用のポイント ① Storybook 駆動で開発する✅ ② story をテストに再利用する✅ ③ story が壊れていないことを担保する✅
④ 開発時のドキュメンテーションとして活用する 23
④ 開発時のドキュメンテーションとして活用する 特定のコンポーネント・storyと紐づかないドキュメントも記述できる mdx#writing-unattached-documentation Storyのレンダリング結果やTailwindCSSの設定などを参照してドキュメントが書けるので、 READMEのようなドキュメントよりコードに近い状態で管理できる 参照すべきドキュメントをstorybookに寄せ、プロダクトコードと同じく保守すべき対象であるという意識づけを行う 誰も見ない、使わないものは腐りゆく 🙈 24
④ 開発時のドキュメンテーションとして活用する 例. カラーのガイドライン。Component のstory と独立したセクションを設けてドキュメントを用意できる 25
④ 開発時のドキュメンテーションとして活用する addon-designsを入れるとstorybook上にFigmaを埋め込むことができる デザインとの齟齬を確認したり、storyを見てるときにパッとfigmaに移動できて便利 26
Storybook活用のポイント ① Storybook 駆動で開発する✅ ② story をテストに再利用する✅ ③ story が壊れていないことを担保する✅
④ 開発時のドキュメンテーションとして活用する✅ 27
WEB+DB PRESS vol.134に掲載されてます 28
まとめ 弊チームの開発スタイル PJリーダー、エンジニア、PdMがいて、スクラムをぐるぐる回している Slack, Figma, Confluenceで非同期コミュニケーションを中心にモリモリ開発 フロントエンド 長い時間軸でプロダクトを育て続けられるコンポーネント管理を目指す コストとリターンのバランスをとりつつstorybookの活用を狙う 割れ窓に気をつけつつ、Chromatic、CIを活用してStorybookを絶対に腐らせない強い気持ち