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

Tailwind の哲学

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for kotek kotek
July 04, 2025

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原則にかなって いる?