# 画面設計書 35-メーカー管理

## 概要

本ドキュメントは、Shopware 6 管理画面（Administration）のメーカー管理画面の設計仕様を定義します。この画面は商品のメーカー（ブランド）情報を一覧表示・管理するための機能を提供し、メーカーの作成、編集、削除を行います。

### 本画面の処理概要

**業務上の目的・背景**：メーカー管理画面は、商品に紐づけるブランド/メーカー情報を管理するための機能です。メーカー情報は商品詳細ページでの表示や、メーカー別商品フィルタリングに使用されます。ブランド認知度の向上や、顧客がブランド別に商品を探しやすくするために重要な機能です。

**画面へのアクセス方法**：左側メインナビゲーションの「カタログ」>「メーカー」をクリックしてアクセスします。URLパスは `/admin#/sw/manufacturer/index` です。権限 `product_manufacturer.viewer` が必要です。

**主要な操作・処理内容**：
1. メーカー一覧の表示：ページネーション付きでメーカーを一覧表示
2. メーカー検索：キーワードによるメーカー検索
3. 並び替え：名前（デフォルト昇順）でソート
4. インライン編集：一覧上で直接メーカー名、リンクを編集
5. メーカー詳細編集：詳細ページでの編集
6. メーカー削除：不要メーカーの削除
7. 言語切替：表示言語の変更

**画面遷移**：メーカー名をクリックするとメーカー詳細編集画面に遷移します。「新規メーカー」ボタンでメーカー作成画面に遷移します。

**権限による表示制御**：
- `product_manufacturer.viewer`: メーカー一覧の閲覧
- `product_manufacturer.creator`: 新規メーカー作成ボタンの表示
- `product_manufacturer.deleter`: 削除ボタンの表示

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | メーカー管理 | 主機能 | メーカー（ブランド）の一覧表示・検索・管理 |

## 画面種別

一覧

## URL/ルーティング

- **URLパス**: `/admin#/sw/manufacturer/index`
- **ルート名**: `sw.manufacturer.index`
- **モジュール名**: `sw-manufacturer`
- **エンティティ**: `product_manufacturer`

### サブルート

| ルート名 | パス | コンポーネント | 説明 |
|---------|------|---------------|------|
| sw.manufacturer.create | `/create` | sw-manufacturer-detail | 新規メーカー作成 |
| sw.manufacturer.detail | `/detail/:id` | sw-manufacturer-detail | メーカー詳細編集 |

## 入出力項目

### 検索入力項目

| 項目名 | 項目ID | 入力形式 | 説明 |
|--------|--------|----------|------|
| 検索キーワード | term | テキスト | メーカー名で検索 |

## 表示項目

### 一覧カラム

| 項目名 | property | 表示形式 | インライン編集 | デフォルト表示 | 説明 |
|--------|----------|----------|---------------|---------------|------|
| メーカー名 | name | テキスト+リンク | 可（string） | Yes | メーカー詳細へのリンク |
| リンク | link | テキスト | 可（string） | Yes | メーカーWebサイトURL |

## イベント仕様

### 1-メーカー一覧取得（getList）

画面表示時および検索・ページング変更時に実行：

1. `manufacturerCriteria` に基づいてクエリを構築
2. 検索条件がある場合はクエリスコアを追加
3. 新しい検索キーワードの場合はソートをリセット
4. メーカーリポジトリで検索を実行
5. 結果を `manufacturers` に格納、`total` を更新

### 2-言語切替（onChangeLanguage）

表示言語を変更した際の処理：

1. 新しい言語IDを受け取る
2. `getList()` を呼び出して一覧を再取得

### 3-一覧データ更新（updateTotal）

一覧コンポーネントからの更新イベント：

1. 新しい総件数を受け取る
2. `total` を更新

## データベース更新仕様

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| 一覧表示 | product_manufacturer | SELECT | メーカー一覧データの取得 |
| インライン編集 | product_manufacturer | UPDATE | メーカー情報の更新 |
| メーカー削除 | product_manufacturer | DELETE | メーカーの削除 |

