Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tailwind の哲学

Tailwind の哲学

STAR UP 社内LT会で発表した内容です。
Tailwind の哲学を理解し、正しいDRY原則を学びましょう!

Avatar for kotek

kotek

July 04, 2025
Tweet

Other Decks in Technology

Transcript

  1. Reactのドメイン分割の例: features ディレクトリ src/
 ├── features/
 │ ├── catalog/ #

    商品カタログ
 │ │ ├── components/ 
 │ │ │ └── Catalog.tsx
 │ │ └── hooks/
 │ ├── order/ # 注文管理
 │ │ ├── components/
 │ │ │ └── OrderPage.tsx
 │ │ └── hooks/
 │ └── account/ # 顧客アカウント
 │ ├── components/
 │ │ └── UserList.tsx
 │ └── hooks/
 └── lib/ # 共有ライブラリ
 商品カタログのコンテクスト に関心のある部分 注文管理のコンテクストに関 心のある部分 顧客アカウントのコンテクスト に関心のある部分 DDDについては 「同じ関心を持つものをまとめる」 という認識でとりあえずOK
  2. ドメインで分けられていなかった場合 src/
 ├── components/ # (種類) 全てのUIコンポーネントを集約
 │ ├── catalog/


    │ │ └── Catalog.tsx
 │ ├── order/
 │ │ └── OrderPage.tsx
 │ └── account/
 │ └── UserList.tsx
 │
 ├── hooks/ # (種類) 全てのカスタムフックを集約
 │ ├── useProductSearch.ts # 商品カタログ関連のフック
 │ ├── useOrderPlacement.ts # 注文管理関連のフック
 │ └── useAuthentication.ts # 顧客アカウント関連のフック
 │
 └── lib/ # (共有) プロジェクト全体で使う共通ライブラリ
 ファイルの種類ごとに分けるパターン (アーキテクチャによっては現役)
  3. ノーマルCSS と React の悪い相性 ノーマルCSS では、同じページの構造と見た目が HTML と CSS の2つのファイルに書かれる。

    同じ関心をもつ2つのリソースが 低凝集 となっており、DDD のプラクティスに反する。
  4. Tailwind の哲学 Utility-First Utility とは、w-8, flex, font-bold といった、 Tailwind の中核をなす

    小さなクラス のこと → 小さなutilityクラスをまず使おう!という意味
  5. 重複を無くすオススメの方法 by 公式ドキュメント 1. マルチカーソルを使え! 2. 繰り返し (list.map() など) を使え!

    3. コンポーネント単位で共通化しろ! いずれもTailwind自体 の機能ではない…?
  6. 1ヶ月後: 「購入ボタンだけローディング状態を表示したい」 → if (type === 'purchase') { ... }


    しかし、時は流れて… 2ヶ月後: 「招待ボタンだけアイコンを付けたい」 → if (type === 'invite') { ... }
 3ヶ月後: 「購入ボタンは在庫切れ時にグレーアウトしたい」 → if (type === 'purchase' && isOutOfStock) { ... }

  7. 再利用性における CSS vs Tailwind CSS class にスタイルがまとまっている ため再利用性が高い! ノーマル CSS

    構造にスタイルが直書きされている ので再利用性が低い… Tailwind CSS → 再利用性の高いノーマルCSSの方が DRY原則にかなって いる?