Storybook が真っ白!起動しない/ビルド失敗の原因と 15 の対処チェック
Storybook を起動したら真っ白な画面が表示されて困っていませんか?開発中に突然 Storybook が動かなくなると、コンポーネントの確認ができず作業が止まってしまいますよね。
この記事では、Storybook の起動失敗やビルドエラーでお悩みの方に向けて、効果的な解決方法を 15 のチェックポイントに分けてご紹介します。基本的な確認事項から高度なトラブルシューティングまで、段階的に問題を特定して解決できるよう構成しました。
背景
Storybook の仕組みと起動プロセス
Storybook は独自の Webpack ベースのビルドシステムを使用し、コンポーネントを独立した環境で動作させています。
mermaidflowchart TD
    start[yarn storybook] --> config[設定ファイル読み込み]
    config --> deps[依存関係解決]
    deps --> webpack[Webpack ビルド]
    webpack --> server[開発サーバー起動]
    server --> browser[ブラウザ表示]
    config --> error1[設定エラー]
    deps --> error2[依存関係エラー]
    webpack --> error3[ビルドエラー]
    server --> error4[サーバーエラー]
    browser --> error5[表示エラー]
上記の図では、Storybook の起動から表示までの一連の流れと、各段階で発生しうるエラーポイントを示しています。
真っ白画面が発生する一般的な原因
Storybook で真っ白画面が発生する原因は大きく分けて以下の 5 つです:
| # | 原因カテゴリ | 具体的な問題例 | 
|---|---|---|
| 1 | 環境問題 | Node.js バージョン不適合、依存関係の競合 | 
| 2 | 設定問題 | main.js 設定ミス、webpack 設定エラー | 
| 3 | キャッシュ問題 | 古いビルドキャッシュが残存 | 
| 4 | ポート問題 | 既に使用中のポートへのバインド失敗 | 
| 5 | アドオン問題 | 互換性のないアドオンの使用 | 
課題
起動時の問題
初回セットアップでの起動失敗
新規プロジェクトで Storybook をセットアップした際に起動に失敗するケースでは、以下の問題が考えられます。
typescript// よくある初回セットアップのエラー例
Error: Cannot resolve module '@storybook/react'
このエラーは依存関係が正しくインストールされていない場合に発生します。
既存プロジェクトでの突然の起動不可
これまで正常に動作していた Storybook が突然起動しなくなる場合には、以下の要因が関係している可能性があります:
- 依存関係の自動更新による互換性問題
 - 開発環境の変更(Node.js バージョンアップなど)
 - キャッシュファイルの破損
 
