# Nimコンパイラ 業務運用マニュアル

## 目次

**【基本操作】**
1. [システム概要](#1-システム概要)
2. [インストール・環境設定](#2-インストール環境設定)
3. [ヘルプ・バージョン確認](#3-ヘルプバージョン確認)

**【業務フローに沿った機能】**
4. [【STEP1】コード編集・IDE連携（nimsuggest）](#4-step1コード編集ide連携nimsuggest)
5. [【STEP2】コードフォーマット（nimpretty）](#5-step2コードフォーマットnimpretty)
6. [【STEP3】コンパイル・ビルド（nim c/cpp/js）](#6-step3コンパイルビルドnim-ccppjs)
7. [【STEP4-5】実行・テスト（nim r/testament）](#7-step4-5実行テストnim-rtestament)

**【サポート機能】**
8. [検索ツール（nimgrep）](#8-検索ツールnimgrep)
9. [ドキュメント生成（nim doc）](#9-ドキュメント生成nim-doc)
10. [静的解析（DrNim）](#10-静的解析drnim)

**【運用ガイド】**
11. [日常開発の流れ](#11-日常開発の流れ)
12. [よくある質問と対処法](#12-よくある質問と対処法)
13. [トラブルシューティング](#13-トラブルシューティング)

---

## 1. システム概要

### 1.1 Nimコンパイラとは

Nimは、効率性、表現力、優雅さに焦点を当てた静的型付けコンパイル型システムプログラミング言語です。Nimコンパイラはこの言語で書かれたソースコードを、C、C++、JavaScript、Objective-Cなどの様々なバックエンドにコンパイルします。

本システムは、コンパイラ本体と各種開発支援ツールで構成されており、Nim言語を使用するソフトウェア開発者が日常的に使用するツールチェーンを提供します。

### 1.2 本システムで行う主要業務

本システムは、主に以下の業務を支援します：

| 業務カテゴリ | 具体的な業務内容 |
|------------|----------------|
| **コード編集支援** | コード補完、定義ジャンプ、参照検索、構文ハイライト |
| **コンパイル・ビルド** | C/C++/JavaScript/Objective-Cへのコンパイル、実行ファイル生成 |
| **コード品質** | コードフォーマット、静的解析、型チェック |
| **テスト** | テスト実行、結果検証、HTMLレポート生成 |
| **ドキュメント** | APIドキュメント自動生成 |
| **保守・開発** | コンパイラのブートストラップ、ツールビルド、配布パッケージ作成 |

### 1.3 業務フロー概要

本システムにおける開発業務は、以下の流れで進行します：

```
+-----------------------------------------------------------------------+
|                        開発ワークフロー                                  |
+-----------------------------------------------------------------------+
|                                                                       |
|  【STEP 1】コード編集・IDE連携                                          |
|      nimsuggestによるコード補完、定義ジャンプ、参照検索                    |
|      |                                                                |
|  【STEP 2】コードフォーマット                                            |
|      nimprettyによるコードスタイル統一                                    |
|      |                                                                |
|  【STEP 3】コンパイル・ビルド                                            |
|      nim c/cpp/jsによるコード生成・バイナリ作成                           |
|      |                                                                |
|  【STEP 4】実行・動作確認                                                |
|      nim rによるコンパイル＆即時実行                                       |
|      |                                                                |
|  【STEP 5】テスト・品質検証                                              |
|      testamentによるテスト実行・結果検証                                  |
|                                                                       |
+-----------------------------------------------------------------------+
```

**役割別の業務概要：**

| 役割 | 主な業務 |
|------|---------|
| **アプリケーション開発者** | コード編集、コンパイル、実行、テスト、ドキュメント生成 |
| **コンパイラ開発者** | コンパイラのブートストラップ、テストスイート実行、配布パッケージ作成 |

### 1.4 主な機能

| 機能 | 説明 | 業務フローでの位置 |
|------|------|------------------|
| nim c/cpp/js | 各種バックエンドへのコンパイル | STEP 3 |
| nim r | コンパイル＆即時実行 | STEP 4 |
| nimsuggest | IDE向けコード補完・定義ジャンプ | STEP 1 |
| nimpretty | コード自動整形 | STEP 2 |
| testament | テストフレームワーク | STEP 5 |
| nim doc | ドキュメント生成 | 随時利用 |
| nimgrep | コード検索・置換 | 随時利用 |
| koch | ビルド・保守ツール | コンパイラ開発時 |

### 1.5 ユーザー種別

システムには以下のユーザー種別があります：

| ユーザー種別 | 説明 |
|-------------|------|
| アプリケーション開発者 | Nim言語を使用してアプリケーションを開発するユーザー |
| コンパイラ開発者 | Nimコンパイラ自体の開発・保守を行うユーザー |
| ライブラリ開発者 | Nimのライブラリ・パッケージを開発するユーザー |

### 1.6 対応プラットフォーム

**対応OS：**
- Windows（MinGW/MSVC）
- Linux（各種ディストリビューション）
- macOS
- FreeBSD、OpenBSD、NetBSD
- ARM、RISC-V等の組み込みプラットフォーム

**必要なCコンパイラ：**
- GCC 6.x以降（推奨）
- Clang
- Visual C++（Windows）
- MinGW（Windows）

---

## 2. インストール・環境設定

### 2.1 ソースコードからのビルド

1. ソースコードを取得します
   ```bash
   git clone https://github.com/nim-lang/Nim.git
   cd Nim
   ```

2. ビルドスクリプトを実行します

   **Linux/macOS:**
   ```bash
   ./build_all.sh
   ```

   **Windows:**
   ```bash
   build_all.bat
   ```

3. PATHに追加します
   ```bash
   export PATH=$PATH:/path/to/Nim/bin
   ```

### 2.2 安定版のインストール

一般ユーザーには安定版のインストールを推奨します。公式サイトからダウンロードしてください：
https://nim-lang.org/install.html

### 2.3 環境確認

インストール後、以下のコマンドで動作を確認します：

```bash
nim --version
```

正常にインストールされている場合、バージョン情報が表示されます。

---

## 3. ヘルプ・バージョン確認

### 3.1 nimコマンドのヘルプ

利用可能なコマンドとオプションを確認します：

```bash
nim --help
```

詳細なオプション一覧を表示するには：

```bash
nim --fullhelp
```

### 3.2 kochコマンドのヘルプ

ビルドツールkochのヘルプを確認します：

```bash
./koch --help
```

### 3.3 各ツールのバージョン確認

```bash
nim --version
./koch --version
```

---

## 4. 【STEP1】コード編集・IDE連携（nimsuggest）

> **業務フローでの位置**: 開発者がコードを編集する際に、IDE/エディタと連携してコード補完、定義ジャンプ、参照検索などのインテリジェント機能を提供するステップです。

### 4.1 nimsuggestの概要

nimsuggestは、IDE（統合開発環境）やエディタにNim言語のインテリジェント機能を提供するツールです。VS Code、Emacs、Vim、Sublime Textなど各種エディタから利用できます。

### 4.2 nimsuggestの起動

```bash
nimsuggest --port:6000 project.nim
```

**主なオプション：**

| オプション | 説明 |
|-----------|------|
| --port:PORT | TCPポート番号（デフォルト: 6000） |
| --address:HOST | バインドアドレス（デフォルト: 127.0.0.1） |
| --stdin | 標準入出力モード |
| --epc | Emacs EPCモード |
| --autobind | 自動的に空きポートにバインド |

### 4.3 利用可能なコマンド

| コマンド | 機能 | 説明 |
|---------|------|------|
| sug | コード補完 | カーソル位置で利用可能な補完候補を提供 |
| def | 定義ジャンプ | シンボルの定義位置を検索 |
| use | 参照検索 | シンボルの使用箇所を検索 |
| con | コンテキスト | カーソル位置のコンテキスト情報を取得 |
| highlight | 構文ハイライト | 構文ハイライト情報を提供 |
| outline | アウトライン | ファイルのアウトライン情報を取得 |
| chk | 構文チェック | 構文・型チェックを実行 |

### 4.4 エディタ連携

多くのエディタではプラグインを通じてnimsuggestと連携できます：

- **VS Code**: nim拡張機能
- **Emacs**: nim-mode
- **Vim/Neovim**: nim.vim
- **Sublime Text**: NimLime

---

## 5. 【STEP2】コードフォーマット（nimpretty）

> **業務フローでの位置**: コードを編集した後、チームのコードスタイルに統一するためにコードを自動整形するステップです。

### 5.1 nimprettyの概要

nimprettyは、Nimソースコードを自動的に整形（フォーマット）するCLIツールです。コードスタイルを統一し、可読性を向上させます。

### 5.2 基本的な使い方

単一ファイルを整形する：
```bash
nimpretty file.nim
```

整形結果を別ファイルに出力する：
```bash
nimpretty --out:formatted.nim file.nim
```

複数ファイルをディレクトリに出力する：
```bash
nimpretty --outDir:formatted/ *.nim
```

### 5.3 オプション

| オプション | 説明 | デフォルト |
|-----------|------|----------|
| --out:FILE | 出力ファイルパス | 入力ファイルを上書き |
| --outDir:DIR | 出力ディレクトリ | 入力ファイルを上書き |
| --indent:N | インデント幅（スペース数） | 自動検出 |
| --maxLineLen:N | 最大行長 | 80 |
| --stdin | 標準入力から読み込み | - |

### 5.4 使用例

インデントを2スペースに設定して整形：
```bash
nimpretty --indent:2 --maxLineLen:100 mycode.nim
```

---

## 6. 【STEP3】コンパイル・ビルド（nim c/cpp/js）

> **業務フローでの位置**: 編集・整形したコードをコンパイルして、実行可能なバイナリやJavaScriptコードを生成するステップです。

### 6.1 Cバックエンドでのコンパイル（nim c）

Nimで最も一般的なコンパイル方法です。NimコードをC言語にコンパイルし、外部Cコンパイラでバイナリを生成します。

```bash
nim c hello.nim
```

**リリースビルド：**
```bash
nim c -d:release hello.nim
```

**速度最適化ビルド：**
```bash
nim c --opt:speed -d:release hello.nim
```

**最大最適化（危険）：**
```bash
nim c -d:danger hello.nim
```

### 6.2 C++バックエンドでのコンパイル（nim cpp）

C++ライブラリとの連携が必要な場合に使用します：

```bash
nim cpp hello.nim
```

### 6.3 JavaScriptへのコンパイル（nim js）

ブラウザやNode.js向けのJavaScriptコードを生成します：

```bash
nim js hello.nim
```

### 6.4 主要なコンパイルオプション

| オプション | 説明 |
|-----------|------|
| -d:release | リリースビルド（最適化有効） |
| -d:danger | 最大最適化（境界チェック無効） |
| --opt:speed | 速度最適化 |
| --opt:size | サイズ最適化 |
| -o:FILE | 出力ファイル名指定 |
| --cc:COMPILER | Cコンパイラ指定（gcc, clang等） |
| --mm:MODE | メモリ管理方式（arc, orc, refc） |
| -r, --run | コンパイル後に実行 |

### 6.5 構文チェックのみ（nim check）

コンパイルせずに構文・型チェックのみ実行：

```bash
nim check hello.nim
```

---

## 7. 【STEP4-5】実行・テスト（nim r/testament）

> **業務フローでの位置**: コンパイルしたプログラムを実行して動作確認を行い、テストスイートで品質を検証するステップです。

### 7.1 コンパイル＆実行（nim r）

コンパイルと実行を一度のコマンドで行います：

```bash
nim r hello.nim
```

**引数を渡して実行：**
```bash
nim r hello.nim -- arg1 arg2
```

**リリースビルドで実行：**
```bash
nim r -d:release hello.nim
```

**JavaScriptモードで実行（Node.js使用）：**
```bash
nim r --backend:js hello.nim
```

### 7.2 テストの実行（testament）

testamentはNimのテストフレームワークです。

**単一テストの実行：**
```bash
testament r tests/mytest.nim
```

**カテゴリ内の全テストを実行：**
```bash
testament cat category_name
```

**全テストの実行：**
```bash
testament all
```

**パターンマッチでテスト実行：**
```bash
testament pattern "test_*.nim"
```

### 7.3 testamentのオプション

| オプション | 説明 |
|-----------|------|
| --print | 結果をコンソールに出力 |
| --verbose | コンパイル・実行コマンドを表示 |
| --simulate | テストを実行せずにリストを表示 |
| --failing | 失敗/スキップのテストのみ表示 |
| --targets:TYPE | 対象ターゲット（c, cpp, js, objc） |

### 7.4 HTMLレポートの生成

テスト結果をHTMLレポートとして出力：

```bash
testament html
```

---

## 8. 検索ツール（nimgrep）

nimgrepは、Nim向けの高機能grep検索・置換ツールです。PEGや正規表現による検索に対応しています。

### 8.1 基本的な使い方

```bash
nimgrep "pattern" file.nim
```

### 8.2 ディレクトリ内の再帰検索

```bash
nimgrep -r "pattern" ./src
```

### 8.3 置換

```bash
nimgrep --replace:"newtext" "oldtext" file.nim
```

---

## 9. ドキュメント生成（nim doc）

### 9.1 HTMLドキュメントの生成

ソースコードからHTMLドキュメントを自動生成します：

```bash
nim doc mymodule.nim
```

**全モジュールのドキュメント生成（プロジェクト全体）：**

```bash
nim doc --project myproject.nim
```

### 9.2 ドキュメントコメントの書き方

Nimでは`##`で始まるコメントがドキュメントコメントとして扱われます：

```nim
## このプロシージャは2つの数値を加算します。
##
## 例:
##   ```nim
##   assert add(1, 2) == 3
##   ```
proc add(a, b: int): int =
  result = a + b
```

---

## 10. 静的解析（DrNim）

DrNimは、Z3ソルバーを使用した静的検証ツールです。プログラムの正当性を形式的に検証できます。

### 10.1 基本的な使い方

```bash
drnim mycode.nim
```

### 10.2 用途

- 数学的な証明
- 境界条件の検証
- 不変条件のチェック

---

## 11. 日常開発の流れ

本セクションでは、業務フローに沿った日常開発の流れを説明します。

```
開発ワークフロー概要（再掲）
------------------------------------------------------------
【STEP 1】コード編集・IDE連携 -> 4章参照
    |
【STEP 2】コードフォーマット -> 5章参照
    |
【STEP 3】コンパイル・ビルド -> 6章参照
    |
【STEP 4】実行・動作確認 -> 7章参照
    |
【STEP 5】テスト・品質検証 -> 7章参照
------------------------------------------------------------
```

### 11.1 【開発者】STEP1-2: コード編集とフォーマット

1. エディタでNimソースファイルを開きます
2. nimsuggestと連携したエディタであれば、コード補完やエラー表示が利用できます
3. 編集完了後、nimprettyでコードを整形します
   ```bash
   nimpretty mycode.nim
   ```

### 11.2 【開発者】STEP3: コンパイル

コードを編集したら、コンパイルしてエラーがないか確認します：

```bash
# 構文チェックのみ（高速）
nim check mycode.nim

# コンパイル
nim c mycode.nim
```

### 11.3 【開発者】STEP4: 実行・動作確認

コンパイル＆即時実行で動作を確認します：

```bash
nim r mycode.nim
```

### 11.4 【開発者】STEP5: テスト実行

テストを作成し、testamentで実行します：

```bash
testament r tests/test_mycode.nim
```

---

## 12. よくある質問と対処法

### 12.1 コンパイルに関するQ&A

**Q: コンパイルが遅いです**

A: 以下を試してください：
- `nim check`で構文チェックのみ実行（コンパイルより高速）
- 増分コンパイルを活用（nimcacheが保持されていれば自動）
- `-d:release`は最終ビルド時のみ使用

**Q: Cコンパイラが見つかりません**

A: GCCまたはClangがインストールされていることを確認してください：
- Linux: `sudo apt install build-essential`
- macOS: `xcode-select --install`
- Windows: MinGWをインストール

### 12.2 実行に関するQ&A

**Q: nim rで実行ファイルがどこに生成されますか？**

A: `nimcache`ディレクトリに生成されます。プロジェクトディレクトリは汚れません。

**Q: JavaScriptへコンパイルしたコードをどう実行しますか？**

A: `nim r --backend:js hello.nim`でNode.jsを使用して実行できます。

---

## 13. トラブルシューティング

### 13.1 エラーメッセージと対処法

| エラーメッセージ | 原因 | 対処法 |
|----------------|------|--------|
| "cannot open file: $1" | ソースファイルが見つからない | ファイルパスを確認 |
| "undeclared identifier: '$1'" | 未定義のシンボルを参照 | importの追加、スペルチェック |
| "type mismatch" | 型が一致しない | 型を確認して修正 |
| "execution of external compiler failed" | Cコンパイラが失敗 | Cコンパイラのインストール確認 |
| "invalid command line option" | 不正なオプション | `nim --help`で正しいオプションを確認 |

### 13.2 よくあるトラブルと解決方法

**問題: nimsuggestが応答しない**

解決方法：
1. nimsuggestプロセスを再起動
2. プロジェクトファイルのパスを確認
3. `--debug`オプションでログを確認

**問題: コンパイルが途中で停止する**

解決方法：
1. メモリ使用量を確認（大規模プロジェクトでは増加）
2. `--hints:off`でヒントメッセージを抑制
3. `--gc:orc`でメモリ管理方式を変更

**問題: testamentでテストが失敗する**

解決方法：
1. `--verbose`オプションで詳細を確認
2. テストファイル内の期待値を確認
3. `--print`で出力を確認

### 13.3 サポートへの連絡方法

- **公式ドキュメント**: https://nim-lang.org/docs/
- **GitHub Issues**: https://github.com/nim-lang/Nim/issues
- **Discord**: Nimコミュニティに参加
- **Forum**: https://forum.nim-lang.org/

---

## 改訂履歴

| 版数 | 改訂日 | 改訂内容 |
|-----|--------|---------|
| 1.0 | 2026-02-17 | 初版作成 |

---

*本マニュアルは、Nimコンパイラプロジェクトのエンドユーザー向け業務運用マニュアルです。*
*システムの更新により、画面や操作方法が変更される場合があります。*
