BEM(Block, Element, Modifier)は、ウェブ開発におけるCSS設計手法の一つで、再利用可能でメンテナンスしやすいスタイルシートを作成するために広く用いられています。BEMは、クラス名を体系的に付けることによって、コードの可読性と保守性を向上させることを目的としています。この手法は、特に大規模なプロジェクトやチームでの開発において非常に有効です。この記事では、BEMの基本的な概念から実際の実装方法まで、包括的に説明します。
BEMの基本概念
BEMは、以下の3つの主要な要素から成り立っています。

-
Block(ブロック)
ブロックは、独立した再利用可能なコンポーネントを表します。たとえば、ナビゲーションバー、ボタン、フォームなどがブロックに該当します。ブロックは単独で意味を持つことができ、他のコンポーネントと独立して動作します。 -
Element(エレメント)
エレメントは、ブロックの一部であり、ブロック内でのみ意味を持つコンポーネントです。エレメントは、ブロックの内部で動作する部分であり、その機能を構成します。例えば、ボタン内のテキストや、フォーム内の入力フィールドがエレメントです。 -
Modifier(モディファイア)
モディファイアは、ブロックやエレメントの外観や動作を変更するためのクラスです。例えば、ボタンの色やサイズ、または特定の条件に基づく動作の変更を行います。モディファイアを使用することで、異なるスタイルを持つ同じ要素を柔軟に管理できます。
BEMのクラス名規則
BEMでは、クラス名の付け方が非常に重要です。BEMのクラス名は、以下の構造で命名されます。
-
Block:
block-name
-
Element:
block-name__element-name
-
Modifier:
block-name--modifier-name
この規則に従うことで、スタイルシートが整理され、後から読みやすくなります。
例:
html<div class="menu">
<ul class="menu__list">
<li class="menu__item menu__item--active">Homeli>
<li class="menu__item">Aboutli>
<li class="menu__item">Contactli>
ul>
div>
上記の例では、「menu」がブロック、「menu__list」がエレメント、「menu__item–active」がモディファイアです。このように、各クラス名は、意味が明確に分かるように構造化されています。
BEMのメリット
BEMを使用することで得られるメリットは多岐にわたります。
-
再利用性が高い
BEMのブロックは独立しているため、同じブロックを他のページやプロジェクトで簡単に再利用できます。これにより、コードの重複を避けることができます。 -
保守性の向上
BEMを使うことで、スタイルの変更や拡張がしやすくなります。ブロックやエレメントのクラス名が直感的であるため、コードの変更が容易になります。また、エレメントやモディファイアを追加することで、スタイルを個別に調整できます。 -
可読性の向上
BEMの命名規則は、クラス名からその要素の役割を直感的に理解できるように設計されています。これにより、他の開発者がコードを見た際にも、すぐにコンポーネントの構造を理解することができます。 -
大規模なプロジェクトに対応
チームでの協力開発が進む中で、BEMのような明確な命名規則を用いることで、コードが統一され、複数の開発者が作業を進めやすくなります。これにより、スケーラブルで整理されたコードベースを維持できます。
BEMの実装例
BEMを実際のプロジェクトでどのように実装するか、簡単な例を通して見てみましょう。
例 1: ナビゲーションバーの実装
html<nav class="nav">
<ul class="nav__list">
<li class="nav__item">
<a href="#" class="nav__link">Homea>
li>
<li class="nav__item">
<a href="#" class="nav__link">Abouta>
li>
<li class="nav__item">
<a href="#" class="nav__link">Servicesa>
li>
<li class="nav__item">
<a href="#" class="nav__link">Contacta>
li>
ul>
nav>
このコードでは、「nav」がブロック、「nav__list」がエレメント、「nav__item」がエレメント、「nav__link」がエレメントです。このように、各部分を分割して管理することで、変更がしやすくなり、再利用可能なコンポーネントを作成できます。
例 2: ボタンのスタイル
html<button class="btn btn--primary">Submitbutton>
<button class="btn btn--secondary">Cancelbutton>
この例では、「btn」がブロックで、「btn–primary」と「btn–secondary」がモディファイアです。ボタンの色やスタイルを変更する際に、モディファイアを適用するだけで済み、コードの再利用性が高まります。
BEMの課題と対策
BEMは非常に有効な手法ですが、いくつかの課題も存在します。
-
クラス名が長くなる
BEMでは、クラス名が長くなりがちです。特に、複雑なUIコンポーネントの場合、クラス名が冗長に感じることがあります。これに対する対策としては、プロジェクトにおいて適切な命名ルールを設けることや、必要に応じてBEMの命名規則をカスタマイズする方法があります。 -
初期学習コスト
BEMの考え方や命名規則は、最初は理解するのに時間がかかる場合があります。しかし、基本的な概念を理解し、実際に使用することで、より効果的にBEMを活用できるようになります。
まとめ
BEM(Block, Element, Modifier)は、ウェブ開発におけるCSS設計手法として、特に大規模なプロジェクトやチーム開発において非常に有効です。BEMを使用することで、再利用可能で保守性の高いコードを作成でき、長期的に見て効率的な開発が可能となります。また、BEMのクラス名規則は、コードの可読性を高め、チーム全体の作業効率を向上させます。BEMをマスターすることで、よりスケーラブルで整理されたウェブサイトやアプリケーションを作成できるようになるでしょう。