背景
技術スタックの一新で CSS Modules で記述していた部分を CSS in JS に置き換えた。
いずれにしても React コンポーネントも書き換える必要があり、そのまま CSS Modules を利用する大きなメリットはなかったため、再考の余地があった。
技術スタックの一新で CSS Modules で記述していた部分を CSS in JS に置き換えた。
いずれにしても React コンポーネントも書き換える必要があり、そのまま CSS Modules を利用する大きなメリットはなかったため、再考の余地があった。
CSS Modulesは、JS ファイルから CSS ファイルを import して利用する技術。
スタイル定義は通常の CSS と同様の記述のため、学習コストは低く、.component__T09hD
のようなクラス名を自動生成してくれるため、クラス名の競合を防げるような特徴がある。
JS ファイルから CSS を import して、コンポーネントの className に CSS のクラスに該当する変数を指定することでスタイルが適用される。
/* styles.css */
.component {
color: red;
}
// Component.jsx
import styles from "./styles.css";
const Component = () => {
return <div className={styles.component}>Component</div>;
};
CSS Modules を利用して感じた課題感は以下の通り。
styles.css.d.ts
を自動生成して補完やエラーが分かるようにしていた.red {
color: red;
}
.blue {
color: blue;
}
<div className={cx(red, blue)} />
上記のようなケースでどちらが適用されるか分からない開発状況における課題としては以下の通り。
そもそも CSS Modules を利用したクラス名が衝突しないというメリットを活かせていなかった。また、過去の資産を完全に活かしきることも難しく、全面的に React コンポーネントを利用したコンポーネント開発になることから CSS in JS の選択へ踏み切った。