チーム開発で破綻しないCSS設計|スケーラビリティを考えた命名規則の選択

C
クリオ
Web制作ディレクター / フロントエンジニア

こんにちは!

今日は「チーム開発で破綻しないCSS設計|スケーラビリティを考えた命名規則の選択」について解説します。

複数人開発でなぜCSSが崩壊するのか

僕も最初は本当に気づかなかったんですけど、CSS が破綻するのって大体 「複数人で開発し始めた時点」なんですよ。
1人で書いてる時は「自分のルール」で統一できるから問題がないんです。
でも、チーム開発になると、それぞれが違うやり方でクラス名を付けるから、めっちゃカオスになる。

現場でよく見るのは、こういうパターンです。

  • AさんはBEM記法で .block__element--modifier
  • Bさんは独自ルールで .block-element-active
  • Cさんは単語を詰めて .blockel

各自が「これで分かりやすいはず」と思ってるんですけど、後から別の人がコードを見ると、もう何がなんだか。
ほんま、修正するのに時間がかかります。

さらに怖いのが「同じ名前のクラスが複数の場所で定義されてる」という状態。
1つ修正したと思ったら、別の場所で同じ名前が使われてて、予期しない場所が壊れる。
これが本当に現場あるあるです。

命名規則の選択が重要な理由

命名規則を統一することって、実は「単なる美しさ」の問題じゃないんです。
それは「スケーラビリティ」の問題なんですよ。

プロジェクトが大きくなると、CSSファイルも増えます。
ページが増え、コンポーネントが増え、気づいたら style.css が5000行超えてたりします。
そういう状況で「あ、このクラス名どこで使ってるんだっけ?」って探すのは本当に大変なんです。

けれど命名規則がしっかりしてると、こういうメリットが生まれます。

  • 予測可能性:クラス名を見ただけで「何に使うのか」が分かる
  • 競合を減らせる:親要素や文脈を組み込むから、名前が衝突しにくい
  • 検索がしやすい:クラス名から関連する他のクラスを見つけやすい
  • チーム間のコミュニケーションが減る:「このクラス何ですか?」という質問が減る
  • コードレビューが効率的:「ここの命名、ルールと違ってませんか?」と指摘しやすい

つまり、命名規則ってのは「チーム開発のための言語」だと思ってください。
みんなが同じルールで話してれば、大規模プロジェクトでも破綻しないんです。

実際のプロジェクトで使い分ける戦略

ここからは、実際にどう選ぶかです。
重要なのは「完璧な設計を求める」んじゃなくて「プロジェクトに合ったものを選ぶ」ってことです。

BEM記法:中〜大規模プロジェクトの定番

.block__element--modifier という形式ですね。
僕のチームでも、複数ページ、複数コンポーネントがあるプロジェクトではほぼBEM記法を採用してます。

例えば、カードコンポーネントなら。

  • .card(ブロック:親要素)
  • .card__image(エレメント:子要素)
  • .card__title(エレメント:子要素)
  • .card--featured(モディファイア:状態バリエーション)

こうすることで、「このカードの派生版」「このカードの子要素」が一目瞭然になります。
新しく入ったメンバーも、ルールを理解してれば迷いなくコード書けます。

ただし、BEMは最初はめっちゃ冗長に感じます。
クラス名が長くなるし「こんなに細かく分ける必要あるの?」って思っちゃう。
でも、半年後のメンテナンスフェーズで「あ、このルール本当に助かる」ってなりますよ。

シンプル記法:小〜中規模、または初期フェーズ向け

スタートアップとか、とにかく最初はサッと作りたい。
そういう時は、無理してBEMにしなくていいんです。

例えば .header.header-nav.header-nav-active みたいに、ハイフン区切りで単純にしちゃう。
最初のうちはこれで十分です。

ポイントは「後から移行できる設計にする」ってことです。
最初から複雑にしすぎて、チーム全体が疲れちゃったら本末転倒ですから。

CSS Modulesなど、スコープ付きアプローチ

これはフレームワーク(ReactやVue)を使ってるプロジェクトの話ですね。
styles.module.css みたいに、各コンポーネントに紐付いたCSSファイルを作る。

こうすると、クラス名が自動的に一意になるから、命名規則について悩まなくていいんです。
ただ、従来のマルチページサイトだと難しいので、この方法は選べない場合が多いですけど。

実践的な選択フロー

僕が実際に使ってる判断基準はこれです。

  1. チーム人数は3人以上?
    → YES なら命名規則は必須(BEM推奨)
  2. プロジェクト期間は3ヶ月以上?
    → YES なら命名規則を厳密に(ラフな記法だと後で地獄を見ます)
  3. Reactなどのフレームワーク使ってる?
    → YES なら CSS Modules や CSS-in-JS も検討
  4. 従来のHTMLサイト?
    → YES なら BEM か FLOCSS をベースに
  5. とにかく急いでる?
    → YES なら最小限の記法ルールで、後から移行計画を立てる

そしてね、最後に大事なのは「チーム全体で合意する」ってことなんです。
いくら完璧な設計でも、メンバーが納得してなかったら、結局ルールが守られません。
導入前に「なぜこの命名規則にするのか」を説明して、質問を受け付ける。
そうすることで、みんなが自分たちのルールだと認識できるようになります。

まとめ

CSS設計で最も大事なのは「完璧さ」ではなく「継続