はじめに
「共通コンポーネントをみんなに使ってもらう時、いちいち使い方を説明するのはしんどそう」
という事で、Storybookというコンポーネントカタログを使い、サンプルと説明を合わせて見せられる状態を作ってみました。
こんな感じです。
これを ↓ の流れで作ってみたので書いていきます。
- Librayの作成
- Storybookの導入
- storyを追加
- addon-docsを使って見せ方を変える
Libraryの作成
今回は共通コンポーネントの配布を予定していた為、Libraryを作りました。
「そんなの知ってる」 or 「配布しない」といった方は読み飛ばしてください。
-
ライブラリを作成します
ng g library shared
-
コンポーネントを作成します
ng g component Hogehoge --project shared
-
コンポーネントの中身を実装します
-
作ったコンポーネントを使えるよう、エクスポートします
shared.module.ts
@NgModule({ exports: [SharedComponent,HogehogeComponent] })
-
ライブラリをビルドします
ng build --project=shared
これでdist/shared
が作られたと思います。これを配布して使ってもらいます。
Storybookの導入
ライブラリの説明書を作っていきます。
導入方法はここの通りです。
-
自動セットアップをします
npx -p @storybook/cli sb init --type angular
-
Storybookを起動します
yarn storybook
storyを追加する
色々書き方があるらしい...今回は CSF という書き方で書いていきます。
-
stories
フォルダにhogehoge.stories.ts
を作成します。 -
Hogehoge.stories.ts
にstoryを追加する為に、export default
-> このstory全体の設定export const hogehoge
-> 追加するstory
を書いていきます。
shared.module.ts
import { moduleMetadata } from '@storybook/angular'; import { SharedModule } from '../../projects/shared/src/lib/shared.module'; import HogehogeNote from './HogehogeNote.md'; export default { title: 'HogehogeComponent', parameters: { notes: { markdown: HogehogeNote } }, decorators: [ moduleMetadata({ imports: [SharedModule], }), ], }; export const story = () => ({ template: ` <lib-hogehoge [buttonStyle]="'blue'" [name]="'Hoge'"></lib-hogehoge> ` });
【補足】
-
title:
はこのstory全体のタイトル。 -
notes:
はコンポーネントの補足情報。手順3にて作成する.md
を読み込ませています。なくてもよい。 -
moduleMetadata({imports:[]})
はコンポーネントを動かす際に必要なモジュール等を記載しています。 -
template:
はCanvasに表示するコンポーネントを記載しています。
-
-
hogehogeNote.md
ファイルを作成し、Noteに表示する内容を記載します -
storybookを起動します
yarn storybook
こんな感じになります。
ここではあらかじめ作っていたHogehogeComponentが表示されています。
Canvasタブ
Notesタブ
addon-docsを使って見せ方を変える
addon-docsというアドオンを使っていきます。
-
下記コマンドでインストールします
yarn add -D @storybook/addon-docs
-
.storybook
配下にpresets.js
を作成して以下のコードを追加しますmodule.exports = ['@storybook/addon-docs/angular/preset'];
-
下記のコマンドでstorybookを起動します
yarn storybook --docs
-
表示のされ方に合わせてmarkdownやstoryを追加・修正します
今回は、以下のような修正をしました。-
HogehogeNote.md
に記載していた文言の一部をcomponentSubtitle
に移動 - storyを追加し、作ったコンポーネントの使用例を並べる
Hogehoge.stories.ts
export default { ~省略~ parameters: { componentSubtitle: 'Hogehogeのガイド', notes: { markdown: HogehogeNote } }, ~省略~ }; export const story = () => ({ ~省略~ }); export const example = () => ({ template: ` <lib-hogehoge [buttonStyle]="'blue'" [name]="'blue'"></lib-hogehoge> <lib-hogehoge [buttonStyle]="'blue-border'" [name]="'blue-border'"></lib-hogehoge> <lib-hogehoge [buttonStyle]="'yellow'" [name]="'yellow'"></lib-hogehoge> <lib-hogehoge [buttonStyle]="'yellow-border'" [name]="'yellow-border'"></lib-hogehoge> <lib-hogehoge [buttonStyle]="''" [name]="'none'"></lib-hogehoge> ` });
-
ちなみにビルドは下記コマンドです。
yarn build-storybook --docs
addon-docs以外にも様々なaddonが公開されており、色々な見せ方・使い方がありそうです。
素敵な使い方があったら教えてください。