Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20230511 Storybookを軸としたコンポーネント管理と自動テスト戦略
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shozo koga
May 11, 2023
Technology
880
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
880
20230311 最近のElixir動向まとめ
koga1020
0
930
【Elixir】Dataloaderを導入してGraphQLのN+1問題を解消する
koga1020
1
550
20221108 WEB+DB PRESS Vol.131「はじめてのElixir」特集記念イベント
koga1020
1
280
fukuoka.exの思い出話とこれからを考える
koga1020
1
270
Ectoの全体感をまとめてみる
koga1020
0
590
Phoenix.PubSubの紹介と活用を考える
koga1020
0
590
EDI#1 発足LT会
koga1020
0
96
Web開発 × Elixir
koga1020
0
330
Other Decks in Technology
See All in Technology
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.1k
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
480
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
320
20260930_Gemma4_Hands-on
tsho
0
240
Kiro Crewをはじめよう
kizawa2020
1
100
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
880
Deep Data Security 機能解説
oracle4engineer
PRO
2
730
今さら理解するウェブフォントver.2026
takanorip
3
400
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
300
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
680
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
180
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
570
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Done Done
chrislema
187
17k
RailsConf 2023
tenderlove
30
1.6k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
420
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
580
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
ラッコキーワード サービス紹介資料
rakko
1
5.2M
How to make the Groovebox
asonas
2
2.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
400
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を絶対に腐らせない強い気持ち