code-bem-check.prompt.md

by interlife

HTML

---
description: "SCSS BEM記法チェック・修正"
model: 任意のAIモデルを指定
agent: agent
---

## タスク
開いているファイル/変更されたファイルのSCSSをチェックし、BEM記法で書けるところを通常のSCSSで指定している箇所を検出して、BEMに則った記法に修正してください

## 背景・文脈
BEM(Block Element Modifier)記法を統一して使用することで、コードの可読性・保守性を向上させたい

## BEM記法の基本ルール

### 命名規則
- **Block**: 独立したコンポーネント(例: `.card`, `.header`, `.menu`)
- **Element**: Blockの構成要素(例: `.card__title`, `.card__image`)
- **Modifier**: BlockまたはElementのバリエーション(例: `.card--large`, `.card__title--bold`)

### SCSSでの正しいBEM記法
```scss
// ✅ 正しいBEM記法
.card {
  padding: 16px;
  
  &__title {
    font-size: 18px;
  }
  
  &__image {
    width: 100%;
  }
  
  &--large {
    padding: 24px;
  }
  
  &__title--bold {
    font-weight: bold;
  }
}
```

## チェック観点

### 1. 子孫セレクタの不適切な使用

#### ネストによる子孫セレクタ
- [ ] `.block .element` の形式になっている
- [ ] `&` を使わずにネストしている

```scss
// ❌ 問題あり: 子孫セレクタ
.card {
  .title {
    font-size: 18px;
  }
  .image {
    width: 100%;
  }
}

// ✅ 修正後: BEM記法
.card {
  &__title {
    font-size: 18px;
  }
  &__image {
    width: 100%;
  }
}
```

### 2. 要素セレクタとの組み合わせ

#### タグ名との組み合わせ
- [ ] `.block h2`, `.block p` などの形式
- [ ] クラス名ではなく要素名で指定

```scss
// ❌ 問題あり: 要素セレクタ
.card {
  h2 {
    font-size: 18px;
  }
  p {
    color: #666;
  }
}

// ✅ 修正後: BEM記法
.card {
  &__heading {
    font-size: 18px;
  }
  &__text {
    color: #666;
  }
}
```

### 3. 深いネストの解消

#### 3階層以上のネスト
- [ ] `.block .element .sub-element` の形式
- [ ] BEMでは原則2階層まで

```scss
// ❌ 問題あり: 深いネスト
.card {
  .header {
    .title {
      font-size: 18px;
    }
  }
}

// ✅ 修正後: フラットなBEM
.card {
  &__header {
    // styles
  }
  &__title {
    font-size: 18px;
  }
}
```

### 4. Modifierの不適切な記述

#### 状態を表すクラスの記述
- [ ] `.block.active` のような結合セレクタ
- [ ] 別クラスでの状態管理

```scss
// ❌ 問題あり: 結合セレクタ
.card {
  &.active {
    border-color: blue;
  }
}

// ✅ 修正後: BEM Modifier
.card {
  &--active {
    border-color: blue;
 ...