Turborepo で Storybook を使用する
Storybook (新しいタブで開きます) は、隔離された環境で UI コンポーネントを構築するための人気の高い方法です。Storybook を Turborepo に組み込むことで、アプリケーションと並行してデザインシステムを簡単に開発できます。テンプレートを使用したい場合は、このガイドでは Vercel でこの Storybook/Turborepo テンプレート (新しいタブで開きます)を構築する方法について説明します。
ガイド
このガイドでは、以下の方法を説明します。
- モノレポで Storybook を設定する
- 最初のストーリーを作成する
- Storybook が他のタスクと連携するようにする
1. モノレポを作成する
既存のプロジェクトがない場合は、クイックスタートを使用して新しいモノレポを作成します。
npx create-turbo@latest
2. 新しい workshop
アプリを追加する
Storybook は使用するビルダが必要なので、Vite アプリを作成します。
cd apps
npm create vite
プロンプトに従って、「workshop」という名前のアプリを React、TypeScript アプリとして作成します。
次に、Storybook のスキャフォールディングを行う必要があります
cd workshop
npx sb init --skip-install
npm install --save-dev @storybook/cli # Manually install deps and CLI
--legacy-peer-deps
フラグを有効にするように求められる場合があります。このフラグは、Storybook がモノレポで動作するために必要です。3. Button コンポーネントのストーリーを設定する
Storybook のスキャフォールディングでは、/src/stories
ディレクトリにいくつかのストーリーと React コンポーネントが作成されます。ui
パッケージのボタンのストーリーを作成するには、Button.stories.tsx
のインポートを独自のものに置き換えます。
ui
パッケージの Button を、ストーリーの仕様と一致するように更新します。
interface Props {
primary?: boolean;
size?: "small" | "large";
label?: string;
}
export const Button = ({
primary = false,
label = "Boop",
size = "small",
}: Props) => {
return (
<button
style={{
backgroundColor: primary ? "red" : "blue",
fontSize: size === "large" ? "24px" : "14px",
}}
>
{label}
</button>
);
};
ui
パッケージをworkshop
アプリに追加します
{
// ...
{
"dependencies": {
"ui": "*",
// ...
}
}
}
そして、ui
パッケージが workshop
アプリにインストールされていることを確認するために、もう一度 npm install
を実行します。
Button.stories.tsx
のButton
インポートを、ui
パッケージからのものになるように置き換えます
import { Button } from 'ui'
4. タスクを調整する
最後に行う必要があるのは、Storybook が他のタスクと連携していることを確認することです
{
// ...
"scripts": {
"dev": "storybook dev -p 6006",
"build": "storybook build"
}
}
ビルドキャッシュを確実に使用するためには、まずstorybook-static
を.gitignore
に追加する必要があります。次に、storybook-static
をturbo.json
のビルドタスクの出力に追加します。
{
"pipeline": {
"build": {
"outputs": [
"dist/**",
+ "storybook-static/**"
]
}
}
}
dev
タスクとbuild
タスクには、Storybookが含まれるようになります。これにより、アプリケーションと並行してStorybookを開発し、他のアプリケーションと同様にキャッシュされたビルドを利用できます。
Vercelにデプロイする
Storybookプロジェクトをデプロイしましょう。
プロジェクト設定の「一般」タブにある「ビルドと開発の設定」で、「出力ディレクトリ」をstorybook-static
に変更します。