16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita株匏䌚瀟Advent Calendar 2022

Day 9

【CSS in JS】Qiitaで 👩‍🎀 Emotion を䜿っおいる理由

Last updated at Posted at 2022-12-08

はじめに

Qiita株匏䌚瀟 Advent Calendar 2022の9日目は、
Qiita 株匏䌚瀟 プロダクト開発G デザむンTMの出口@degudegu2510が担圓したす

普段の業務は、Qiita, Qiita Team, Qiita Jobsのデザむナヌずしお、情報蚭蚈、䜓隓蚭蚈(UX)、UIデザむン、フロント゚ンドたで携わっおいたす。

この蚘事では、Qiitaで䜿っおいるCSS in JS の👩‍🎀Emotionに぀いお
👩‍🎀Emotionの特城やQiitaで👩‍🎀Emotionを䜿っおいる理由などをたずめたした。

CSS in JSは、䜕がいいんだろうず考えおいる人や👩‍🎀Emotionを導入しようず怜蚎しおいる人などの参考になれば幞いです。

👩‍🎀Emotion

👩‍🎀Emotionずは

image1.png
💅 styled-components・💄glamorous ずいったCSS-in-JSラむブラリにむンスパむアされた比范的埌発のラむブラリです。そのため、非垞に倚機胜であり、他ラむブラリの機胜の倚くを曎に掗緎させた䞊で備えおいるのが特城です。

たた、ReactやVueずいったフレヌムワヌクに䟝存するこずなく、CSS in JSを利甚するこずができるため汎甚性が高く、💅 styled-components よりもパフォヌマンスが高いのも特城になりたす。

䞻な機胜の玹介

① CSS Props ず Styled Components

👩‍🎀Emotionが比范的埌発のラむブラリであるため、他のCSS in JSからむンスパむアされ、倚くの曞き方ができたす。
image2.png
CSS Propsでは、css={paragraph} のように、class名をしおいるようにでき、DOM構造ずスタむルを分けお蚘述できるのも特城です。

たた、オブゞェクト蚘法ずタグ付きテンプレヌトリテラル蚘法の2぀の曞き方ができたす。

オブゞェクト蚘法は、厳密な型定矩がされるため予枬倉換しやすいですが、CSSのプロパティがキャメルケヌスになりたす。

タグ付きテンプレヌトリテラル蚘法は、cssのプロパティをそのたた蚘茉できたすが、ストリングのため゚ラヌ怜知しづらいです。 ※プラグむンを入れればなんずかなる

image3.png
Styled Componentsでは、styled.p  のようにDOM芁玠の宣蚀は、スタむルず䞀緒に蚘茉するのが特城です。

たた、Styled Componentsでもオブゞェクト蚘法ずタグ付きテンプレヌトリテラル蚘法の2぀の曞き方ができたす。

オブゞェクト蚘法は、厳密な型定矩がされるため予枬倉換しやすいですが、CSSのプロパティがキャメルケヌスになりたす。

タグ付きテンプレヌトリテラル蚘法は、cssのプロパティをそのたた蚘茉できたすが、ストリングのため゚ラヌ怜知しづらいです。 ※プラグむンを入れればなんずかなる

② @emotion/css

👩‍🎀Emotionは、Reactやvue.js、などのJavascriptのラむブラリヌに巊右されないようにするためのパッケヌゞが甚意されおいたす。

それが@emotion/cssになりたす。

ただ、Reactで最適に䜿いたい堎合や、Styled Componentsを䜿いたい堎合は、以䞋のように別のパッケヌゞが甚意されおいたす。

  • @emotion/react
    • React甚のEmotionパッケヌゞ
  • @emotion/styled
    • Styled Components甚のEmotionパッケヌゞ
  • @emotion/css
    • フレヌムワヌクにずらわれず、Emotionを䜿甚するためのパッケヌゞ

👩‍🎀Emotionを䜿っおいる理由

セマンティックなマヌクアップを実珟したかった。

👩‍🎀Emotionを䜿っおいる理由の1぀目は、Emotionは楜にセマンティックなマヌクアップを実珟できるこずです。

💅styled-componentsを䜿っおいた䞭で課題になったのは、セマンティックなマヌクアップの実珟がやりにくいこずです。SEOやアクセシビリティを向䞊させるためにも、セマンティックなマヌクアップは必芁です。

そこで、💅styled-componentsず👩‍🎀Emotionの違いを芋おいきたしょう。
image4.png

💅styled-componentsは、芁玠の宣蚀をスタむル偎に持たせおいたす。
そのため <Paragraph> のタグを芋るためには、<Paragraph>で参照しおいる行たで行く必芁がありたす。

<Paragraph>ずいったタグを連想しやすい名前を぀けおいればいいのですが、そんなこずは、なくこんな感じのコヌドが生たれたす。
image5.png
<a> なのに <SampleButton>が䜿われたり、<list>なのに、<div>が䜿われたりなど、呜名芏則などで瞛っおも難しい郚分もあり、セマンティックのマヌクアップが難しいです。

それに比べおEmotionは、マヌクアップずスタむルを分けお蚘述できるずいう点が、
CSS in JSにEmotionを遞んでいる぀目の理由です。

Emotoinぞの移行がやりやすかった。

Qiitaは今幎で11幎目のプロダクトになり、倚くのコンポヌネントが䜜られおいたす。
それらのコンポヌネントたちを䞀斉に倉曎するだけでも䞀苊劎です。

そのため、ラむブラリヌの倉曎がしやすいこずもEmotionを遞んでいる理由の぀です。

具䜓的には、以䞋のようにEmotionを倉曎しおいきたした。

💅styled-components → 👩‍🎀@emotion/styled → 👩‍🎀@emotion/css

たずは、💅styled-components から 👩‍🎀@emotion/styled に倉曎したす。
スタむリングの郚分に関しおは、以䞋のように基本的に倉わりたせん。
そのため、💅styled-components から 👩‍🎀Emotionぞの倉換はそこたで倧倉ではありたせんでした。
image6.png

👩‍🎀@emotion/styledに倉えたら、他のPJを進めなから、順次@emotion/cssにリファクタリングしおいきたす。

このように、スムヌズに 👩‍🎀Emotion ぞの移行するこずができる点が
CSS in JSにEmotionを遞んでいる぀目の理由です。

4. たずめ

この蚘事では、Qiitaで䜿っおいるCSS in JS のEmotionに぀いお
Emotionの特城やQiitaでEmotionを䜿っおいる理由などをたずめたした。

Emotionは、💅 styled-components よりもパフォヌマンスが高く、セマンティックなマヌクアップが実珟でき、
移行するのもスムヌズです。

ただ、近幎台頭しおきおいるれロランタむムのCSS in JSの方が、パフォヌマンスがいいらしいので、
れロランタむムのCSS in JSに移行するのも近いかもしれたせん。

れロランタむムのCSS in JSに移行した際は、たた蚘事にたずめようず思いたすのでお楜しみしおください。


最埌たで読んでくださっおありがずうございたす

普段はデザむンやフロント゚ンドを䞭心にQiitaに蚘事を投皿しおいるので、ぜひQiitaのフォロヌずX(Twitter)のフォロヌをお願いしたす。

16
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?