# 機能設計書 7-エイリアス

## 概要

本ドキュメントは、Nushellにおけるエイリアス機能について定義する。エイリアスはコマンドに別名を付けることで、タイピングの省力化やコマンドのカスタマイズを実現する。

### 本機能の処理概要

**業務上の目的・背景**：よく使用するコマンドやオプション付きコマンドに短い別名を付けることで、作業効率を向上させる。また、既存のコマンドをラップして、デフォルトのオプションを追加することもできる。

**機能の利用シーン**：
- 長いコマンドの短縮（ls -la -> ll）
- デフォルトオプションの設定（grep -> grep --color=auto）
- コマンド名のカスタマイズ
- モジュールからのエイリアスエクスポート

**主要な処理内容**：
1. `alias name = command` - 基本的なエイリアス定義
2. `export alias` - モジュールからのエクスポート
3. エイリアスの解決と展開

**関連システム・外部連携**：nu-parser（構文解析）と連携する。

**権限による制御**：特になし。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 1 | メインREPL | 主画面 | エイリアス定義と実行 |

## 機能種別

コマンドエイリアス / 名前マッピング

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| name | String | Yes | エイリアス名 | 有効な識別子 |
| initial_value | Keyword(=, Expression) | Yes | エイリアス先の式 | 有効な式 |

### 入力データソース

- ユーザーからのコマンドライン入力
- スクリプトファイル
- モジュールファイル

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| PipelineData | PipelineData | Empty（定義自体は値を返さない） |

### 出力先

- EngineState（エイリアス宣言として登録）

## 処理フロー

### 処理シーケンス

```
1. パース時
   └─ エイリアス名の検証
   └─ エイリアス先式の解析
   └─ DeclIdの割り当て
   └─ EngineStateへの登録
2. 呼び出し時
   └─ エイリアスの解決
   └─ 展開後のコマンド実行
```

### フローチャート

```mermaid
flowchart TD
    A[alias name = cmd] --> B[パース時処理]
    B --> C[エイリアス名検証]
    C --> D[エイリアス先解析]
    D --> E[DeclId割り当て]
    E --> F[EngineState登録]
    F --> G[定義完了]
    H[エイリアス呼び出し] --> I[エイリアス解決]
    I --> J[展開後コマンド実行]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | 展開 | エイリアスは呼び出し時に展開される | エイリアス呼び出し時 |
| BR-002 | 引数追加 | エイリアス呼び出し時に追加引数を指定可能 | ll -a |
| BR-003 | スコープ | エイリアスは定義されたスコープで有効 | モジュール/オーバーレイ |

### 計算ロジック

特になし。

## データベース操作仕様

本機能はデータベース操作を直接行わない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | - | エイリアス固有のエラーは少ない | - |

### リトライ仕様

リトライは行わない。

## トランザクション仕様

エイリアス定義はトランザクション管理を行わない。

## パフォーマンス要件

特になし。

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

特になし。

## 備考

- aliasはパーサーキーワードとして実装
- runはPipelineData::empty()を返すのみ

---

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

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

### 推奨読解順序

#### Step 1: コマンド定義を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | alias.rs | `crates/nu-cmd-lang/src/core_commands/alias.rs` | aliasコマンドの実装 |
| 1-2 | export_alias.rs | `crates/nu-cmd-lang/src/core_commands/export_alias.rs` | export aliasの実装 |

**主要処理フロー（alias.rs）**:
- **16-26行目**: シグネチャ定義。name, initial_value
- **37-38行目**: search_termsにabbr, aka, fn, func, function
- **41-48行目**: run関数（PipelineData::empty()を返す）
- **51-56行目**: example（ll = ls -l）

#### Step 2: エイリアス構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | alias.rs | `crates/nu-protocol/src/alias.rs` | Alias構造体の定義 |

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

```
alias ll = ls -l
    │
    └─ パース時
           └─ parse_alias
                  ├─ エイリアス名解析
                  ├─ エイリアス先解析
                  └─ DeclId登録

ll -a
    │
    └─ エイリアス解決
           └─ ls -l -a として実行
```

### データフロー図

```
[定義]                  [登録]                       [使用]

alias ll = ls -l
    │
    ▼
パース ───────────▶ Alias構造体 ────────────▶ EngineState
                                                │
                                                ▼
ll -a ────────────▶ エイリアス解決 ─────────▶ ls -l -a 実行
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| alias.rs | `crates/nu-cmd-lang/src/core_commands/alias.rs` | ソース | aliasコマンド |
| export_alias.rs | `crates/nu-cmd-lang/src/core_commands/export_alias.rs` | ソース | export aliasコマンド |
| alias.rs | `crates/nu-protocol/src/alias.rs` | ソース | Alias構造体定義 |
| parse_keywords.rs | `crates/nu-parser/src/parse_keywords.rs` | ソース | aliasのパース処理 |
