Storybook Driven Development を試している - dev.to/jgs
前々から気になっていた Storybook を試して、プロダクトでも採用してみたので所感を書く。
ちなみに、 Next.js を使っているけれど、
code:_
.babelrc
の設定とかをやっていれば
code:_
start-storybook
の
code:_
-s ./
オプションで問題なく動いた。
動機
ここ数年、React を使って component ベースでウェブページを設計することを何度かやってきているが、未だにパスタコンポーネントが出来上がってしまう。そしてパスタコンポーネント群は往々にして開発がつらくなっていく...。
Storybook について
https://gyazo.com/ce3e82ad4f91b690365627d71dce140b
Storybook は動的にスタイルガイドを生成できるツールで、React だけではなく Vue や Angular にも対応しているよう。
code:_
@storybook/react
をインストールして CLI から起動するだけでホットロードしてくれる画面が立ち上がって便利だった。
サンプルは https://storybook.js.org/examples/ でみれる。
アトミックデザインについて
https://res.cloudinary.com/practicaldev/image/fetch/s--woA-tEty--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.gyazo.com/1e42493f2e45b243085bf9571b593212.png https://res.cloudinary.com/practicaldev/image/fetch/s--woA-tEty--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.gyazo.com/1e42493f2e45b243085bf9571b593212.png
(これが全てだろう)
https://res.cloudinary.com/practicaldev/image/fetch/s--MeTT6R7Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.gyazo.com/758f97c15a3e4721f5a4c020125d04e7.jpg https://res.cloudinary.com/practicaldev/image/fetch/s--MeTT6R7Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.gyazo.com/758f97c15a3e4721f5a4c020125d04e7.jpg
(有名な図)
Storybook を書いていくときにある程度項目立てをしていった方がいいだろう、と考えた。そこで思い出したのが Atomic Design だった。昔、知った時は分類がややこしそうだと思ったが、一旦従ってみることにした。
開発フロー
まずは小物から Atom として Storybook に書いていく。状態によって変化するコンポーネントは状態を列挙して、Storybook 上で確認できるようにしていく。まずは Atom と Molecules たちが仕上がってくる。
各パーツが仕上がったら API とつなぎ込む必要がある Organisms など、動きをつけていく。ここで役に立つのが recompose である。
recompose について
recompose は Lodash ライクな React (特に HoC)向けのユーティリティベルト。
code:_
こんな感じで見た目を司るコンポーネントのみを切り出せるように様々な関数が用意されている。
例えば React の Lifecycle 関数だと
code:_
こんな感じで分離させることができる。
また、これらは
code:_
compose
関数でこれらを組み合わせることもできる。
code:_
ゆくゆくは enzyme を使って Storybook 上で挙動の確認などもできるとよいのだけど、一旦 Storybook ではスタイルガイドに徹することにして
code:_
として、story では
code:_
import {Counter} from '...'
と読み込み、Pages からは
code:_
import Counter from '...'
と読み込むことで見た目のみのコンポーネントと、動き込みのコンポーネントに分けることができた。
見た目に関しては Storybook 上でパーフェクトに仕上がってるので、バチッと動くロジックを書けばうまいこと動くようになるので心地よかった。
今後の展望など
Storybook のドキュメントにも書いてある visual regression test をやってみたい。あとは、上にも少し書いた enzyme を使っての動きのテストなど。
まとめ
Atomic Design に従ったコンポーネント群を Storybook を使って見た目を仕上げてから、recompose を使って動きを足していく開発フローを導入してみている。
余談だけど、ざざっと Examples を見たら Wix の wix-style-react はものすごい使いやすいようにカスタムされていてすごかった...。オフィシャルに取り込んでほしいレベル。
#javascript
original: https://dev.to/jgs/storybook-driven-development---37b7
#20180217 #0217