大きいチームでプロジェクトを進めていく際、CSSをメンテナンスすることは困難がつきまとうものです。その困難を解決すべく、この記事ではBEM (Block Element Modifier) について解説します。
BEMとは

BEMの命名規則を使用するメリット

チーム全体が簡単に連携できる
チームでプロジェクトを進めて行くと、全員が独自のクラス名を持ち、互いに競合することがあります。そこでBEMを使用することで、構造が明確になり、使用時に簡単に追跡できるため、この問題が解消されます。モジュール
各ブロックのクラスは他の要因の影響を受けないため、あるクラスのCSSが別のクラスに影響を与えることを心配する必要がなくなります。再利用できる
ブロックを互いに独立して作成し、それらを使いやすく再利用することで、CSSコードの量を減らすことができます。BEMの基本的な構成

Block
ブロックは、新しい要素の主要なクラス名です。ブロックの主な機能は、ページ上のどこでも再利用できることです。また、これらのブロックは他のブロックに配置されている場合があります。ブロック名は要素に応じて明確に設定されています。Elements(要素)
ブロックのコンポーネントであり、ブロック内に配置され、その親ブロックに依存しているため、ブロックなしでは独立して存在しません。 BEMでは、要素は二重下線「__」で示されます。Modifier
ブロックまたは要素の表示タイプを変更するために使用されます。モディファイアは個別のコンポーネントとして使用されます。モディファイア名はブロック名または要素名で構成され、「-」で区切られます。/* Block (ブロック) */
.btn { }
/* Element (要素),上のブロックによって異なります*/
.btn__price { }
/* Modifier (モディファイア)はブロックの状態を変更します*/
.btn--orange { }
.btn--big { }
このクラスの命名規則により、コンポーネントを表すブロックがあり、この例では.btnがあります。ブロックは、1つ以上の子要素が関与する親としても機能します。 Elementのクラス名とそのBlockとの関係は、Blockの名前、2つの下線、最後にElement .btn__priceの名前で表されます。 BEMの3番目のコンポーネントは、ブロック/要素の状態またはその他の派生物の調整に役立つ修飾子です。修飾子の名前は、前のブロック/要素の名前と2つのダッシュ .btn--orangeで結合されます。
まとめ

BEMとは、HTMLとCSSにおけるクラス名の命名規則で、Yandexによって開発されました。BEMを採用することで、コードの意味や役割が明確になり、可読性・保守性・拡張性が大きく向上します。
特に大規模なプロジェクトやチーム開発においては、クラス名の競合を防ぎ、構造を統一できる点が大きなメリットです。ブロック単位でCSSを管理できるため、他の要素に影響されにくいモジュール化が可能となり、再利用性の高いスタイル設計が実現できます。
BEMは「Block(独立したコンポーネント)」「Element(ブロックに依存する要素)」「Modifier(状態やバリエーション)」の3要素で構成され、__ や — といった記号を使って関係性を明示します。この命名ルールにより、他の開発者でもコードの意図を理解しやすくなります。
一方で、クラス名が長くなりやすい点からBEMを敬遠する開発者や、別の設計手法を選ぶケースもあります。ただし、適切な命名を心がければ、クリーンで保守性の高いCSSを書くための有効な手法であることは間違いありません。
参照リンク
https://css-tricks.com/bem-101
https://webuild.envato.com/blog/chainable-bem-modifiers/
https://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/0
