Web制作、Web開発の歩き方

やさしく学ぶ、初学者のためのReact入門

■第5話:ReactのCSS -CSS Modules-

(最終更新日:2023.02.28)

Reactのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「ReactのCSSって書き方多すぎ」

Reactを使い始めて悩むのがCSSの書き方。 プロジェクトで決まっていれば、その書き方を覚えるだけだが、 自分が決める立場になった時どれを選ぶか、考えを持っておきたいものだ。 今回は、自分としてはこれで書きたいというものを紹介する。 あくまで個人の感想なので、今後どの書き方が主流になるかはウォッチしておこう。


1.ReactにおけるCSSの書き方

ReactのCSSの書き方は数多くある。 「Inline Style」から「CSS Modules」「Styled components」「Styled JSX」「Emotion」と初学者は何を使っていいか分からない。 選定理由には「サポートの継続性」「表示パフォーマンス」という要素が挙げられるが、 ここでは「書きやすさ、使いやすさ」という点を重視して「Inline Style」と「CSS Modules」を薦める。 下記は「Inline Style」の例である。1コンポーネントのコード量は多くなるが、何を使うかがコンポーネント内で宣言されていて分かりやすい。 FigmaやCSSフレームワークでベースを作り、ちょっと書き加えて整えるという使い方なら有りだと思う。

Inline Styleで記述したReactのCSS
(ロワーキャメルケースになるので注意しよう)


2.CSS ModulesとSassの採用

一方、CSS Modulesは外部ファイルを読み込む方法である。 CSSと同じ書き方(ケバブケース)で書ける。尚且つ適用範囲をコンポーネント内に閉じ込めることができる。 そして読み込むファイルは最小限のため、描画速度が速い。 Sassにも対応しており、npmで必要なモジュールをインストールすれば自動でコンパイルしてくれる。良いことづくしである。

難点としてはファイルが分かれてしまうので、一覧性が低くなることである。 しかし、幅の広いディスプレイを使う、デュアルモニタでそれぞれを別に映すという技でカバーできる。

懸念点としてはwebpackのcss-loaderがメンテナンスステージになるため、将来的に非推奨になる可能性があることである。 ただし、Next.js、Gatsbyなどの有名なReactのフレームワークでは、CSS ModulesをBuild-inサポートしているので継続し、 メジャーな書き方となる可能性もある。実際、2022年10月に登場したNext.js13でもCSS ModulesをBuild-inサポートしている。 使いやすさとしては抜群に良いと思っているので、個人的には是非これがメジャーになって欲しい。

CSS Modulesの書き方、コンポーネントの取り込み(左)、取り込まれるcssファイル(右)

cssの代わりにSassを読み込むこともできる

3.CSSフレームワーク(BootStrap, Bulma)

最後にReactで用いるCSSフレームワークについて説明する。 Reactでは、Material UI、Chakra UIなどのコンポーネント型のライブラリが良く用いられる。 Bootstrapも同様でReactで用いる場合はコンポーネント型になっている。 そのおかげでJavaScriptを含んだカルーセルやハンバーガーメニューも使える。

コンポーネント型はコンポーネントを呼び出すだけで使えて便利なのだが、そのライブラリ独自のコンポーネントを覚えるのが結構つらい。 下記にReact Bootstrapの記述を記す。Carouselコンポーネントを利用して記述している様子が分かる。 HTMLのタグとは違うので、ある程度中身が分かってるBootstrapでも正直何を書いているのか分からなくなる。 ただし、Bootstrapに関しては色設定等はCDN版のBootstrapと同じ書き方になっているので、 Web制作でBootstrapを使用している場合はReactでもBootstrapを選定するというのは有りだと思う。

React-Bootstrapの記述

コンポーネント化されるのが嫌という方は、是非、Bulmaのライブラリファイルをimportで読み込む方法を試してほしい。 BulmaはもともとJavaScript部分を含んでいないライブラリなので、classNameに用意されているclass名を書き足すだけである。 CSSだけで構成されるものにTailwind CSSもあるが、こちらは設定が細かすぎるのとclassName部分が長くなりがちなので、自分としては使いにくい。 個人的には、Bulmaで用意されてるclassを活用してSassで整えるという方法が最も書きやすい気がする。

Bulmaはnpmでインストールできる。 インストールしたら、Bulmaを読み込むSassファイルを用意して、そのSassファイルを読みこんで使うことができる。 下記にコーディングした例を示す。CSS部分はHTMLで書く場合と殆ど変わらない。Web制作での書き方から違和感なく採用することができる。

React-Bulmaの記述(class名を指定するだけで使える)

4.まとめ

今回、Reactで使うCSSと、その書き方について説明した。 個人的にはCSS ModulesがCSSそのままの記述でいけて、使い勝手が良いと思っている。 CSSフレームワークに関しては、正直自分が使いやすいと思うものを使えばいいが、筆者はBulmaが好きだ。

一点注意点としては、CSS自体も進化していて、 Sassを使わなくてもネストが使えたり、Media Queriesを使わなくてもレスポンシブ対応できるようになってきている。 大元の仕様が変われば、エレガントな書き方も変わってくる。Sassは必要なくなるかもしれない。 結局ブラウザ自体はHTML、CSS、JavaScriptを読んでいる。それらの仕様は常にキャッチアップしよう。

▼参考図書、サイト

 「モダンJavaScriptの基本から始める React実践の教科書」 じゃけぇ SBクリエイティブ
  Reactにおけるスタイリング手法まとめ Zenn