もうCSSで消耗しない!BEMという「命名規則」で、破綻しない設計を手に入れる
公開日: 2025年9月24日
プログラミング学習を進め、自分のWebサイトのデザインにこだわり始めると、誰もが必ず通る道があります。 それは、「CSSカオス」です。
最初は綺麗だったはずの style.css が、機能追加を繰り返すうちに、どんどんカオスになっていく。
「ここのボタンの色を変えたら、あっちのカードの色まで変わってしまった!」
「この .title って、どのページのタイトルだっけ…?」
「もうどこを触っても怖くて、!important で無理やり上書きするしかない…」
そんな経験、ありませんか? 今日は、このCSSカオスという悪夢からあなたを解放し、大規模なサイトでも破綻しない、メンテナンス性の高いCSS設計を可能にするための、非常にシンプルで強力な「命名規則」、BEM(ベム)をご紹介します。
BEMとは何か?:3つの要素で考える
BEMとは、Block, Element, Modifier の頭文字を取ったもので、CSSのクラス名を、以下の3つの構成要素の組み合わせで命名するという、非常にシンプルなルールです。
- Block: ページを構成する、独立した大きな部品。(例: ヘッダー, 検索フォーム, 記事カード)
- Element: そのBlockを構成する、小さな部品。(例: ヘッダーのロゴ, 検索フォームの入力欄, 記事カードのタイトル)
- Modifier: BlockやElementの、見た目や状態の違いを表すもの。(例: 赤いボタン, 無効化されたボタン, 大きな記事カード)
BEMの具体的な書き方
BEMの魔法は、その独特なクラス名の繋ぎ方にあります。
- BlockとElementは、アンダースコア2つ (`__`)で繋ぐ。
- BlockやElementとModifierは、ハイフン2つ (`--`)で繋ぐ。
例:シンプルな「記事カード」をBEMで設計する
言葉だけだと分かりにくいので、具体的な例を見てみましょう。 以下のような、シンプルな「記事カード」コンポーネントを作るとします。
HTML構造:
<!-- Block: 記事カード全体 -->
<div class="card">
<!-- Element: カードの画像 -->
<img class="card__image" src="...">
<!-- Element: カードの本文エリア -->
<div class="card__body">
<!-- Element: カードのタイトル -->
<h3 class="card__title">記事のタイトル</h3>
<!-- Element: カードのボタン -->
<a href="#" class="card__button">続きを読む</a>
<!-- Element: ボタン, Modifier: "primary"という見た目の違い -->
<a href="#" class="card__button card__button--primary">もっと読む</a>
</div>
</div>
CSS:
/* Block */
.card {
border: 1px solid #ddd;
border-radius: 8px;
}
/* Elements */
.card__image {
width: 100%;
}
.card__title {
font-size: 18px;
margin: 0;
}
.card__button {
display: inline-block;
padding: 8px 12px;
border: 1px solid #ccc;
}
/* Modifier */
.card__button--primary {
background-color: #1a73e8;
color: white;
border-color: #1a73e8;
}
BEMがもたらす3つの絶大なメリット
1. クラス名が絶対に重複しない
.card__title というクラス名を見れば、それが「カードという部品の中のタイトル」であることが一目瞭然です。ページのメインタイトルである `.main__title` や、サイドバーのタイトル .sidebar__title と、名前が衝突することは絶対にありません。
2. スタイルが予測可能になる
--primary というModifierは、.card__button にしか影響を与えません。.card__button--primary の色を変えても、他のボタンの色が変わってしまう、という悪夢のような副作用から解放されます。
3. HTMLの構造が理解しやすくなる
クラス名を見るだけで、そのHTMLがどのような部品の入れ子構造になっているのかを、CSSファイルを開かなくても推測できるようになります。これは、チーム開発において絶大な効果を発揮します。
まとめ
BEMは、最初は少し冗長で、書くのが面倒に感じるかもしれません。 しかし、この小さな規律を守るだけで、あなたのCSSは驚くほど整理され、メンテナンスしやすく、そして再利用しやすい「資産」に変わります。
大規模なWebアプリケーションになればなるほど、このBEMという命名規則の真価が分かるはずです。 ぜひ、あなたの次のコンポーネントから、このシンプルで強力な設計手法を取り入れてみてください。
プログラミング学習に必須ツール!
記事で紹介したコードがよく分からなかったり、ご自身のコードについてもっと知りたい場合は、AIコード解説ツールが便利です。コードを貼り付けるだけで、AIが日本語で分かりやすく解説します。
AIコード解説ツールを使ってみる →