storybook+react+typescriptの環境構築
前回の記事でstorybookの簡単な使い方を学んだので、typescriptを導入すると共にstyled-componentsが提供しているThemeProviderを使ってみようと思います。
ThemeProviderをラップすることでどのコンポーネントからもThemeProviderが保持しているthemeにアクセスすることができます。 こちら公式サイトになります。
react+typescript+webpackの環境構築
まずは環境を構築するところからです。 以前記事を書いたので参考にしてみてください。
初っぱなから投げやりですが、ご了承ください。
storybookを導入
上で作成したプロジェクトフォルダに移動
cd プロジェクトフォルダ
storybookを導入するために下記のコマンドを実行
getstorybook
そうするとstories
フォルダなどstorybookの関するものが生成されます。
一応ブラウザで確認するために以下のコマンドを実行してください。
yarn storybook
下記のように表示されていれば大丈夫です。
storybookにtypescriptを対応させる
こちらは公式サイトをなぞっていきます。
必要なモジュールをインストールします。
yarn add -D typescript awesome-typescript-loader @storybook/addon-info react-docgen-typescript-webpack-plugin jest "@types/jest" ts-jest
その後、storybookでtypesriptが使えるように.stories
の中にあるwebpack.config.js
を以下のように編集します。
const path = require("path"); const TSDocgenPlugin = require("react-docgen-typescript-webpack-plugin"); module.exports = (baseConfig, env, config) => { config.module.rules.push({ test: /\.(ts|tsx)$/, loader: require.resolve("awesome-typescript-loader") }); config.plugins.push(new TSDocgenPlugin()); // optional config.resolve.extensions.push(".ts", ".tsx"); return config; };
またプロジェクトフォルダ直下にtsconfig.json
ファイルを作成します。
{ "compilerOptions": { "outDir": "build/lib", "module": "commonjs", "target": "es5", "lib": ["es5", "es6", "es7", "es2017", "dom"], "sourceMap": true, "allowJs": false, "jsx": "react", "moduleResolution": "node", "rootDirs": ["src", "stories"], "baseUrl": "src", "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, "strictNullChecks": true, "suppressImplicitAnyIndexErrors": true, "noUnusedLocals": true, "declaration": true, "allowSyntheticDefaultImports": true, "experimentalDecorators": true }, "include": ["src/**/*"], "exclude": ["node_modules", "build", "scripts"] }
ここではファイルの中の細かい説明は省きます。
styled-componentsの導入
今回はstyled-componentsを使っていくのでインストールします。
yarn add -D styled-components
テーマの作成
webサイト・サービスでよく使われる色を定義したテーマのファイルを作成します。
src/theme.ts
ファイルを作成します。
export type theme = { primary: string primaryVariant: string secondary: string secondaryVariant: string onPrimary: string onSecondary: string } export const theme = { primary: '#6200EE', primaryVariant: '#3700B3', secondary: '#03DAC6', secondaryVariant: '#018786', onPrimary: '#fff', onSecondary: '#000' }
色の命名などは下記を参考にしています。
その後、src/App.tsx
を開きます。
import * as React from "react"; import { theme } from "../theme"; import { ThemeProvider } from "styled-components"; const App = () => { return <ThemeProvider theme={theme} />; }; export default App;
準備としてはここまでとします。 今度は実際にtypescriptでコンポーネントを作成しながら開発を進めていきたいと思います。