ウェブサイト設計の強い味方:BEM入門

デジタル化を知りたい
先生、『BEM』って言葉を聞きました。どうやら見た目を作る言葉づかいの一つらしいのですが、どういうものか教えてもらえますか?

デジタル化研究家
『BEM』は、ウェブサイトなどの見た目を作るための言葉づかいの一つで、Block(かたまり)、Element(要素)、Modifier(変化)の頭文字をとったものです。大きなかたまりから細かい部分まで、名前をつけることで整理しやすく、見た目を作る人とプログラムを作る人が理解しやすいようにするものです。

デジタル化を知りたい
なるほど。大きなかたまり、細かい部分、変化…ですか。もう少し具体的に教えてもらえますか?

デジタル化研究家
例えば、ウェブサイトのメニューを例に考えてみましょう。メニュー全体を『menu-block』(かたまり)と名付け、メニューの各項目を『menu-block__item』(要素)、選ばれている項目を『menu-block__item–selected』(変化)のように名前を付けます。このようにすることで、どの部分がどの役割を持っているかが分かりやすくなります。
BEMとは。
ウェブサイトの見た目を作るための技術の一つである『シーエスエス』の設計方法の一つ、『ベム』について説明します。
はじめに

ウェブサイトを作る上で、見た目の良さは利用者の使いやすさや印象を大きく左右する重要な要素です。しかし、ウェブサイトの規模が大きくなり、複雑な構造になるにつれて、見た目を整えるためのスタイルシート(CSS)の管理は次第に難しくなります。 CSSの記述が重複したり、思わぬ箇所に影響を与えてしまったり、修正に時間がかかったりと、開発効率の低下に繋がることも少なくありません。このような問題を解決するために、近年注目されているのがBEMという設計手法です。
BEMはBlock(かたまり)、Element(要素)、Modifier(修飾子)の頭文字を取ったもので、ウェブサイトの構成要素をこれらの3つの概念で分類し、命名規則に従ってCSSのクラス名を付けることで、スタイルシートの構造を整理し、保守性を高めることができます。例えば、ウェブサイトのヘッダー部分をBlockとして「header」と名付け、その中に含まれるロゴをElementとして「header__logo」、検索窓をElementとして「header__search」のように命名します。さらに、検索窓に特定のスタイルを適用したい場合は、Modifierとして「header__search–active」のように命名します。このように、BEMの命名規則に従うことで、どのCSSがどの要素に適用されるのかが一目で分かりやすくなり、修正や追加が容易になります。
この手法は、大規模なウェブサイト開発はもちろんのこと、小規模なプロジェクトでもその効果を発揮します。CSSの構造が整理されることで、開発初期段階から保守性の高いコードを書くことができ、後々の修正作業を大幅に減らすことができます。また、複数人で開発を行う場合でも、命名規則が統一されるため、コードの可読性が向上し、共同作業がスムーズに進みます。これからウェブサイト制作に挑戦する方や、現在のCSSの管理方法に課題を感じている方は、ぜひBEMの基本的な考え方と使い方を学び、日々の開発に役立ててみてください。
| 概念 | 説明 | 例 |
|---|---|---|
| Block(かたまり) | ウェブサイトの構成要素のまとまり | header |
| Element(要素) | Blockの中に含まれる個々の要素 | header__logo, header__search |
| Modifier(修飾子) | Elementに特定のスタイルを適用するためのもの | header__search–active |
BEMのメリット
- スタイルシートの構造を整理し、保守性を高める
- どのCSSがどの要素に適用されるのかが一目で分かりやすくなる
- 修正や追加が容易になる
- 開発初期段階から保守性の高いコードを書くことができる
- 後々の修正作業を大幅に減らすことができる
- コードの可読性が向上し、共同作業がスムーズに進む
BEMの構成要素

見た目や使い勝手を整えるための網の目のように張り巡らされた指示書、スタイルシート。その指示書をうまく扱うための手法の一つに「BEM」というものがあります。これは、大きく分けて「かたまり」、「部分」、「状態」の三つの要素を組み合わせることで、指示書の整理と管理を簡単にするための方法です。
まず、「かたまり」とは、ホームページを構成する部品の一つ一つを指します。例えば、一番上の部分や、複数の項目が並んだ一覧表、何かをするための押しボタンなど、それぞれが独立した「かたまり」です。この「かたまり」の一つ一つに名前をつけ、指示書の書き出しを整理します。
次に、「部分」とは、「かたまり」をさらに細かく分けた要素のことです。例えば、一覧表の中に並んでいる一つ一つの項目や、押しボタンに表示されている文字などが「部分」にあたります。これらにも名前をつけ、「かたまり」の名前と組み合わせて、より具体的な指示を書くことができます。例えば、「押しボタンの文字」といった具合です。
最後に、「状態」とは、「かたまり」や「部分」がどのような見た目になっているかを表します。例えば、押しボタンの色が変わっていたり、一覧表の項目が選ばれて強調表示されている状態などです。これらを「状態」として名前をつけ、「かたまり」や「部分」の名前と組み合わせることで、指示書をさらに整理できます。例えば、「赤い押しボタン」や「選ばれた一覧表の項目」といった具合です。
このように、BEMを用いることで、スタイルシートの指示を階層的に整理し、どの部品にどのような指示が適用されるのかを明確にすることができます。また、指示の重複や混乱を防ぎ、修正や変更を容易にすることにも繋がります。つまり、ホームページ作りにおける指示書の管理をスムーズに進めるための、整理整頓術と言えるでしょう。
| 要素 | 説明 | 例 |
|---|---|---|
| かたまり (Block) | ホームページを構成する独立した部品 | ヘッダー、一覧表、押しボタン |
| 部分 (Element) | かたまりをさらに細かく分けた要素 | 一覧表の項目、押しボタンの文字 |
| 状態 (Modifier) | かたまりや部分の見た目や状態 | 赤い押しボタン、選ばれた一覧表の項目 |
命名規則

