Storybookを使ってみる

UIコンポーネント集を構築できるツールのStorybookを簡単に使ってみます。
今回はStorybook for HTMLを使用します。

インストール

プロジェクトディレクトリに移動して、下記コマンドを実行します。

npx storybook init --type html

package.jsonや各種パッケージ、サンプルファイルなど、Storybookに必要なファイルが追加されました。

インストール完了後、下記コマンドを実行します。

npm run storybook

ローカルサーバを起動され、ブラウザで表示を確認できました。

左ナビのButtonをクリックすると、サンプルで用意されているボタンのコンポーネントを確認できます。

コンポーネントの追加

コンポーネントを作成するには、storiesディレクトリ内に.stories.*の拡張子でファイルを追加します。
この設定は.storybook/main.jsから変更できます。

例として、Test.stories.jsを追加してみます。

import green from './test-green.html';
import './test.css';

export default {
  title: 'Test',
};

export const Red = () => '<div class="test-red">Red</div>';

export const Green = () => green;

export const Blue = () => {
  const div = document.createElement('div');
  div.innerText = 'Blue';
  div.className = [
    'test',
    'test-blue',
  ].join(' ');
  return div;
};

今回は「Test」というコンポーネントを作成していて、4〜6行目がコンポーネントの設定、8行目以降がそれぞれRed、Green、Blueというストーリーを設定しています。
ストーリーの設定では上記で試している通り、HTMLを直接指定する方法や外部ファイルを読み込む方法、JavaScriptで生成する方法などがあります。

Test.stories.jsの1,2行目でimportしているファイルも追加します。
まずはGreenで使用しているtest-green.htmlです。

<div class="test-green">Green</div>

次にコンポーネントのCSSを設定しているtest.cssです。

.test-red {
  color: red;
}
.test-green {
  color: green;
}
.test-blue {
  color: blue;
}

これで再度表示を確認すると、Testの項目が追加されているのを確認できました。

上記の例ではページ下部のControlsに何も表示されていませんが、ストーリーの設定時に引数を使用することで、Controls部分から値を変更できるようになります。
先ほどのTest.stories.jsを変更してみます。

import './test.css';

export default {
  title: 'Test',
  argTypes: {
    type: {
      table: {
        disable: true,
      },
    },
    size: {
      control: { type: 'select' },
      options: ['small', 'medium', 'large'],
    },
  },
};

const Template = (args) => {
  const div = document.createElement('div');
  div.innerText = args.label;
  const type = 'test-' + args.type;
  const size = 'test--' + args.size;
  const bg = args.bg ? 'test--bg' : '';
  div.className = [
    'test',
    type,
    size,
    bg
  ].join(' ');
  return div;
};

export const Red = Template.bind({});
Red.args = {
  type: 'red',
  size: 'small',
  bg: false,
  label: 'Red',
};

export const Green = Template.bind({});
Green.args = {
  type: 'green',
  size: 'medium',
  bg: true,
  label: 'Green',
};

export const Blue = Template.bind({});
Blue.args = {
  type: 'blue',
  size: 'large',
  bg: true,
  label: 'Blue',
};

今回はtype、size、bg、labelという引数を用意しています。
test.cssも以下のように変更します。

.test-red {
  color: red;
}
.test-green {
  color: green;
}
.test-blue {
  color: blue;
}
.test--bg {
  background: black;
}
.test--small {
  font-size: 80%;
}
.test--medium {
  font-size: 100%;
}
.test--large {
  font-size: 120%;
}

これでControlsから値の変更ができるようになりました。
Storybookのデモページ

ビルド

上記デモページでもファイルの設置を行なっていますが、下記コマンドでビルドができます。

npm run build-storybook

ビルドを行うとstorybook-staticディレクトリが生成され、その中に必要なファイルがビルドされます。

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2022年11月
 12345
6789101112
13141516171819
20212223242526
27282930