コラム
クラス名で差をつける!WEBコーディングのための命名規則ガイド

WEBサイトを構築する際、HTMLとCSSのクラス名は非常に重要です。適切に命名されたクラス名は、コードの可読性を高め、チーム開発を円滑にし、将来的なメンテナンスを容易にします。しかし、どうすれば「区別しやすく、整理された」クラス名にできるのでしょうか?
効果的なクラス名の付け方とその具体的な例、そして避けるべきパターンを調べてみました。
なぜクラス名の整理が重要なのか?
1. 可読性の向上
コードを見たときに、そのクラスが何を表しているのか、どんな役割を持っているのかがすぐに理解できると、開発効率が格段に上がります。
2. メンテナンス性の向上
将来的に機能を追加したり、デザインを変更したりする際に、適切なクラス名が付けられていれば、影響範囲を特定しやすくなります。
3. チーム開発の効率化
複数人で開発を行う際、共通の命名規則があれば、コードの統一性が保たれ、コミュニケーションコストが削減されます。
クラス名の命名規則のヒント
1. 役割や目的を明確にする
そのクラスが何のために存在するのかを明確に示しましょう。
- 良い例:
navigation-menu
,product-card
,btn-primary
,text-center
- 悪い例:
box1
,red-text
,item-wrapper
(見た目を直接指定するのは避ける)
2. BEM (Block Element Modifier) 規則を検討する
BEMは、大規模なプロジェクトで特に効果的な命名規則です。 ブロック__要素--修飾子
の形式で名前を付けます。
- ブロック: 独立したコンポーネント(例:
header
,card
) - 要素: ブロックの一部(例:
card__title
,header__logo
) - 修飾子: ブロックや要素の状態やバリエーション(例:
btn--primary
,card--active
)
BEMの例:
HTML
<div class="product-card">
<img class="product-card__image" src="product.jpg" alt="Product Image">
<h2 class="product-card__title">商品タイトル</h2>
<p class="product-card__description">商品の説明が入ります。</p>
<button class="product-card__button product-card__button--disabled">カートに入れる</button>
</div>
3. 接頭辞を使って分類する
共通の接頭辞を付けることで、クラスの用途を明確にできます。
js-
: JavaScriptで操作する要素- 例:
js-tab-trigger
,js-modal-open
- 例:
is-
/has-
: 状態を表すクラス(JavaScriptで付与されることが多い)- 例:
is-active
,is-open
,has-error
- 例:
u-
: Utility(ユーティリティ)クラス(汎用的なスタイル)- 例:
u-text-center
,u-margin-top-10px
- 例:
避けるべきクラス名のパターン
1. 抽象的すぎる名前
item
, wrapper
, box
など、具体的な意味を持たない名前は避けましょう。
2. 見た目を直接表す名前
red-text
, left-column
など、CSSでスタイルを変更すると矛盾が生じる可能性のある名前は避けましょう。そのクラスが持つ「役割」で命名することが重要です。
3. 短すぎる、または長すぎる名前
短すぎると意味が分からなくなり、長すぎると記述が大変になります。適切な長さを心がけましょう。
4. 日本語のローマ字表記
gaiyou
, shohin
など、日本人以外には分かりにくい表記は避けましょう。一般的な英単語を使用しましょう。
クラス名整理一覧(具体例)
以下に、WEBサイトでよく使われる要素のクラス名例をカテゴリ別に示します。
カテゴリ | 良いクラス名例 | 悪いクラス名例 | 備考 |
レイアウト | container , main-content , sidebar | wrapper , box2 | ページの構造を示す |
grid , grid__item , grid--col-3 | columns , float-left | グリッドレイアウト | |
ナビゲーション | navigation , navigation__list , navigation__item , navigation__link | menu , navi-ul | ヘッダー、フッターのナビゲーションなど |
ボタン | btn , btn--primary , btn--secondary , btn--disabled | button1 , red-button | ボタンの役割や状態を明確に |
フォーム | form-group , form-control , input-text , input-checkbox , error-message | myForm , text-input | 入力フィールドやエラー表示など |
カード/アイテム | card , card__image , card__title , card__body | item-box , product-div | 商品、ニュース、ブログ記事などの表示 |
ヘッダー/フッター | header , header__logo , header__nav , footer , footer__copyright | top-area , bottom | サイト全体のヘッダーとフッター |
セクション | section-about , section-features | area3 , content-block | 特定のコンテンツブロックやセクション |
ユーティリティ | u-text-center , u-margin-top-20px , u-hidden | center-align , mt20 , display-none | 汎用的なスタイル(BEMと組み合わせて使うことも) |
状態 | is-active , is-open , has-error , is-loading | selected , display | JavaScriptなどで動的に付与される状態クラス |
JavaScript連携 | js-tab-trigger , js-modal-open , js-accordion-content | click-me , do-something | JavaScriptで特定の要素を操作するためのトリガー |
まとめ
クラス名は、WEBコーディングにおける「言葉」のようなものです。意味のある言葉を選び、整理することで、コードはより理解しやすく、管理しやすくなります。