ビルド時の問題
依存関係エラー
package.json に記載された依存関係と node_modules の実際のバージョンが異なる場合に発生します。
javascript// 典型的な依存関係エラーメッセージ
Module not found: Error: Can't resolve 'react-dom/client'
設定ファイルの問題
.storybook/main.js の設定に問題がある場合、ビルドプロセスが正常に完了しません。
javascript// 問題のある設定例
module.exports = {
  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: [
    '@storybook/addon-essentials',
    // 存在しないアドオンを指定
    '@storybook/addon-nonexistent',
  ],
};
バージョン互換性の問題
Storybook 本体とアドオン、または React や TypeScript との間でバージョン互換性に問題がある場合です。
解決策
基本チェック(5 項目)
以下の基本チェックから始めることで、多くの一般的な問題を解決できます。
1. Node.js/npm バージョン確認
まずは環境の基盤となる Node.js とパッケージマネージャーのバージョンを確認しましょう。
bash# 現在のバージョンを確認
node --version
npm --version
yarn --version
Storybook が推奨する Node.js バージョンは以下の通りです:
| Storybook バージョン | 推奨 Node.js バージョン | 
|---|---|
| 7.x | Node.js 16.x 以上 | 
| 6.x | Node.js 14.x 以上 | 
| 5.x | Node.js 12.x 以上 | 
バージョンが古い場合は、以下のコマンドでアップデートを行います。
bash# Node.jsのアップデート(nvmを使用している場合)
nvm install node
nvm use node
2. 依存関係の再インストール
依存関係の問題を解決するため、クリーンインストールを実行します。
bash# node_modulesとlock fileを削除
rm -rf node_modules
rm package-lock.json  # または yarn.lock
その後、依存関係を再インストールします。
bash# 再インストール実行
yarn install
# または
npm install
3. キャッシュクリア
Storybook と関連ツールのキャッシュをクリアして、古い情報による問題を解消します。
bash# Storybookキャッシュクリア
npx storybook dev --no-manager-cache
# または手動でキャッシュディレクトリを削除
rm -rf node_modules/.cache
npm/yarn のキャッシュもクリアします。
bash# npmキャッシュクリア
npm cache clean --force
# yarnキャッシュクリア
yarn cache clean
4. ポート競合確認
デフォルトポート 6006 が既に使用されている可能性を確認します。
bash# ポート使用状況確認(macOS/Linux)
lsof -i :6006
# ポート使用状況確認(Windows)
netstat -ano | findstr :6006
別のポートで起動を試します。
bash# 別ポートで起動
yarn storybook --port 6007
5. 基本設定ファイル確認
.storybook/main.js の基本的な構文エラーや設定ミスを確認します。
javascript// 最小構成の.storybook/main.js
module.exports = {
  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: ['@storybook/addon-essentials'],
};
設定ファイルに構文エラーがないか JavaScript linter で確認できます。
bash# ESLintでチェック
npx eslint .storybook/main.js
設定関連チェック(5 項目)
基本チェックで解決しない場合は、より詳細な設定を確認します。
6. .storybook/main.js 設定確認
Storybook の中核となる設定ファイルを詳しく見直します。
javascript// 推奨される.storybook/main.js設定
module.exports = {
  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx|mdx)'],
  addons: [
    '@storybook/addon-essentials',
    '@storybook/addon-interactions',
  ],
  framework: {
    name: '@storybook/react-webpack5',
    options: {},
  },
  // TypeScriptプロジェクトの場合
  typescript: {
    check: false,
    reactDocgen: 'react-docgen-typescript',
  },
};
stories パスが正しく設定されているか確認しましょう。
bash# stories ファイルの存在確認
find src -name "*.stories.*" -type f
7. webpack 設定の問題
カスタム webpack 設定が原因でビルドが失敗している可能性があります。
javascript// .storybook/main.js でのwebpack設定例
module.exports = {
  // ... 他の設定
  webpackFinal: async (config) => {
    // カスタムエイリアスの追加
    config.resolve.alias = {
      ...config.resolve.alias,
      '@': path.resolve(__dirname, '../src'),
    };
    // カスタムローダーの追加
    config.module.rules.push({
      test: /\.scss$/,
      use: ['style-loader', 'css-loader', 'sass-loader'],
    });
    return config;
  },
};
webpack 設定に問題がある場合は、一時的にカスタム設定を無効にして起動を試します。
javascript// 最小限のwebpack設定
module.exports = {
  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: ['@storybook/addon-essentials'],
  // webpackFinal を一時的にコメントアウト
};
8. TypeScript 設定確認
TypeScript プロジェクトの場合、tsconfig.json の設定が Storybook と競合している可能性があります。
json// .storybook/tsconfig.json(推奨設定)
{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "jsx": "react-jsx"
  },
  "include": ["../src/**/*", "../stories/**/*"],
  "exclude": ["../src/**/*.test.*"]
}
TypeScript 設定で問題が発生する場合の一時的な回避方法:
javascript// .storybook/main.js でTypeScriptチェックを無効化
module.exports = {
  // ... 他の設定
  typescript: {
    check: false,
    reactDocgen: 'react-docgen-typescript',
    reactDocgenTypescriptOptions: {
      shouldExtractLiteralValuesFromEnum: true,
      propFilter: (prop) =>
        prop.parent
          ? !/node_modules/.test(prop.parent.fileName)
          : true,
    },
  },
};
9. CSS/スタイル設定問題
CSS ファイルやスタイリングライブラリの設定が正しく行われていない場合があります。
javascript// styled-componentsを使用している場合の設定例
// .storybook/main.js
module.exports = {
  addons: [
    '@storybook/addon-essentials',
    // styled-components用の設定
    {
      name: '@storybook/addon-styling-webpack',
      options: {
        rules: [
          {
            test: /\.css$/,
            use: [
              'style-loader',
              {
                loader: 'css-loader',
                options: { importLoaders: 1 },
              },
              {
                loader: 'postcss-loader',
                options: {
                  implementation:
                    require.resolve('postcss'),
                },
              },
            ],
          },
        ],
      },
    },
  ],
};
Tailwind CSS を使用している場合の設定:
javascript// .storybook/preview.js でTailwindをインポート
import '../src/index.css'; // Tailwind CSSのベースファイル
export const parameters = {
  actions: { argTypesRegex: '^on[A-Z].*' },
  controls: {
    matchers: {
      color: /(background|color)$/i,
      date: /Date$/,
    },
  },
};
10. アドオン設定確認
インストールされているアドオンが正常に動作しているかを確認します。
bash# インストール済みアドオンの確認
yarn list | grep @storybook
問題のあるアドオンを特定するため、アドオンを一つずつ無効化してテストします。
javascript// .storybook/main.js でアドオンを段階的に確認
module.exports = {
  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: [
    '@storybook/addon-essentials',
    // 他のアドオンを一時的にコメントアウト
    // '@storybook/addon-interactions',
    // '@storybook/addon-docs'
  ],
};
高度なトラブルシューティング(5 項目)
基本チェックと設定チェックで解決しない場合の高度な対処法です。
11. ブラウザコンソールエラー確認
ブラウザの開発者ツールで JavaScript エラーを詳しく調査します。
mermaidsequenceDiagram
    participant B as ブラウザ
    participant S as Storybook Server
    participant W as Webpack
    B->>S: ページリクエスト
    S->>W: バンドル生成
    W-->>S: バンドルファイル
    S-->>B: HTMLとJS配信
    B->>B: JS実行
    Note over B: エラー発生時は<br/>コンソールに出力
