Tech Bytes

短くて分かりやすい技術情報を記事として共有します。みなさんにとって学びになれば幸いです。

フロントエンドのアトミック(Atomic)デザインとは

アトミック(Atomic)デザインとは?

アトミックデザインはデザインシステムの一種であり、UI/UXデザインにおいてコンポーネントベースのアプローチを採用しています。

アトミック(Atomic)デザインのメリットは?

再利用性が高い

アトミックデザインでは、小さなコンポーネントを組み合わせて様々なUIを作り出すため、コンポーネントの再利用性が高くなります。同じアトムや分子を複数の有機体で使うことができるため、デザインの一貫性を保ちやすくなります。

コンポーネントの管理が容易

アトミックデザインでは、コンポーネントをアトム、分子、有機体、テンプレート、ページのようなレベルで分類することで、コンポーネントの管理が容易になります。それぞれのコンポーネントがどのような役割を持っているのか明確になるため、開発者がコンポーネントを探し出すことが容易になります。

開発スピードが向上

アトミックデザインでは、小さなコンポーネントを組み合わせてUIを作り出すため、デザインの変更に迅速に対応することができます。また、再利用性が高いため、同じコンポーネントを何度も作り直す必要がなくなり、開発速度が向上することが期待できます。

アトミック(Atomic)デザインのデメリットは?

初期設計の手間がかかる

アトミックデザインでは、小さなコンポーネントを組み合わせてUIを作り出すため、最初にコンポーネントの設計を行う必要があります。コンポーネントの役割や見た目を細かく分解する必要があるため、初期設計に手間がかかる場合があります。

ファイル数の増加

アトミックデザインでは、小さなコンポーネントを組み合わせてUIを作り出すため、コンポーネントの数が増加します。それに伴い、ファイル数も増加するため、管理が煩雑になることがあります。

コンポーネントの分割の難しさ

アトミックデザインでは、小さなコンポーネントを組み合わせてUIを作り出すため、コンポーネントの分割が難しくなることがあります。コンポーネントを細かく分割することができない場合、コンポーネントの再利用性が低下する可能性があります。

デザインの制約

アトミックデザインでは、小さなコンポーネントを組み合わせてUIを作り出すため、デザインの制約が生じることがあります。例えば、特定のアトムや分子に対してスタイルを変更することが難しい場合があります。また、コンポーネントの構造が複雑になりすぎると、コンポーネントの使い回しが難しくなる場合があります。

ReactにおけるAtomicデザインのサンプル

例えば、ReactというJavaScriptライブラリを使用したアプリケーションのUIコンポーネントをアトミックデザインに基づいて構築する場合、以下のようなコードが挙げられます。

import React from 'react';
import styled from 'styled-components';

const Button = styled.button`
  background-color: ${({ backgroundColor }) => backgroundColor || 'white'};
  border-radius: 4px;
  border: none;
  color: ${({ textColor }) => textColor || 'black'};
  font-size: 16px;
  font-weight: bold;
  padding: 10px 20px;
  text-align: center;
  transition: background-color 0.3s ease-in-out;

  &:hover {
    background-color: ${({ hoverColor }) => hoverColor || '#f1f1f1'};
  }
`;

const AtomButton = ({ text, backgroundColor, textColor, hoverColor, onClick }) => {
  return (
    <Button
      backgroundColor={backgroundColor}
      textColor={textColor}
      hoverColor={hoverColor}
      onClick={onClick}
    >
      {text}
    </Button>
  );
};

export default AtomButton;

このコードは、アトミックデザインに基づいたUIコンポーネントの1つであるボタンコンポーネントを定義しています。
そしてstyled-componentsというライブラリを使用して、CSSをコンポーネントにインラインスタイルとして定義しています。
また、propsを通じて、ボタンの背景色、テキストの色、ホバー時の背景色などを動的に変更できるようにしています。

このように、アトミックデザインに基づいたUIコンポーネントを定義する場合には、コンポーネントの機能や見た目を細かく分割し、それぞれをAtoms(原子)、Molecules(分子)、Organisms(有機体)、Templates(テンプレート)、Pages(ページ)といったレベルで定義することが重要です。