Reading Storybook
ディレクトリ構造
.
├── code // Storybookの本体周り
│ ├── __mocks__
│ ├── addons
│ ├── e2e-tests
│ ├── frameworks
│ ├── lib
│ ├── node_modules
│ ├── presets
│ ├── renderers
│ └── ui
├── docs
│ ├── addons
│ ├── api
│ ├── assets
│ ├── builders
│ ├── configure
│ ├── contribute
│ ├── essentials
│ ├── get-started
│ ├── sharing
│ ├── snippets
│ ├── versions
│ ├── writing-docs
│ ├── writing-stories
│ └── writing-tests
├── node_modules
├── sandbox rootで`yarn start`すると生成される環境
│ └── react-vite-default-ts
├── scripts rootで`yarn start`した際に実行されるファイルが
│ ├── node_modules
│ ├── prepare
│ ├── sandbox
│ ├── tasks
│ └── utils
└── test-storybooks
├── ember-cli
├── external-docs
├── server-kitchen-sink
└── standalone-preview
storybook dev
が実行されて、Manager app 部分がレンダリングされるまでの流れ
3 行まとめ
-
yarn start
で sandbox 環境が構築され、すぐに動作確認ができる -
storybook dev
では Express が起動し、ejs から HTML がレンダリングされる - Manager app 部分は
@storybook/manager
パッケージが該当しており、React で実装されている
処理の流れ
-
storybook
パッケージの index.js が実行され、@storybook/cli/bin/index
が require される -
@storybook/cli
パッケージのbin/index.js
が実行され、'../dist/generate.js'
が require される - require された
code/lib/cli/src/generate.ts
(ビルド前)で、commanderを使ってstorybook dev
コマンドが定義される -
storybook dev
コマンドでは、code/lib/cli/src/dev.ts
のdev
関数が実行される -
dev
関数では、@storybook/core-server
パッケージのbuildDevStandalone
が実行される -
buildDevStandalone
ではcode/lib/core-server/src/dev-server.ts
で定義されたstorybookDevServer
が実行される -
storybookDevServer
では Express を使ってサーバーが起動 -
@storybook/builder-manager
パッケージが提供するビルダーを使ってベースとなる HTML をレンダリング - Manager app と呼ばれる部分は
@storybook/manager
パッケージで React でレンダリングされる
今回登場する code 配下のディレクトリ
.
├── frameworks
│ └── react-vite
├── lib
│ ├── builder-manager // 8. @storybook/builder-manager
│ ├── builder-vite
│ ├── cli // 2~5. @storybook/cli
│ ├── cli-storybook // 1. storybook
│ └── core-server // 6~7. @storybook/core-server
└── ui
└── manager // 9. @storybook/manager
storybook
パッケージ
1. @storybook/cli
の wrapper パッケージで@storybook/cli
を require してるのみ。
@storybook/cli
2~5. @storybook/cli/bin/index.js
ではgenerate.js
を require している
generate.js
のビルド前のコードはcode/lib/cli/src/generate.ts
であり、ここではstorybook dev
を含むコマンドの処理が実装されている。
storybook dev
コマンドではdev
関数が実行され、@storybook/core-server
のbuildDevStandalone
が呼び出される
@storybook/core-server
6~7. @storybook/core-server
のbuildDevStandalone
では dev サーバーの起動にstorybookDevServer
が実行されている
storybookDevServer
では Express を使ってサーバーが起動
Manager app 部分はmanagerBuilder.start()
でレンダリングされている
managerBuilder
の実態は'@storybook/builder-manager'
を import したもの
@storybook/builder-manager
8. managerBuilder.start()
ではstarter
関数が実行される
starter 関数では html をレンダリングし、/
のレスポンスとして渡している
また、テンプレートエンジンとして ejs が使われる
このテンプレートではクライアントサイドの runtime として'./sb-manager/runtime.js'
が import される
./sb-manager/runtime.js
は@storybook/manager
パッケージで生成された js ファイル
(coreDirOrigin
のパスが@storybook/manager
になっている)
`coreDirOrigin: '/storybook/sandbox/react-vite-default-ts/node_modules/@storybook/manager/dist'`
@storybook/manager
9. ./sb-manager/runtime.js
のビルド前のcode/ui/manager/src/runtime.ts
ではrenderStorybook
を使ってクライアントサイドのレンダリングをしてる
renderStorybook
では React をレンダリングしている