よくあるブラウザコンソールエラーと対処法:
| エラーメッセージ | 原因 | 対処法 | 
|---|---|---|
ChunkLoadError | 動的インポートの失敗 | キャッシュクリア、再ビルド | 
TypeError: Cannot read properties | undefined オブジェクトへのアクセス | props や state の初期値設定 | 
SyntaxError: Unexpected token | JavaScript 構文エラー | 該当ファイルの構文確認 | 
12. Storybook ログ解析
ターミナルに出力される Storybook のログを詳しく解析します。
bash# 詳細ログ出力でStorybook起動
yarn storybook --loglevel verbose
ログの重要なセクション:
bash# 1. 依存関係解決フェーズ
info => Loading presets
info => Loading custom manager config
# 2. webpack設定フェーズ
info => Using default Webpack5 setup
info => Loading 1 config file in "./.storybook"
# 3. ビルドフェーズ
webpack built preview [hash] in [time]ms
エラーログの解読例:
bash# よくあるエラーログパターン
ERROR in ./src/components/Button/Button.stories.tsx
Module not found: Error: Can't resolve './Button'
13. 開発環境固有の問題
異なる環境間での動作差異を確認します。
bash# 環境変数の確認
echo $NODE_ENV
echo $PATH
# システム情報の確認
uname -a  # Linux/macOS
systeminfo  # Windows
Docker 環境での実行確認:
dockerfile# Dockerfile.storybook
FROM node:18-alpine
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install
COPY . .
EXPOSE 6006
CMD ["yarn", "storybook"]
14. CI/CD 環境での問題
継続的インテグレーション環境での Storybook ビルド失敗を解決します。
yaml# .github/workflows/storybook.yml
name: Build Storybook
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
          cache: 'yarn'
      - name: Install dependencies
        run: yarn install --frozen-lockfile
      - name: Build Storybook
        run: yarn build-storybook
CI 環境特有の設定:
javascript// .storybook/main.js でCI環境用設定
const isCI = process.env.CI === 'true';
module.exports = {
  // ... 他の設定
  features: {
    // CI環境では詳細チェックを無効化
    buildStoriesJson: !isCI,
  },
};
15. バージョンアップグレード対応
Storybook のメジャーバージョンアップ時の問題に対処します。
bash# Storybookの自動アップグレード
npx storybook@latest upgrade
手動でのバージョン確認と更新:
bash# 現在のバージョン確認
npx storybook --version
# 利用可能な最新版確認
npm view @storybook/react versions --json
アップグレード後の設定ファイル調整例:
javascript// Storybook 7.x への移行例
// 旧: .storybook/main.js (v6.x)
module.exports = {
  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: ['@storybook/addon-essentials'],
  framework: '@storybook/react',
};
// 新: .storybook/main.js (v7.x)
module.exports = {
  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],
  addons: ['@storybook/addon-essentials'],
  framework: {
    name: '@storybook/react-webpack5',
    options: {},
  },
};
具体例
実際のエラーケースと解決手順
ここでは、実際によく遭遇するエラーケースと具体的な解決手順をご紹介します。
ケース 1: "Cannot resolve module" エラー
bashError: Cannot resolve module '@storybook/react' from '/project/.storybook/main.js'
解決手順:
- 依存関係の確認
 
bash# @storybook/reactがインストールされているか確認
yarn list @storybook/react
- 足りない依存関係のインストール
 
bashyarn add -D @storybook/react @storybook/addon-essentials
- バージョン整合性の確認
 
