作成日: 2023-4-25
更新日: 2023-9-28
フロントエンド開発で使われている部品のカタログです。
Web開発では、ヘッダーやボタンなどの部品を組み合わせて開発を行なっています。
この部品のことをコンポーネントと呼んだりします。
Storybookを使うとそのコンポーネントがどんなデザインか、どんな挙動をするかの確認ができます。
使いたいコンポーネントをStorybookを通してすぐに見つけることができるのでは開発が楽になります。
ちなみに自分の開発チームではStorybookを使っていないので、プロダクトから良さげなコンポーネントを探す旅に出かける必要があります。
めちゃくちゃめんどくさいです。
Storybookは既存プロジェクトでのみ使用可能です。
あらかじめ作成してあるNext.jsアプリケーションのルートディレクトリに移動してください。
本記事でのNext.jsの環境は以下となっています。
以下コマンドを入力します。
$ npx storybook init
Storybook側でフレームワークとかを検知してくれます。
Storybookはプロジェクトで採用しているCSSフレームワークによって設定方法が異なります。
今回は、tailwind cssでのSrorybookの設定方法を解説します。
なお、tailwind cssの導入については解説を省略します。
まずは、concurrentlyをインストールします。
このパッケージを利用することで複雑なコマンドを実行することができます。
$ npm install --dev concurrently
インストールが完了したらpackage.jsonのスクリプトに以下を追加します。
"scripts": {
"storybook": "concurrently \"yarn:watch:*\"",
"build-storybook": "concurrently \"yarn:build:*\"",
"build:css": "npx tailwindcss -i ./styles/globals.css -o ./public/tailwind.css",
"build:storybook": "build-storybook",
"watch:css": "npx tailwindcss -i ./styles/globals.css -o ./public/tailwind.css --watch",
"watch:storybook": "start-storybook dev -p 6006"
},
buils:cssやwatch:cssのcssファイルはプロジェクトによって配置場所が違うと思うので、適宜書き換えてください。
./storybook/preview.jsにcssファイルをimportします。
// 追加
import '../styles/globals.css';
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
}
ここまでで準備は完了です。
stories配下にStorybookで取り扱いたいコンポーネントを追加します。
今回はDevHarryのヘッダーをStorybookで表示します。
まずは、stories/Header.stories.tsxを作成します。
import { ComponentMeta } from '@storybook/react'
import Header from '../components/organisms/Header'
export default {
title: 'Header',
component: Header
} as ComponentMeta<typeof Header>
export const NomalHeader = () => {
return (
<Header />
)
}
titleで左のメニューバーの設定ができます。
export const 'Storybookで表示したいコンポーネント名'で関数を書きます。
コマンドでStorybookを起動します。
$ npm run storybook
今回のケースでは、以下のような表示がされます。
ちなみにですが、node: 18でstorybookを動かしたところ、以下のエラーが表示されました。
Error: error:0308010C:digital envelope routines::unsupported
~略~
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
opensslに互換性がないことによるエラーのようです。
node: 16では動作確認ができています。
今回は、Storybookの導入、設定方法について解説しました。
Storybookは便利なのですが、コンポーネントを追加するたびにStorybookも追加する必要があるため、開発の工数は余計にかかります。
若干の手間はかかりますが、プロダクトのコンポーネントの数が増えてきたときに手軽に挙動、スタイルを簡単に確認することができるので、長い目で見ると非常に重宝できるツールです。
開発人数が多めなら積極的に使いたいですね。