導入
開発現場で「あのボタンの仕様はどこに書いてある?」「修正したら他の画面で崩れないか不安」といった経験はありませんか?コンポーネントの仕様がドキュメントと乖離してしまうのは、多くのプロジェクトが抱える課題です。Storybookは、コンポーネントをアプリケーションから切り離して独立した環境で開発・表示するツールです。これにより、UIの「状態」を可視化し、常に最新の仕様を反映する「生きた設計書」として活用できます。
基礎知識
Storybookは、ReactやVueなどのコンポーネントをカタログのように一覧表示する開発環境です。ここで重要な概念が「コンポーネント管理」と「デザインシステム」です。デザインシステムとは、プロダクトのUIルールを共通化する仕組みであり、Storybookはそのカタログとしての役割を果たします。Props(引数)を動的に変更して表示を確認できるため、エンジニアだけでなく、デザイナーやQA担当者も、コードを動かさずにUIの挙動を確認できる「共通言語」となります。
実装/解決策
Storybookを導入する際は、コンポーネントごとに「Storyファイル」を作成します。これは、コンポーネントがどのようなPropsを受け取り、どう表示されるかの「カタログ定義」です。ポイントは、単に表示するだけでなく、`Controls`(GUIによるProps操作機能)を活用することです。これにより、特別なコードを書かなくても、ボタンのバリエーション(色、サイズ、無効状態など)をブラウザ上でシミュレーション可能になります。
サンプルプログラム
以下は、Reactで作成したButtonコンポーネントのStory定義例です。
// Button.stories.jsx
import { Button } from ‘./Button’;
export default {
title: ‘Components/Button’,
component: Button,
// GUIでPropsを調整できるように設定
argTypes: {
label: { control: ‘text’ },
primary: { control: ‘boolean’ },
size: { control: { type: ‘select’, options: [‘small’, ‘medium’, ‘large’] } },
},
};
// テンプレートを作成
const Template = (args) => ;
// 各状態の定義
export const Primary = Template.bind({});
Primary.args = {
label: ‘送信する’,
primary: true,
size: ‘medium’,
};
export const Disabled = Template.bind({});
Disabled.args = {
label: ‘無効ボタン’,
primary: false,
size: ‘medium’,
disabled: true, // コンポーネント側で対応が必要
};
応用・注意点
Storybookを運用する上で陥りやすい罠が、「Storyの更新忘れ」です。コードを修正したのにStoryを更新しなければ、それは「嘘をつく設計書」になってしまいます。これを防ぐために、StorybookをCI/CDパイプラインに組み込み、ビルド時に自動チェックを行うのがベストプラクティスです。また、Chromaticのような視覚的リグレッションテストツールを併用することで、UIの崩れを自動検知できるようになり、より堅牢なデザインシステムを構築できます。まずは、小さくコンポーネントを登録することから始めてみてください。

コメント