### テーブル別更新項目詳細

#### product_manufacturer

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| SELECT | id, name, link | ページネーション、ソート条件 | 一覧取得 |
| UPDATE | name, link | インライン編集値 | インライン編集時 |

## メッセージ仕様

| メッセージID | 種別 | 表示条件 | メッセージ内容 |
|-------------|------|----------|--------------|
| messageSaveSuccess | 成功 | インライン編集成功 | メーカーが保存されました |
| messageSaveError | エラー | 保存失敗 | 保存中にエラーが発生しました |

## 例外処理

| 例外種別 | 発生条件 | 処理内容 |
|---------|---------|---------|
| 検索結果なし | 条件に一致するメーカーなし | 空の状態を表示 |
| インライン編集エラー | バリデーション失敗 | エラー通知表示 |
| 削除制約エラー | 商品に紐づいているメーカー | エラー通知表示 |

## 備考

- デフォルトソートは名前の昇順（ASC）
- 検索はメーカー名を対象
- シンプルなエンティティ管理画面として実装

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

メーカーエンティティの構造を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | default-search-configuration.js | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/default-search-configuration.js` | 検索対象フィールドの設定 |

**読解のコツ**: メーカーは比較的シンプルなエンティティで、主要な属性は `name`、`link`、`description`、`media` などです。

#### Step 2: エントリーポイントを理解する

モジュール登録とルーティング設定を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | index.js | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/index.js` | モジュール登録、ルート定義、権限設定 |

**主要処理フロー**:
1. **16行目**: `Module.register('sw-manufacturer', {...})` でモジュール登録
2. **28-37行目**: `routes.index` で一覧ページのルーティング定義
3. **35行目**: `meta.privilege: 'product_manufacturer.viewer'` で閲覧権限を設定
4. **63-73行目**: ナビゲーションメニューの定義

#### Step 3: 一覧コンポーネントを理解する

メーカー一覧ページのメインロジックを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | index.js | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/page/sw-manufacturer-list/index.js` | 一覧表示のdata、computed、methodsの実装 |

**主要処理フロー**:
- **24-32行目**: `data()` で状態変数を定義（manufacturers, sortBy, isLoading等）
- **42-44行目**: `manufacturerRepository` でメーカーリポジトリを取得
- **65-72行目**: `manufacturerCriteria` でクエリ条件を構築
- **80-101行目**: `getList()` でメーカーデータを取得
- **46-63行目**: `manufacturerColumns()` で一覧カラムを定義

### プログラム呼び出し階層図

```
sw-manufacturer (モジュール)
    |
    +-- sw-manufacturer-list (一覧ページコンポーネント)
           |
           +-- getList()
           |      +-- addQueryScores()
           |      +-- manufacturerRepository.search(criteria)
           |
           +-- onChangeLanguage()
           |      +-- getList()
           |
           +-- updateTotal()
                  +-- this.total = total
```

### データフロー図

```
[入力]                    [処理]                         [出力]

検索キーワード  ───▶      sw-manufacturer-list       ───▶   メーカー一覧表示
ページ番号                ・manufacturerCriteria構築         ページネーション
                          ・manufacturerRepository.search()

インライン編集  ───▶      sw-data-grid               ───▶   保存結果通知
                          ・manufacturerRepository.save()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| index.js | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/index.js` | ソース | モジュール登録・ルーティング定義 |
| index.js | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/page/sw-manufacturer-list/index.js` | ソース | 一覧ページのメインロジック |
| sw-manufacturer-list.html.twig | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/page/sw-manufacturer-list/sw-manufacturer-list.html.twig` | テンプレート | 一覧ページのHTMLテンプレート |
| sw-manufacturer-detail | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/page/sw-manufacturer-detail/` | ソース | 詳細ページコンポーネント |
| default-search-configuration.js | `src/Administration/Resources/app/administration/src/module/sw-manufacturer/default-search-configuration.js` | ソース | 検索設定 |