ウェブサイトやウェブアプリを作る際に、構成要素それぞれに名前をつけることは、家を作る際に柱や壁に名前を付けるようなものです。適切な名前付け、つまり命名規則を設けることで、後から変更や修正が必要になったときに、どこに何があるのかすぐに分かり、作業効率が格段に向上します。
BEM(ベム)という命名規則は、ブロック、要素、修飾子という三つの部分で名前を構成します。ウェブサイトを家の構造に例えると、ヘッダーやフッター、サイドバーといった大きなまとまりがブロックに該当します。そして、ブロックの中にあるメニューやロゴ、検索窓といった更に小さな部分が要素です。最後に、要素の色や大きさ、状態(例えば、クリックされた状態)などを表すものが修飾子です。
これらの三つの部分を組み合わせることで、例えば「ヘッダーの中のメニューで、現在選択されている状態」を表す名前を作ることができます。具体的には「header__menu–active」のように記述します。ここで「header」がブロック、「menu」が要素、「active」が修飾子です。ブロックと要素は二つの下線(__)で繋ぎ、要素と修飾子は二つの横線(–)で繋ぎます。この記法は、どの要素がどのブロックに属し、どのような状態なのかを名前を見るだけで即座に理解できるように設計されています。
この命名規則の利点は、名前の重複を防げることです。大規模な開発では、多くの開発者が同時に作業を行うため、意図せず同じ名前をつけてしまう可能性があります。BEMを使うことで、このような名前の衝突を回避し、混乱を防ぎます。また、コードの可読性が向上する点も大きなメリットです。誰が見ても理解しやすいコードは、修正や機能追加の際に役立ち、開発全体の効率を高めます。一貫した命名規則は、チーム開発を円滑に進める上で不可欠な要素と言えます。
| 概念 | 説明 | 例 | 記法 |
|---|---|---|---|
| ブロック | ウェブサイトの大まかな部分(例: ヘッダー、フッター、サイドバー) | header | – |
| 要素 | ブロック内の個々の構成要素(例: メニュー、ロゴ、検索窓) | menu | – |
| 修飾子 | 要素の状態や種類(例: 色、サイズ、クリックされた状態) | active | – |
| 例 | ヘッダー内のメニューで、現在選択されている状態 | header__menu–active | ブロック__要素–修飾子 |
BEMの利点
- 名前の重複を防ぐ
- コードの可読性向上
- チーム開発の円滑化
具体的な使用例

例えば、ホームページの一番上の部分であるヘッダーを例に考えてみましょう。ヘッダー全体を「頭部」という区画として捉えます。この頭部の中には、「検索窓」と「会社の象徴である図形」という二つの要素があるとします。検索窓に何か言葉が入力されている状態を「有効」という状態を表す言葉で示すことにします。
この場合、見た目を作るための指示である様式名(クラス名)は、「頭部」、「頭部__検索窓」、「頭部__会社の象徴である図形」、「頭部__検索窓–有効」のように名前を付けます。ホームページの土台となる文章(HTML)では、これらの様式名をそれぞれの要素に当てはめることで、それぞれの見た目を実現することができます。
このように、「区画、要素、修飾子」という考え方を用いることで、複雑な構造のホームページでも、見た目を整える指示を整理し、管理しやすくすることができます。
具体的な例を挙げると、会社の象徴である図形の色を変えたい場合、「頭部__会社の象徴である図形」という様式名に対して指示を出せば変更できます。もし、検索窓が有効な状態の時の文字色を変えたい場合は、「頭部__検索窓–有効」という様式名に対して指示を出せば変更できます。このように、一部分だけを変更したい場合でも、影響範囲を限定できるため、他の部分に思わぬ影響を与えることを防ぎ、修正作業を容易にします。また、複数人で作業する場合でも、名前付けの規則が統一されているため、コードの可読性が向上し、共同作業がスムーズになります。
| BEMの考え方 | メリット | 具体的な例 |
|---|---|---|
| 区画、要素、修飾子 (例: 頭部、頭部__検索窓、頭部__検索窓–有効) |
複雑な構造のホームページでも、見た目を整える指示を整理し、管理しやすくする。 | 会社の象徴である図形の色を変えたい場合、「頭部__会社の象徴である図形」という様式名に対して指示を出せば変更できる。 |
| 一部分だけを変更したい場合でも、影響範囲を限定できるため、他の部分に思わぬ影響を与えることを防ぎ、修正作業を容易にする。 | 検索窓が有効な状態の時の文字色を変えたい場合は、「頭部__検索窓–有効」という様式名に対して指示を出せば変更できる。 | |
| 複数人で作業する場合でも、コードの可読性が向上し、共同作業がスムーズになる。 |
利点

