# 画面設計書 36-niminst scripts

## 概要

本ドキュメントは、Nimコンパイラプロジェクトのインストーラ・パッケージ生成ツール「niminst」における「scripts」サブコマンドの画面設計書である。niminst scriptsはインストール/アンインストール用のシェルスクリプトを生成する機能を提供する。

### 本画面の処理概要

niminst scriptsコマンドは、Unix/Linux環境向けのインストールスクリプト（install.sh）およびアンインストールスクリプト（deinstall.sh）を生成する機能を提供する。

**業務上の目的・背景**：Nimコンパイラをソースからビルドしてインストールする場合、適切なディレクトリ構成でファイルを配置する必要がある。install.shは設定ファイル、バイナリ、ライブラリ、ドキュメントなどを標準的なUnixディレクトリ構造（/usr/local/bin、/etc、/usr/share/doc等）に配置する。deinstall.shはインストールされたファイルを削除する。

**画面へのアクセス方法**：コマンドラインから`niminst scripts <ini-file>`の形式で実行する。INIファイルの[Unix]セクションでInstallScript=yesおよびUninstallScript=yesを設定する必要がある。

**主要な操作・処理内容**：
1. INIファイルから設定を読み込み
2. [Unix]セクションのInstallScript設定を確認
3. trueの場合、install.nimfテンプレートからinstall.shを生成
4. UninstallScript設定がtrueの場合、deinstall.nimfテンプレートからdeinstall.shを生成
5. 生成したスクリプトに実行権限を付与

**画面遷移**：
- 遷移元：niminstメイン画面
- 遷移先：なし（スクリプト生成完了後に終了）

**権限による表示制御**：特になし。CLIツールとして実行権限があれば使用可能。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 30 | Niminst | 主機能 | install.sh等のインストールスクリプト生成 |

## 画面種別

CLIコマンド実行画面（スクリプト生成）

## URL/ルーティング

```
niminst scripts <ini-file> [options]
```

## 入出力項目

### 入力項目

| 項目名 | 型 | 必須 | 説明 | 例 |
|--------|-----|------|------|-----|
| ini-file | path | Yes | 設定ファイルパス | nim.ini |
| -o, --output | path | No | 出力ディレクトリ | build |

### INI設定項目（[Unix]セクション）

| キー | 型 | 説明 | 例 |
|------|-----|------|-----|
| InstallScript | yes/no | install.sh生成フラグ | yes |
| UninstallScript | yes/no | deinstall.sh生成フラグ | yes |
| files | string | Unix専用ファイル | lib/*.nim |

### 出力項目

| 項目名 | 型 | 説明 |
|--------|-----|------|
| install.sh | file | インストールスクリプト |
| deinstall.sh | file | アンインストールスクリプト |

## 表示項目

コマンド実行時は特に表示なし（エラー時のみメッセージ表示）。

## イベント仕様

### 1-スクリプト生成

scriptsコマンドが実行されると以下の処理が行われる：

1. main()からactionScriptsを検出
2. writeInstallScripts()関数を呼び出し
3. c.installScriptがtrueの場合：
   a. generateInstallScript()でスクリプト内容を生成
   b. install.shとして出力
   c. 実行権限を付与（fpUserExec, fpGroupExec, fpOthersExec）
4. c.uninstallScriptがtrueの場合：
   a. generateDeinstallScript()でスクリプト内容を生成
   b. deinstall.shとして出力
   c. 実行権限を付与

### 2-install.sh生成内容

install.shは以下の処理を行うスクリプトを生成：

1. インストール先ディレクトリの作成
2. バイナリファイルの/usr/local/bin等へのコピー
3. 設定ファイルの/etc等へのコピー
4. ライブラリファイルの/usr/local/lib等へのコピー
5. ドキュメントファイルの/usr/share/doc等へのコピー

### 3-deinstall.sh生成内容

deinstall.shは以下の処理を行うスクリプトを生成：

1. install.shでインストールしたファイルの削除
2. 空になったディレクトリの削除

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

本ツールはファイルシステム操作のみを行い、データベースは使用しない。

| 操作（イベント） | 対象 | 操作種別 | 概要 |
|----------------|------|---------|------|
| スクリプト生成 | install.sh | 生成 | インストールスクリプト |
| スクリプト生成 | deinstall.sh | 生成 | アンインストールスクリプト |

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|----------|
| （なし） | - | - | 正常時は出力なし |

## 例外処理

| 例外条件 | 処理内容 | エラーメッセージ |
|----------|----------|-----------------|
| ファイル書き込み失敗 | OS例外 | writeFileのエラー |

## 備考

- install.shは引数でインストール先ディレクトリを指定可能（デフォルト: /usr/local）
- 生成されるスクリプトはBourne Shell互換
- unixDirVars配列で標準ディレクトリ変数を定義（$configdir, $datadir, $docdir, $libdir）

---

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

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

### 推奨読解順序

#### Step 1: スクリプト生成関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | niminst.nim | `tools/niminst/niminst.nim` | writeInstallScripts()関数（499-505行目） |

**主要処理フロー**:
- **500行目**: c.installScriptのチェック
- **501行目**: generateInstallScript()呼び出し
- **502行目**: 実行権限付与
- **503-505行目**: deinstall.shの同様の処理

#### Step 2: テンプレートを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | install.nimf | `tools/niminst/install.nimf` | インストールスクリプトテンプレート |
| 2-2 | deinstall.nimf | `tools/niminst/deinstall.nimf` | アンインストールスクリプトテンプレート |

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

```
main()
    │
    └─ [actionScripts] writeInstallScripts()
            │
            ├─ [installScript=true]
            │       │
            │       ├─ generateInstallScript()
            │       │
            │       ├─ writeFile()
            │       │
            │       └─ inclFilePermissions()
            │
            └─ [uninstallScript=true]
                    │
                    ├─ generateDeinstallScript()
                    │
                    ├─ writeFile()
                    │
                    └─ inclFilePermissions()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| niminst.nim | `tools/niminst/niminst.nim` | ソース | writeInstallScripts()実装 |
| install.nimf | `tools/niminst/install.nimf` | テンプレート | install.shテンプレート |
| deinstall.nimf | `tools/niminst/deinstall.nimf` | テンプレート | deinstall.shテンプレート |