json// package.json での整合性確認
{
  "devDependencies": {
    "@storybook/react": "^7.5.0",
    "@storybook/addon-essentials": "^7.5.0"
  }
}
ケース 2: TypeScript 関連エラー
bashERROR in ./src/components/Button/Button.stories.tsx
TS2307: Cannot find module './Button' or its corresponding type declarations.
解決手順:
- TypeScript 設定ファイルの確認
 
json// .storybook/tsconfig.json
{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true
  }
}
- インポートパスの修正
 
typescript// 修正前
import { Button } from './Button';
// 修正後(拡張子を明記)
import { Button } from './Button.tsx';
// または絶対パスを使用
import { Button } from '@/components/Button/Button';
ケース 3: CSS/スタイルが適用されない
コンポーネントは表示されるがスタイルが適用されない場合の解決方法です。
javascript// .storybook/preview.js でグローバルスタイルをインポート
import '../src/styles/globals.css';
import '../src/index.css';
export const parameters = {
  // ... 他の設定
};
よくあるエラーメッセージと対処法
| エラーメッセージ | 主な原因 | 解決方法 | 
|---|---|---|
EADDRINUSE: address already in use | ポート競合 | 別ポート使用または既存プロセス終了 | 
Module build failed: ModuleNotFoundError | 依存関係不足 | 該当モジュールのインストール | 
Invalid configuration object | webpack 設定エラー | 設定ファイルの構文確認 | 
Cannot read properties of undefined | プロパティアクセスエラー | 初期値設定の確認 | 
ChunkLoadError: Loading chunk failed | 動的読み込みエラー | キャッシュクリアと再ビルド | 
まとめ
チェック項目の優先順位
Storybook の問題解決は以下の順序で進めることをお勧めします:
最優先(5 分以内で確認)
- Node.js/npm バージョン確認
 - 依存関係の再インストール
 - キャッシュクリア
 
次優先(15 分以内で確認) 4. ポート競合確認 5. 基本設定ファイル確認 6. .storybook/main.js 設定確認
詳細確認(30 分以内で確認)
7. webpack 設定の問題 8. TypeScript 設定確認 9. CSS/スタイル設定問題 10. アドオン設定確認
高度な対処(1 時間以内で確認) 11. ブラウザコンソールエラー確認 12. Storybook ログ解析
13. 開発環境固有の問題 14. CI/CD 環境での問題 15. バージョンアップグレード対応
予防策の提案
今後同様の問題を避けるために、以下の予防策を実施することをお勧めします:
開発環境の標準化
json// .nvmrc でNode.jsバージョンを固定
18.17.0
json// package.json でengines指定
{
  "engines": {
    "node": ">=18.17.0",
    "yarn": ">=1.22.0"
  }
}
定期的なメンテナンス
bash# 月次で実行する定期メンテナンスコマンド
# 1. 依存関係の更新確認
yarn outdated
# 2. セキュリティ監査
yarn audit
# 3. キャッシュクリア
yarn cache clean
CI/CD での自動チェック
yaml# GitHub Actions でのStorybook ビルドテスト
- name: Test Storybook build
  run: |
    yarn install --frozen-lockfile
    yarn build-storybook
これらの 15 のチェックポイントを順序立てて実施することで、Storybook の起動やビルドに関する多くの問題を解決できるはずです。まずは基本チェックから始めて、段階的に問題を特定していきましょう。
関連リンク
articleStorybook の HMR が遅い問題を撃退:大型プロジェクト最適化の実践手順
articleStorybook で“仕様が生きる”開発:ドキュメント駆動 UI の実践ロードマップ
articleStorybook リリース運用:Changesets とバージョン別ドキュメントの整備術
articleStorybook 情報設計の教科書:フォルダ/タイトル/ストーリー命名のベストプラクティス
articleStorybook Args/ArgTypes 速見表:Controls/Docs/Autodocs を一気に整える
articleStorybook を Monorepo に導入:Yarn Workspaces/Turborepo の最短レシピ
articleWebSocket が「200 OK で Upgrade されない」原因と対処:プロキシ・ヘッダー・TLS の落とし穴
articleWebRTC 本番運用の SLO 設計:接続成功率・初画出し時間・通話継続率の基準値
articleAstro のレンダリング戦略を一望:MPA× 部分ハイドレーションの強みを図解解説
articleWebLLM が読み込めない時の原因と解決策:CORS・MIME・パス問題を総点検
articleVitest ESM/CJS 混在で `Cannot use import statement outside a module` が出る技術対処集
articleテスト環境比較:Vitest vs Jest vs Playwright CT ― Vite プロジェクトの最適解
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来