目的
ionicでstorybook をセットアップし、コンポーネントが無事に表示されるまでの手順を記載する。
ionicのcssがstorybookで表示されない問題も発生したので、解決方法も記載する。 一部モジュールが足りていないエラーも発生した。
環境
- nodejs v20.0.0
- ionic 7.2.0
- react 18.0.27
- storybook 7.6.7
- macOS Sonoma 14.2.1
ionic プロジェクトセットアップ
以下のコマンドを実行してionicプロジェクトを作成。
フレームワークはreactで、テンプレートはblankを選択した
ionic start
storybook セットアップ
インストール
以下のコマンドを実行してstorybookをインストール
npx storybook init
起動
以下のコマンドでstorybookを起動する
npm run storybook
エラー発生
以下のようなエラーが発生した。
Internal server error: Failed to resolve import "@storybook/test" from "src/stories/Page.stories.ts". Does the file exist?

@storybook/test モジュールが足りていないとのことなので、以下コマンドでモジュールをインストール
npm install @storybook/test
ionicでstorybook
ionicを使用したコンポーネント作成
ionic-cardを使用した以下のようなコンポーネントを作成した。
import { IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle } from "@ionic/react"
export type ListItemProps = {
title: string,
subtitle: string,
content: string,
selected: boolean
}
export const ListItem = ({
title,
subtitle,
content,
selected
}: ListItemProps) => {
return (
<IonCard color={selected ? 'primary' : undefined}>
<IonCardHeader>
<IonCardTitle>
{title}
</IonCardTitle>
<IonCardSubtitle>
{subtitle}
</IonCardSubtitle>
</IonCardHeader>
<IonCardContent>
{content}
</IonCardContent>
</IonCard >
)
}
しかし、storybookで表示しても以下のようになり、ionicコンポーネントの見た目が反映されない
本来ならこちらのリンクのような表示なる

解決方法
.storybook\preview.tsを以下のように修正する
修正前
import type { Preview } from "@storybook/react";
const preview: Preview = {
parameters:
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
},
};
export default preview;
修正後 3~25行目を追加
import type { Preview } from "@storybook/react";
import { setupIonicReact } from "@ionic/react";
//ionic フレームワークをstorybookに適応
/* Core CSS required for Ionic components to work properly */
import '@ionic/react/css/core.css';
/* Basic CSS for apps built with Ionic */
import '@ionic/react/css/normalize.css';
import '@ionic/react/css/structure.css';
import '@ionic/react/css/typography.css';
/* Optional CSS utils that can be commented out */
import '@ionic/react/css/padding.css';
import '@ionic/react/css/float-elements.css';
import '@ionic/react/css/text-alignment.css';
import '@ionic/react/css/text-transformation.css';
import '@ionic/react/css/flex-utils.css';
import '@ionic/react/css/display.css';
/* Theme variables */
import '../src/theme/variables.css'
setupIonicReact();
const preview: Preview = {
parameters: {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
},
};
export default preview;
storybook再確認
無事ionicコンポーネントのレイアウトが反映されていることが確認できた

以上.