# 業務ロジック — WebConfiguration.localeChangeInterceptor() [6 LOC]

| 項目 | 値 |
|-------|-------|
| 完全修飾名 | `org.springframework.samples.petclinic.system.WebConfiguration` |
| レイヤー | Common Component（Web 設定・インフラ） |
| モジュール | `system`（パッケージ: `org.springframework.samples.petclinic.system`） |

## 1. 役割

### WebConfiguration.localeChangeInterceptor()

本メソッドは、アプリケーション全体で言語切替機能を有効にするための Spring 設定メソッドです。具体的には、URL クエリパラメータを用いてユーザのロケール（言語環境）を動的に切り替えるための `LocaleChangeInterceptor` Bean インスタンスを生成・初期化し、返却します。これにより、アプリケーションのどの画面からも `?lang=ja` や `?lang=en` のようなパラメータを付与することで、セッション全体にわたって言語を切り替えることが可能になります。

このメソッドはデザインパターンの観点では「ファクトリメソッド」パターンの一形態を採用しています。内部では新規オブジェクトの生成とプロパティ設定のみを行い、複雑な分岐や条件処理は存在しません。さらに「委譲パターン」によって、後段の `addInterceptors` メソッドが本メソッドの戻り値を HttpInterceptor チェーンに登録し、リクエストごとにロケール切替の処理を委譲します。

システム全体における役割としては、本メソッドは国際化（i18n）機能の中核インフラを担います。Spring Framework の標準的な `LocaleChangeInterceptor` を活用することで、外部ライブラリのバリデーションや独自実装を最小限に抑え、多言語対応の運用負荷を低減しています。

## 2. 処理パターン（詳細業務ロジック）

```mermaid
flowchart TD
    START(["localeChangeInterceptor(params)"])
    CREATE["LocaleChangeInterceptor インスタンス生成"]
    SET_PARAM["interceptor.setParamName - lang パラメータ名設定"]
    RETURN(["LocaleChangeInterceptor インスタンスを返却"])

    START --> CREATE --> SET_PARAM --> RETURN
```

本メソッドは直線的な処理フローのみを持ち、分岐（if/else や switch）やループ構造は存在しません。以下のステップで構成されます：

1. **LocaleChangeInterceptor のインスタンス生成** — Spring が提供する標準のインターセプタークラスを `new` で新規インスタンス化します。
2. **パラメータ名の設定** — `setParamName` メソッドにより、URL 上でロケール切替をトリガするパラメータ名を `lang` に固定設定します。
3. **インスタンスの返却** — 設定済みインターセプターを呼び出し元へ返却し、以降の Interceptor チェーン登録へ渡します。

## 3. パラメータ分析

| No | パラメータ名 | 型 | 業務的説明 |
|----|---------------|------|---------------------|
| - | (なし) | - | このメソッドはパラメータを受け取りません。 |

本メソッドはインスタンスフィールドへの参照も、外部状態への依存も持っていません。すべてローカルスコープ内で完結する純粋なファクトリメソッドです。

## 4. CRUD操作／呼び出しサービス

本メソッド内では外部サービス、データベース、SC コードへの呼び出しは存在しません。すべて Spring Framework 標準クラスのインスタンス操作のみで行われるため、CRUD 操作テーブルは空です。

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作の説明 |
|------|----------|---------|-------------|----------------------|
| - | - | - | - | 本メソッドには外部データベースやサービスコンポーネントへの呼び出しは存在しません。`LocaleChangeInterceptor` のインスタンス生成とプロパティ設定のみを行います。 |

## 5. 依存関係トレース

### コード解析グラフからの事前抽出エビデンス:

画面/バッチのエントリポイントは見つかりませんでした（探索範囲 8 ホップ）。直接の呼び出し元: 1 件のメソッド。
本メソッドからの終端操作: -

本メソッドは Spring の `InterceptorRegistry` へのインターセプター登録プロセスの中で、WebConfiguration 内部の `addInterceptors` メソッドから呼び出されます。呼び出しチェーンは単一パスで、追加のエントリポイント（画面やバッチ）はありません。

| # | 呼び出し元（画面/バッチ） | 呼び出しチェーン（本メソッドまでの全経路） | 終端（SC / CRUD / エンティティ） |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | WebConfiguration.addInterceptors | `WebConfiguration.addInterceptors` → `localeChangeInterceptor` | なし |

## 6. 分岐ごとの詳細ブロック

本メソッドは直線的な処理フローであり、条件分岐やループ構造を含みません。そのため、単一のブロックとして以下に記述します。

**ブロック 1** — [処理の開始] (L46)

メソッドの処理エントリポイント。

| # | 種別 | コード |
|---|------|------|
| 1 | CREATE | `LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();` // インターセプター新規生成 |
| 2 | SET | `interceptor.setParamName("lang");` // URL 上のパラメータ名を "lang" に固定設定 |
| 3 | RETURN | `return interceptor;` // 設定済みインターセプターを返却 |

## 7. 用語集

| 用語 | 種別 | 業務的意味 |
|------|------|------------------|
| `LocaleChangeInterceptor` | Class | Spring Framework が提供する標準の HTTP インターセプター。URL クエリパラメータによってユーザセッションのロケール（言語・地域）を動的に切り替える機能を提供する。 |
| `setParamName` | Method | インターセプターに対して、ロケール切替をトリガする URL クエリパラメータの名前を設定するメソッド。 |
| `InterceptorRegistry` | Class | Spring Web MVC のインターセプター登録管理クラス。各リクエストに対して適用するインターセプターの一覧を管理する。 |
| `addInterceptors` | Method | `InterceptorRegistry` にローカルで生成したインターセプターを登録する WebConfiguration の設定メソッド。 |
| `lang` | Parameter | URL クエリパラメータ名。例: `?lang=ja`, `?lang=en`。この値を付与することで、アプリケーションの表示言語を切り替える。 |
| Bean | Concept | Spring Framework の DI コンテナが管理するオブジェクト。本メソッドの戻り値は `@Bean` 注釈により DI コンテナに登録される。 |
| `@Bean` | Annotation | Spring の設定クラス内で DI コンテナへ登録する Bean を定義するための注釈。 |
| `?lang=xx` | URL Pattern | ロケール切替のための URL パターン。`xx` には `ja`（日本語）、`en`（英語）、`es`（スペイン語）などの ISO 639-1 言語コードが入る。 |
