# Module Naming Policy / スクリプトモジュール命名方針

Version: dev-0.7.2

## 1. 基本方針

UnifiedControl の `scripts/` 配下に配置する JavaScript モジュールファイルは、物理ファイル名および AMD module id として扱うため、原則として `lower_snake_case.js` に統一する。

JavaScript の class 名、constructor 名、公開 API 名は論理名であり、通常の JavaScript 命名規約に従って `PascalCase` / `camelCase` を使用する。

## 2. 例

```text
scripts/models/selection_store.js
  -> SelectionStore class を return

scripts/commands/command_registry.js
  -> CommandRegistry class を return

scripts/commands/base_command.js
  -> BaseCommand class を return

scripts/utils/path_utils.js
  -> path utility functions を return
```

AMD 依存は、物理 module id に合わせて小文字で記述する。

```javascript
define([
  '../models/selection_store',
  '../commands/command_registry'
], function (SelectionStore, CommandRegistry) {
  class PackageControl extends Control {
    // ...
  }

  return PackageControl;
});
```

## 3. ルール

| 対象 | ルール |
| --- | --- |
| ディレクトリ名 | `controls/`, `services/`, `models/` など lower category |
| 物理ファイル名 | `lower_snake_case.js` |
| AMD module id | ファイル名と同じ `lower_snake_case` |
| class 名 | `PascalCase` |
| public method / option / event | `camelCase` |
| 定数 object | module は `command_ids.js`、object property は必要に応じて `UPPER_SNAKE_CASE` |

## 4. 理由

- CDN / Linux / HTTP 配信での大文字小文字差異による事故を避ける。
- class module と非 class module の物理命名を統一する。
- RequireJS module id を安定した URL path として扱える。
- 各アプリパッケージが UnifiedControl を社内 CDN から直接参照する際、物理パスの互換性を明確にする。

## 5. 注意

- class 名は変更しない。
- 公開 API 名は変更しない。
- 既存 Host / アプリ側が内部ファイルへ直接依存することは推奨しない。公開入口は `scripts/main.js` を使用する。
- 各アプリパッケージ側で UnifiedControl の `Control` を継承する場合も、AMD 依存は `UnifiedControl/controls/control` のように lower_snake_case の module id を使用する。