部品のように組み立てて使うという考え方の『ブロック要素修飾子』は、多くの良いところを持っています。まず、見た目に関する指示をまとめたものの構成が整理されて、読みやすくなります。どの部分にどんな見た目の指示がされているかがすぐに分かるので、間違いを直したり、変更するのがとても簡単になります。
また、名前が重複することがなくなるので、意図しない見た目の変化を防ぐことができます。例えば、複数の場所で『ボタン』という名前を使っていた場合、一つのボタンの見た目を変えると、他のボタンも同時に変わってしまう可能性があります。しかし、『部品のように組み立てる』方法では、それぞれのボタンに固有の名前を付けるため、一部分だけ変更することが容易になります。
さらに、一度作った見た目の指示を繰り返し使えるようになるので、開発のスピードが上がります。例えば、『お知らせ』という見た目を作ったら、それを他のページでも簡単に再利用できます。わざわざ同じ見た目を作るための指示を何度も書く必要がなくなるため、作業の手間が省けます。また、見た目の指示を使い回すことで、全体の見た目の統一感も出しやすくなります。
このように、『部品のように組み立てる』方法は、整理整頓、修正のしやすさ、再利用性の高さなどの利点があり、大きな規模のホームページを作る際にとても役立ちます。
| ブロック要素修飾子のメリット | 説明 |
|---|---|
| 整理されて、読みやすくなる | 見た目に関する指示をまとめたものの構成が整理されて、どの部分にどんな見た目の指示がされているかがすぐに分かる |
| 間違いを直したり、変更するのが簡単 | 見た目に関する指示が整理されているため、修正が容易 |
| 名前が重複することがなくなる | 意図しない見た目の変化を防ぐことができ、一部分だけ変更することが容易 |
| 一度作った見た目の指示を繰り返し使える | 開発のスピードが上がり、作業の手間が省ける |
| 全体の見た目の統一感も出しやすくなる | 見た目に関する指示を使い回すことで、統一感を出しやすい |
| 大きな規模のホームページを作る際に役立つ | 整理整頓、修正のしやすさ、再利用性の高さなどの利点があるため、大規模開発に役立つ |
まとめ

見た目を作るための指示書をうまく整理する方法の一つに「ブロック・要素・修飾子」という考え方があります。これは、例えばホームページの見た目を作る際に、それぞれの部品を「ブロック」「要素」「修飾子」の三つの種類に分類して名前を付けることで、整理しやすくするというものです。
まず「ブロック」とは、ホームページの大きなかたまり、例えばヘッダーやフッター、メインコンテンツといった部分を指します。そして、それぞれのブロックの中に、さらに細かい部品があります。例えばヘッダーの中にロゴやメニューがあるといった具合です。これらの細かい部品が「要素」です。最後に「修飾子」は、同じ種類の部品でも、例えば色が違うボタンや少し大きさが違うメニューのように、少しずつ見た目や機能が異なる場合に、その違いを表すために使います。
このように部品を分類して名前を付けることで、どの部品がどの部分に属しているのか、またどのような種類の違いがあるのかが一目で分かるようになります。例えば「ヘッダーの中のメニューボタンで、色が赤いもの」という部品があった場合、「ヘッダー-メニュー-ボタン-赤」のように名前を付けます。こうすることで、他の種類のボタンと区別しやすくなります。
この名前付けのルールをきちんと守ることで、見た目を作るための指示書が整理され、複数人で作業する場合でも混乱が少なくなります。また、後から修正する場合にも、影響範囲が分かりやすいため、作業ミスを減らすことができます。さらに、部品を使い回すことも容易になります。例えば、同じボタンを別のページで使いたい場合、名前をそのままコピーして使うことができます。
最初は少し複雑に感じるかもしれませんが、慣れてくると、作業効率が上がり、見た目を作るための指示書の分かりやすさや修正のしやすさが格段に向上します。ホームページ制作に携わる方は、ぜひこの方法を学び、実践してみてください。複雑化するホームページ制作において、強力な助けとなるでしょう。
| 分類 | 説明 | 例 |
|---|---|---|
| ブロック | ホームページの大きなかたまり | ヘッダー、フッター、メインコンテンツ |
| 要素 | ブロック内の細かい部品 | ヘッダー内のロゴ、メニュー |
| 修飾子 | 同じ種類の部品の見た目の違い | 赤いボタン、大きいメニュー |
