StoryBook触ってみるぞ

2022/05/28

Docker
React
Storybook
TypeScript

最近フロントエンドのお仕事が増えてきたのですが、正直フワッとしたまま触っているのでもやもやしています。

そこで今日は流行りのStoryBookを触ってみよう!と思います。

StoryBookとは

StoryBookとは、UIコンポーネントを簡単に作成・管理できるツールです。

React, Vue, Angular, Svelteなどのフレームワークに対応しています。

なぜStoryBookを使うのか

  • UIコンポーネントをカタログのように見ることが出来るので、確認や再利用をすぐに行える
    • 知らないコンポーネントは使いづらい問題、よく発生しがち
  • UIが実際にどのように動作するのかを共有することが可能なので、チーム内での認識を齟齬をなくすことが出来ます
    • 仕様が変わった時に気づきやすい
    • 実装が複雑化すると、コンポーネントの抽象度が上がりがち

まずは雑な環境構築していくぞ

今回の環境はこんな感じで考えています

Docker, Docker Composeを利用する
Nodeは18
React, TypeScript
TailwindCSSを利用

まずはざつにディレクトリを作成

mkdir react-storybook-test

適当なDockerfileとdocker-compose.ymlを作成します

Dockerfile
FROM node:18-alpine
WORKDIR /usr/src/app
docker-compose.yml
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/usr/src/app
    command: sh -c "npm run dev"
    ports:
      - "3000:3000"

buildします

docker compose build

app コンテナのshに入ります

docker compose run app sh

/usr/src/app # npm --version
8.9.0
/usr/src/app #

create-next-appする

/usr/src/app # npx create-next-app app --use-npm --typescript
Need to install the following packages:
  create-next-app
Ok to proceed? (y) y
Creating a new Next.js app in /usr/src/app/app.

Using npm.

Installing dependencies:
- react
- react-dom
- next

...

Success! Created app at /usr/src/app/app
Inside that directory, you can run several commands:

...

/usr/src/app #

./react-storybook-test/app 配下のファイルを全て ./react-storybook-test に持ってきます

shから抜けて、docker composeを起動します

docker compose up

http://localhost:3000をみて、こんな感じの画面が表示されていれば一旦ここまでは成功です!

1.png

次に、tailwindcssをインストールしていきます。

docker compose exec app npm install -D tailwindcss postcss autoprefixer
docker compose exec app npx tailwindcss init -p
tailwind.config.js
module.exports = {
  content: [
    "./pages/**/*.{js,ts,jsx,tsx}",
    "./components/**/*.{js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}
styles/globals.css
@tailwind base;
@tailwind components;
@tailwind utilities;

ここまできたら、 ./pages/index.tsx 内のh1タグのクラスを以下のように変えてみて、コンテナを再起動してみましょう。

pages/index.tsx
<h1 className="text-3xl font-bold underline">
  Welcome to <a href="https://nextjs.org">Next.js!</a>
</h1>

以下のように、タイトルのスタイルが変わっていたらOKです!

2.png

それではいよいよ、本題のStoryBookに入っていきましょう。

docker compose exec app npx -p @storybook/cli sb init

めちゃくちゃ読み込みます

.env.localを作成します

.env.local
SKIP_PREFLIGHT_CHECK=true

docker-compose.ymlを以下のように書き換えます

docker-compose.yml
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/usr/src/app
    command: sh -c "npm run dev"
    ports:
      - "3000:3000"
  storybook:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/usr/src/app
    command: sh -c "npm run storybook"
    ports:
      - "6006:6006"

再度 docker compose up をして、 http://localhost:6006/ を開くと以下の画面が出てこればOKです

3.png

ただ、このままではtailwindcssを読み込むことができないので、addonを追加します。

docker compose exec app npm install -D @storybook/addon-postcss
.storybook/main.js
module.exports = {
  "typescript" : { reactDocgen: false },
  "stories": [
    "../stories/**/*.stories.mdx",
    "../stories/**/*.stories.@(js|jsx|ts|tsx)"
  ],
  "addons": [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-interactions",
    {
      name: '@storybook/addon-postcss',
      options: {
        postcssLoaderOptions: {
          implementation: require('postcss'),
        },
      },
    },
  ],
  "framework": "@storybook/react",
  "core": {
    "builder": "@storybook/builder-webpack5"
  }
}
.storybook/preview.js
import '../styles/globals.css';

export const parameters = {
  actions: { argTypesRegex: "^on[A-Z].*" },
  controls: {
    matchers: {
      color: /(background|color)$/i,
      date: /Date$/,
    },
  },
}

これで完成です!

参考

Related Posts

[Bookレビュー] 『これからはじめるFigma Web・UIデザイン入門』をエンジニアが読んで実践してみた

[Bookレビュー] 『これからはじめるFigma Web・UIデザイン入門』をエンジニアが読んで実践してみた

[Figma]Auto layoutについて説明してみた

[Figma]Auto layoutについて説明してみた