# 通知設計書 43-WINDOW_CLOSE

## 概要

本ドキュメントは、lua-language-serverにおける「クローズ」ボタン通知（WINDOW_CLOSE）の設計仕様を定義する。この通知は、各種ダイアログやメッセージボックスで使用される汎用的な「閉じる」ボタンのラベルテキストを提供する。

### 本通知の処理概要

この通知は、ダイアログやポップアップメッセージを閉じるための汎用的なアクションボタンのラベルとして機能する。単独では使用されず、他の通知メッセージと組み合わせて使用される。

**業務上の目的・背景**：ユーザーインターフェースの一貫性を保つため、「閉じる」ボタンのラベルテキストを統一的に管理する。多言語対応を容易にし、各ロケールで適切な翻訳を提供することで、国際化されたユーザー体験を実現する。

**通知の送信タイミング**：他の通知メッセージ（ダイアログ）と組み合わせて使用される。具体的なトリガーは親となる通知メッセージに依存する。現在のコードベースでは、このラベルを直接使用している箇所は確認されていないが、将来的な拡張や外部からの参照のために定義されている。

**通知の受信者**：VSCode等のIDEを使用している開発者。ダイアログを閉じる操作を行うユーザー全般。

**通知内容の概要**：「Close」（日本語：「クローズ」）という単純なボタンラベルテキスト。

**期待されるアクション**：ユーザーがこのボタンをクリックすると、表示中のダイアログが閉じられ、処理がキャンセルまたはスキップされる。

## 通知種別

LSPメッセージリクエスト（`window/showMessageRequest`）のアクションボタンラベル

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 非同期 |
| 優先度 | 低 |
| リトライ | なし |

### 送信先決定ロジック

親となるダイアログの送信先決定ロジックに従う。

## 通知テンプレート

### ボタンラベルの場合

| 項目 | 内容 |
|-----|------|
| 用途 | ダイアログ閉じるボタン |
| 親メッセージ | 各種ダイアログ通知 |
| 形式 | テキスト |

### 本文テンプレート

```
英語: Close
日本語: クローズ
中国語(簡体): 关闭
中国語(繁体): 關閉
```

### 添付ファイル

なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| なし | ボタンラベルは固定テキスト | locale/*/script.lua | N/A |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| N/A | 親ダイアログに依存 | 親ダイアログに依存 | 汎用ラベルとして定義 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| 親ダイアログに依存 | 親ダイアログの抑止条件に従う |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[親ダイアログ表示] --> B[WINDOW_CLOSEラベル付きボタン表示]
    B --> C{ユーザー選択}
    C -->|Closeクリック| D[ダイアログ閉じる]
    C -->|他のアクション| E[該当アクション実行]
    D --> F[処理スキップ/キャンセル]
    F --> G[終了]
```

## データベース参照・更新仕様

### 参照テーブル一覧

本通知はデータベースを使用しない。

| テーブル名 | 用途 | 備考 |
|-----------|------|------|
| N/A | N/A | データベース不使用 |

### 更新テーブル一覧

データベースの更新は行わない。

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| N/A | ラベルのみのため直接のエラーなし | N/A |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | N/A |
| リトライ間隔 | N/A |
| リトライ対象エラー | N/A |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 制限 | なし |

### 配信時間帯

制限なし

## セキュリティ考慮事項

- 固定テキストのみであり、機密情報は含まれない
- ユーザー入力を受け付けないため、インジェクションのリスクなし

## 備考

- 現在のコードベース検索では、`WINDOW_CLOSE`を直接使用している箇所は確認されていない
- locale定義のみが存在し、将来的な使用または外部プラグインからの参照を想定した予約定義の可能性がある
- 類似の汎用ボタンラベルとして`WINDOW_DONT_SHOW_AGAIN`などが存在する

---

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

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

### 推奨読解順序

#### Step 1: 言語リソース定義を理解する

WINDOW_CLOSEのメッセージ定義を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | script.lua | `locale/en-us/script.lua` | 554-555行目：英語メッセージ定義 |
| 1-2 | script.lua | `locale/ja-jp/script.lua` | 554-555行目：日本語メッセージ定義 |
| 1-3 | script.lua | `locale/zh-cn/script.lua` | 554-555行目：中国語（簡体）メッセージ定義 |

**読解のコツ**: locale/*/script.luaファイルは言語リソースの定義ファイル。キー名と値のペアで定義されている。

#### Step 2: 類似ボタンラベルの使用パターンを理解する

同様のボタンラベルがどのように使用されているか参照する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | loading.lua | `script/workspace/loading.lua` | 48行目：WINDOW_INCREASE_UPPER_LIMITの使用例 |
| 2-2 | diagnostic.lua | `script/provider/diagnostic.lua` | 478行目：WINDOW_DONT_SHOW_AGAINの使用例 |

**主要処理フロー**:
- `lang.script.WINDOW_CLOSE`の形式でアクセス
- `client.requestMessage`の`titles`配列に含めて使用

#### Step 3: langモジュールを理解する

言語リソースの読み込みメカニズムを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | language.lua | `script/language.lua` | 言語リソース管理の仕組み |

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

```
[言語リソースファイル]
    |
    +-- locale/en-us/script.lua (WINDOW_CLOSE = 'Close')
    +-- locale/ja-jp/script.lua (WINDOW_CLOSE = 'クローズ')
    +-- locale/zh-cn/script.lua (WINDOW_CLOSE = '关闭')
            |
            ▼
    language.lua (lang.script.WINDOW_CLOSE としてアクセス)
            |
            ▼
    [使用箇所 - 現在未使用]
            |
            ▼
    client.requestMessage / proto.request
```

### データフロー図

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

locale/*/script.lua  ───▶  language.lua           ───▶  lang.script.WINDOW_CLOSE
                           (言語リソース読み込み)
                                   |
                                   ▼
                           [ダイアログ表示時]     ───▶  ボタンラベル表示
                           (client.requestMessage)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| script.lua | `locale/en-us/script.lua` | 言語リソース | 英語メッセージ定義 |
| script.lua | `locale/ja-jp/script.lua` | 言語リソース | 日本語メッセージ定義 |
| script.lua | `locale/zh-cn/script.lua` | 言語リソース | 中国語（簡体）メッセージ定義 |
| script.lua | `locale/zh-tw/script.lua` | 言語リソース | 中国語（繁体）メッセージ定義 |
| language.lua | `script/language.lua` | ソース | 言語リソース管理 |
| client.lua | `script/client.lua` | ソース | LSPクライアント通信（ダイアログ表示） |
