# clojure-lsp 業務運用マニュアル

## 目次

**【基本操作】**
1. [システム概要](#1-システム概要)
2. [インストール・起動手順](#2-インストール起動手順)
3. [エディタとの接続](#3-エディタとの接続)

**【開発フローに沿った機能】**
4. [【STEP1】コード編集支援（補完・ナビゲーション）](#4-step1コード編集支援補完ナビゲーション)
5. [【STEP2-3】リファクタリング機能（コード変換・整形）](#5-step2-3リファクタリング機能コード変換整形)
6. [【STEP3-4】コード品質管理（診断・検証）](#6-step3-4コード品質管理診断検証)
7. [【STEP4-5】CLIコマンド（バッチ処理・CI/CD）](#7-step4-5cliコマンドバッチ処理cicd)

**【サポート機能】**
8. [設定カスタマイズ](#8-設定カスタマイズ)
9. [Java連携機能](#9-java連携機能)
10. [デバッグ・トレーシング](#10-デバッグトレーシング)

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

---

## 1. システム概要

### 1.1 clojure-lspとは

clojure-lspは、Clojure/ClojureScript向けの**Language Server Protocol (LSP) サーバー**です。エディタ上でのコード補完、定義へのジャンプ、リファクタリングなどの高度な編集機能を提供し、Cursiveのような静的解析アプローチでコードを分析します。

**主な特徴：**
- エディタに依存しない統一されたClojure開発体験を提供
- VSCode、Emacs、Vim、IntelliJなど多様なエディタに対応
- LSPプロトコルを通じてエディタと通信
- CLIコマンドとしてもCI/CDで利用可能

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

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

| 業務カテゴリ | 具体的な作業内容 |
|------------|----------------|
| **コード編集支援** | コード補完、定義へのジャンプ、参照検索、ホバー情報表示 |
| **リファクタリング** | シンボルのリネーム、名前空間整理、スレッドマクロ変換 |
| **コード品質管理** | 静的解析（clj-kondo統合）、未使用コード検出、診断結果表示 |
| **フォーマット** | コード整形（cljfmt統合）、名前空間のソート |
| **バッチ処理** | CI/CDでの一括フォーマット、診断チェック |

### 1.3 開発フロー概要

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

```
┌─────────────────────────────────────────────────────────────────┐
│                        開発フロー                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  【STEP 1】コードを編集（補完・ナビゲーションを活用）            │
│      ↓                                                          │
│  【STEP 2】コードをリファクタリング（変換・整形）                │
│      ↓                                                          │
│  【STEP 3】コード品質を確認（診断・未使用コード検出）            │
│      ↓                                                          │
│  【STEP 4】名前空間を整理（clean-ns・フォーマット）              │
│      ↓                                                          │
│  【STEP 5】コミット前チェック（CLIでバッチ処理）                 │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
```

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

| 役割 | 主な作業 |
|------|---------|
| **開発者（エディタ利用）** | コード補完、定義ジャンプ、リファクタリング、診断確認 |
| **開発者（CLI利用）** | バッチフォーマット、診断チェック、リネーム、参照検索 |
| **CI/CDパイプライン** | 自動フォーマットチェック、診断レポート生成 |

### 1.4 主な機能

| 機能 | 説明 | 開発フローでの位置 |
|------|------|------------------|
| コード補完 | 変数、関数、キーワード、ライブラリ名の補完候補を表示 | STEP 1 |
| 定義へジャンプ | シンボルの定義位置に移動 | STEP 1 |
| 参照検索 | シンボルの使用箇所を一覧表示 | STEP 1 |
| ホバー情報 | カーソル位置のシンボルの情報を表示 | STEP 1 |
| リネーム | シンボル名の一括変更 | STEP 2 |
| 名前空間整理 | 未使用require/importの削除、ソート | STEP 4 |
| フォーマット | コードの整形（cljfmt統合） | STEP 4 |
| 診断 | clj-kondoによる静的解析結果表示 | STEP 3 |
| CLI診断 | バッチ処理での診断チェック | STEP 5 |
| CLIフォーマット | バッチ処理でのフォーマット | STEP 5 |

### 1.5 ユーザー種別

| ユーザー種別 | 説明 |
|-------------|------|
| エディタユーザー | VSCode、Emacs、Vim等でclojure-lspを利用する開発者 |
| CLIユーザー | コマンドラインからclojure-lspを利用する開発者 |
| APIユーザー | Clojureプログラムからclojure-lspのAPIを利用する開発者 |

### 1.6 対応エディタ

以下のエディタでclojure-lspを利用できます：

| エディタ | LSPクライアント |
|---------|----------------|
| VSCode | Calva |
| Emacs | lsp-mode, eglot |
| Vim/Neovim | coc.nvim, nvim-lspconfig |
| IntelliJ IDEA | LSP Support Plugin |
| Sublime Text | LSP |
| Atom | atom-ide-ui |

---

## 2. インストール・起動手順

### 2.1 インストール方法

clojure-lspのインストール方法は複数あります。お使いの環境に合わせて選択してください。

**Homebrew（macOS/Linux）：**

```bash
brew install clojure-lsp/brew/clojure-lsp-native
```

**インストールスクリプト（Linux/macOS）：**

```bash
sudo bash < <(curl -s https://raw.githubusercontent.com/clojure-lsp/clojure-lsp/master/install)
```

**Nix：**

```bash
nix run github:clojure-lsp/clojure-lsp
```

**Arch Linux：**

```bash
yay -S clojure-lsp-bin
```

**Windows (Scoop)：**

```bash
scoop install clojure-lsp
```

**手動インストール（推奨：ネイティブバイナリ）：**

1. [GitHub Releases](https://github.com/clojure-lsp/clojure-lsp/releases)から`clojure-lsp-native-<os>-<arch>.zip`をダウンロード
2. 展開してPATHの通ったディレクトリに配置

### 2.2 バージョン確認

インストール後、以下のコマンドでバージョンを確認できます：

```bash
clojure-lsp --version
```

### 2.3 LSPサーバーの起動

通常、エディタがclojure-lspを自動的に起動します。手動で起動する場合は以下のコマンドを使用します：

```bash
clojure-lsp listen
```

**注意点：**
- 標準入出力（stdin/stdout）を通じてLSPプロトコルで通信します
- エディタが自動起動するため、手動起動は通常不要です

---

## 3. エディタとの接続

### 3.1 VSCode（Calva）での設定

1. VSCodeを開きます
2. 拡張機能から「Calva」を検索してインストールします
3. Calvaが自動的にclojure-lspを使用します

**カスタム設定（settings.json）：**

```json
{
  "calva.referencesCodeLens.enabled": true,
  "calva.linting.enabled": true
}
```

### 3.2 Emacs（lsp-mode）での設定

**init.el または .emacs の設定例：**

```elisp
(require 'lsp-mode)
(add-hook 'clojure-mode-hook #'lsp)
(add-hook 'clojurescript-mode-hook #'lsp)
```

### 3.3 Vim/Neovim（nvim-lspconfig）での設定

**init.lua の設定例：**

```lua
require'lspconfig'.clojure_lsp.setup{}
```

### 3.4 接続確認

エディタでClojureファイルを開き、以下が動作することを確認します：

1. **補完**: `(def ` と入力して補完候補が表示される
2. **定義ジャンプ**: 関数名にカーソルを置いて「定義へジャンプ」コマンドを実行
3. **診断**: ファイルを保存してエラー/警告が表示される

---

## 4. 【STEP1】コード編集支援（補完・ナビゲーション）

> **開発フローでの位置**: コードを編集する際に、補完やナビゲーション機能を活用して効率的に開発を進めるステップです。

### 4.1 コード補完を使用する

コード補完は、入力中に自動的に候補が表示されます。

**補完の種類：**

| 種類 | 説明 | 例 |
|------|------|-----|
| ローカル変数 | 同じスコープ内の変数 | let束縛、関数引数 |
| 名前空間シンボル | requireした名前空間の関数 | `str/`でstring関数を補完 |
| コアシンボル | clojure.coreの関数 | `map`, `filter`, `reduce` |
| キーワード | 使用中のキーワード | `:name`, `:id` |
| Java クラス | インポート可能なJavaクラス | `java.util.Date` |

**操作手順：**

1. コードを入力し始めます
2. 補完候補が自動的に表示されます（または`Ctrl+Space`で明示的に呼び出し）
3. 矢印キーで候補を選択し、`Enter`または`Tab`で確定します

**補完例：**

```clojure
;; 名前空間エイリアス補完
(require '[clojure.string :as str])
(str/  ; <- ここで str/ の関数一覧が補完される

;; キーワード補完
{:name "John" :age 30}
(:  ; <- 使用済みキーワード :name, :age が補完候補に
```

### 4.2 定義へジャンプする

シンボルの定義位置に移動できます。

**操作手順：**

1. 定義を確認したいシンボルにカーソルを置きます
2. 「定義へ移動」コマンドを実行します
   - VSCode: `F12` または `Ctrl+クリック`
   - Emacs: `M-.`
   - Vim: `gd`
3. 定義位置にジャンプします

**対応するシンボル：**
- 関数、変数（def, defn等）
- 名前空間
- キーワード
- Javaクラス・メソッド

### 4.3 参照を検索する

シンボルが使用されている箇所を一覧表示できます。

**操作手順：**

1. 検索したいシンボルにカーソルを置きます
2. 「参照を検索」コマンドを実行します
   - VSCode: `Shift+F12`
   - Emacs: `M-?`
   - Vim: `gr`
3. 使用箇所の一覧が表示されます
4. 一覧から選択して該当箇所にジャンプします

### 4.4 ホバー情報を確認する

カーソル位置のシンボルについての情報を表示できます。

**操作手順：**

1. 情報を確認したいシンボルにカーソルを置きます
2. ホバー情報が自動的に表示されます（マウスホバーまたはコマンド実行）
   - VSCode: マウスホバー
   - Emacs: `lsp-ui-doc-show`
   - Vim: `K`

**表示される情報：**
- 関数のシグネチャ（引数リスト）
- docstring（ドキュメント文字列）
- 定義元の名前空間
- ClojureDocsへのリンク（該当する場合）

---

## 5. 【STEP2-3】リファクタリング機能（コード変換・整形）

> **開発フローでの位置**: コードの構造を改善し、可読性を向上させるステップです。

### 5.1 シンボルをリネームする

関数名や変数名を一括で変更できます。

**操作手順：**

1. リネームしたいシンボルにカーソルを置きます
2. 「名前変更」コマンドを実行します
   - VSCode: `F2`
   - Emacs: `lsp-rename`
   - Vim: `<leader>rn`
3. 新しい名前を入力します
4. `Enter`で確定します

**注意点：**
- プロジェクト全体で使用箇所が更新されます
- リネーム前にgitでコミットしておくことを推奨します

### 5.2 スレッドマクロを変換する

入れ子になった関数呼び出しをスレッドマクロに変換できます。

**操作手順（Thread First）：**

1. 変換したい式にカーソルを置きます
2. 「Thread First All」コードアクションを実行します

**変換例：**

```clojure
;; 変換前
(assoc (dissoc (update m :a inc) :b) :c 3)

;; 変換後（-> を使用）
(-> m
    (update :a inc)
    (dissoc :b)
    (assoc :c 3))
```

**操作手順（Thread Last）：**

1. 変換したい式にカーソルを置きます
2. 「Thread Last All」コードアクションを実行します

**変換例：**

```clojure
;; 変換前
(map inc (filter even? (range 10)))

;; 変換後（->> を使用）
(->> (range 10)
     (filter even?)
     (map inc))
```

### 5.3 コレクション型を変換する

ベクタ、マップ、セットなどのコレクション型を相互に変換できます。

**操作手順：**

1. 変換したいコレクションにカーソルを置きます
2. 「Change coll to ...」コードアクションを実行します
3. 変換先の型を選択します

**変換例：**

```clojure
;; ベクタからセットへ
[1 2 3] -> #{1 2 3}

;; リストからベクタへ
'(1 2 3) -> [1 2 3]
```

### 5.4 let束縛を操作する

let式の束縛を追加・移動できます。

**Introduce Let：**

1. let束縛に追加したい式を選択します
2. 「Introduce Let」コードアクションを実行します
3. 変数名を入力します

**Move to Let：**

1. 既存のlet内で束縛に追加したい式を選択します
2. 「Move to Let」コードアクションを実行します
3. 変数名を入力します

---

## 6. 【STEP3-4】コード品質管理（診断・検証）

> **開発フローでの位置**: コードの品質を確認し、問題を早期に発見・修正するステップです。

### 6.1 診断結果を確認する

clj-kondoによる静的解析結果がエディタに表示されます。

**診断の種類：**

| 重要度 | 説明 | 例 |
|--------|------|-----|
| エラー | 構文エラー、重大な問題 | 括弧の不一致、未定義シンボル |
| 警告 | 潜在的な問題 | 未使用の変数、非推奨のAPI使用 |
| 情報 | 改善の提案 | 未使用のパブリック関数 |
| ヒント | スタイルの提案 | ネーミング規約 |

**操作手順：**

1. ファイルを開くと自動的に診断が実行されます
2. 問題箇所に下線や波線が表示されます
3. カーソルを置くと詳細メッセージが表示されます
4. 問題パネル（VSCode）やエラーリスト（Emacs）で一覧を確認できます

### 6.2 名前空間を整理する（Clean NS）

未使用のrequire/importを削除し、ソートします。

**操作手順：**

1. 名前空間宣言（ns形式）にカーソルを置きます
2. 「Clean NS」コードアクションを実行します
   - VSCode: `Ctrl+.`でコードアクションメニューを開き選択
   - Emacs: `M-x lsp-clojure-clean-ns`

**実行される処理：**
- 未使用のエイリアス（:as）を持つrequireを削除
- 未使用のrefer（:refer [...]）を削除
- 未使用のimportを削除
- require/import内のエントリをアルファベット順にソート

**整理例：**

```clojure
;; 整理前
(ns my-app.core
  (:require [clojure.string :as str]
            [clojure.set :as set]    ; 未使用
            [clojure.edn :as edn])
  (:import [java.util Date UUID]))  ; Date は未使用

;; 整理後
(ns my-app.core
  (:require [clojure.edn :as edn]
            [clojure.string :as str])
  (:import [java.util UUID]))
```

### 6.3 コードをフォーマットする

cljfmtを使用してコードを整形します。

**操作手順（ファイル全体）：**

1. ファイルを開きます
2. 「フォーマット」コマンドを実行します
   - VSCode: `Shift+Alt+F`
   - Emacs: `M-x lsp-format-buffer`
   - Vim: `gq`

**操作手順（選択範囲のみ）：**

1. フォーマットしたい範囲を選択します
2. 「選択範囲をフォーマット」コマンドを実行します
   - VSCode: `Ctrl+K Ctrl+F`

### 6.4 未使用パブリック変数を検出する

プロジェクト内で使用されていないパブリック関数や変数を検出します。

**確認方法：**

診断結果に「unused-public-var」として表示されます。

**設定で制御する場合（.lsp/config.edn）：**

```edn
{:linters {:clojure-lsp/unused-public-var {:level :info}}}
```

レベルを`:off`にすると検出を無効化できます。

---

## 7. 【STEP4-5】CLIコマンド（バッチ処理・CI/CD）

> **開発フローでの位置**: コミット前やCI/CDパイプラインでバッチ処理を実行するステップです。

### 7.1 CLIコマンド一覧

| コマンド | 説明 |
|---------|------|
| `clojure-lsp format` | コードフォーマット |
| `clojure-lsp clean-ns` | 名前空間整理 |
| `clojure-lsp diagnostics` | 診断結果取得 |
| `clojure-lsp rename` | シンボルリネーム |
| `clojure-lsp references` | 参照検索 |
| `clojure-lsp dump` | 解析データダンプ |

### 7.2 コードをフォーマットする（CLI）

**基本的な使用方法：**

```bash
# プロジェクト全体をフォーマット
clojure-lsp format

# ドライランモード（変更箇所を確認）
clojure-lsp format --dry

# 特定の名前空間のみ
clojure-lsp format --namespace my-app.core

# 特定のファイルのみ
clojure-lsp format --filenames src/my_app/core.clj
```

**オプション：**

| オプション | 説明 |
|-----------|------|
| `--project-root, -p` | プロジェクトルートを指定 |
| `--namespace, -n` | 対象名前空間を指定（複数可） |
| `--filenames` | 対象ファイルを指定（カンマ区切り） |
| `--dry` | ドライランモード（ファイルを更新せず差分を表示） |
| `--ns-exclude-regex` | 除外する名前空間の正規表現 |

**CI/CDでの使用例：**

```bash
# フォーマットチェック（差分があれば終了コード1）
clojure-lsp format --dry
if [ $? -ne 0 ]; then
  echo "Format check failed"
  exit 1
fi
```

### 7.3 名前空間を整理する（CLI）

**基本的な使用方法：**

```bash
# プロジェクト全体の名前空間を整理
clojure-lsp clean-ns

# ドライランモード
clojure-lsp clean-ns --dry

# 特定の名前空間のみ
clojure-lsp clean-ns --namespace my-app.core
```

### 7.4 診断を実行する（CLI）

**基本的な使用方法：**

```bash
# プロジェクト全体の診断
clojure-lsp diagnostics

# 特定の名前空間のみ
clojure-lsp diagnostics --namespace my-app.core

# JSON形式で出力
clojure-lsp diagnostics --output {:format :json}
```

**終了コード：**

| コード | 意味 |
|--------|------|
| 0 | 診断結果なし、または情報レベルのみ |
| 2 | 警告あり |
| 3 | エラーあり |

**CI/CDでの使用例：**

```bash
# 診断チェック（エラーがあれば終了コード3）
clojure-lsp diagnostics
if [ $? -eq 3 ]; then
  echo "Diagnostics found errors"
  exit 1
fi
```

### 7.5 リネームを実行する（CLI）

**基本的な使用方法：**

```bash
# シンボルをリネーム
clojure-lsp rename --from my-app.core/old-name --to new-name

# ドライランモード
clojure-lsp rename --from my-app.core/old-name --to new-name --dry
```

### 7.6 参照を検索する（CLI）

**基本的な使用方法：**

```bash
# シンボルの参照を検索
clojure-lsp references --from my-app.core/my-function
```

---

## 8. 設定カスタマイズ

### 8.1 設定ファイルの場所

clojure-lspは以下の場所から設定を読み込みます（優先度順）：

1. プロジェクトルート：`.lsp/config.edn`
2. ホームディレクトリ：`~/.lsp/config.edn`（グローバル設定）
3. XDG設定：`$XDG_CONFIG_HOME/clojure-lsp/config.edn`

### 8.2 基本的な設定例

```edn
;; .lsp/config.edn
{;; 名前空間整理の設定
 :clean {:ns-inner-blocks-indentation :keep
         :sort {:require true
                :import true}}

 ;; ホバー情報の設定
 :hover {:hide-file-location? false}

 ;; リンターの設定
 :linters {:clj-kondo {:level :on}
           :clojure-lsp/unused-public-var {:level :info}}

 ;; 参照数表示（Code Lens）
 :code-lens {:segregate-test-references true}

 ;; cljfmtの設定
 :cljfmt {:remove-consecutive-blank-lines? true}}
```

### 8.3 よく使う設定

**未使用パブリック変数の検出を無効化：**

```edn
{:linters {:clojure-lsp/unused-public-var {:level :off}}}
```

**特定の名前空間を解析から除外：**

```edn
{:source-paths-ignore-regex ["test/.*"]}
```

**cljfmtのカスタム設定を使用：**

```edn
;; .cljfmt.edn（プロジェクトルート）
{:indentation? true
 :remove-trailing-whitespace? true
 :remove-consecutive-blank-lines? true}
```

---

## 9. Java連携機能

### 9.1 Javaクラスの補完

Javaのクラス名やメソッド名も補完されます。

**使用方法：**

```clojure
;; クラス名の補完
(import '[java.util  ; <- ここで Date, List 等が補完される

;; スタティックメソッドの補完
(Math/  ; <- ここで abs, max, min 等が補完される
```

### 9.2 Javaクラスの定義へジャンプ

Javaクラスの定義にジャンプできます（ソースが利用可能な場合）。

**操作手順：**

1. Javaクラス名にカーソルを置きます
2. 「定義へ移動」コマンドを実行します

**注意点：**
- JDKソースやライブラリソースが必要です
- クラスファイルのみの場合はデコンパイル結果が表示される場合があります

---

## 10. デバッグ・トレーシング

### 10.1 ログの確認

clojure-lspのログを確認できます。

**ログファイルの場所：**
- `/tmp/clojure-lsp.*.out`（標準出力）

**エディタでのログ確認：**
- VSCode: 出力パネル → 「Clojure LSP」を選択
- Emacs: `*lsp-log*`バッファ

### 10.2 OpenTelemetryトレーシング

clojure-lspはOpenTelemetryに対応しています。

**有効化方法：**

環境変数を設定してclojure-lspを起動します：

```bash
export OTEL_TRACES_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
clojure-lsp listen
```

### 10.3 nREPL接続

開発用にnREPLサーバーを起動できます。

```bash
clojure-lsp listen --trace
```

---

## 11. 日常開発の流れ

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

```
開発フロー概要（再掲）
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【STEP 1】コードを編集（補完・ナビゲーションを活用） → 4章参照
    ↓
【STEP 2】コードをリファクタリング（変換・整形） → 5章参照
    ↓
【STEP 3】コード品質を確認（診断・未使用コード検出） → 6章参照
    ↓
【STEP 4】名前空間を整理（clean-ns・フォーマット） → 6章参照
    ↓
【STEP 5】コミット前チェック（CLIでバッチ処理） → 7章参照
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

### 11.1 STEP1: 新しい関数を作成する

1. ファイルを開き、関数を定義し始めます
2. コード補完を活用して効率的に入力します
3. 必要に応じて他の関数の定義にジャンプして参照します
4. ホバー情報でドキュメントを確認しながら実装します

```clojure
(defn process-data [data]
  ;; str/ と入力すると clojure.string の関数が補完される
  (-> data
      (str/trim)
      (str/split #",")))
```

### 11.2 STEP2-3: コードをリファクタリングする

1. ネストした関数呼び出しをスレッドマクロに変換します
2. 変数名や関数名を適切にリネームします
3. let束縛を整理します

### 11.3 STEP4: 名前空間を整理する

1. 不要なrequire/importを確認します
2. 「Clean NS」を実行して自動整理します
3. ファイル全体をフォーマットします

### 11.4 STEP5: コミット前チェック

コミット前に以下のコマンドを実行します：

```bash
# フォーマットチェック
clojure-lsp format --dry

# 診断チェック
clojure-lsp diagnostics
```

**Git hooks での自動化（.git/hooks/pre-commit）：**

```bash
#!/bin/bash
clojure-lsp format --dry
if [ $? -ne 0 ]; then
  echo "Please run: clojure-lsp format"
  exit 1
fi
```

---

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

### 12.1 起動・接続に関するQ&A

**Q: エディタでclojure-lspが起動しません**

A: 以下を確認してください：
1. clojure-lspがPATHに含まれているか確認：`which clojure-lsp`
2. clojure-lspのバージョンを確認：`clojure-lsp --version`
3. エディタのLSPクライアント設定を確認
4. ログファイル（`/tmp/clojure-lsp.*.out`）を確認

**Q: プロジェクトの解析に時間がかかります**

A: 以下の対策を試してください：
1. ネイティブバイナリを使用する（JARより高速）
2. `.lsp/cache`ディレクトリを削除して再解析
3. 大きな依存関係を持つプロジェクトでは初回起動時に時間がかかることがあります

### 12.2 機能に関するQ&A

**Q: コード補完が動作しません**

A: 以下を確認してください：
1. ファイルが正しく解析されているか（診断が表示されるか）
2. 名前空間宣言（ns形式）が正しいか
3. requireが正しく設定されているか

**Q: 定義へジャンプできません**

A: 以下を確認してください：
1. 対象のシンボルがプロジェクト内で定義されているか
2. 依存ライブラリの場合、ソースがクラスパスに含まれているか
3. ログファイルでエラーを確認

**Q: Clean NSで期待通りに整理されません**

A: 以下を確認してください：
1. `.lsp/config.edn`の`:clean`設定を確認
2. 動的にrequireされているものは未使用と判定される場合があります
3. マクロ内で使用されているシンボルが検出されない場合があります

---

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

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

| エラーメッセージ | 原因 | 対処法 |
|----------------|------|--------|
| `No project-root-uri was specified` | プロジェクトルートが特定できない | プロジェクトルートに`deps.edn`または`project.clj`を配置 |
| `Timed out waiting for analysis` | 解析がタイムアウト | プロジェクトサイズを確認、キャッシュをクリア |
| `Request cancelled by client` | リクエストがキャンセルされた | 通常は正常な動作、頻発する場合はエディタ設定を確認 |

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

**トラブル: 解析データが古い**

**解決方法:**
1. `.lsp/cache`ディレクトリを削除
2. エディタを再起動
3. clojure-lspを再起動

```bash
rm -rf .lsp/cache
```

**トラブル: メモリ不足エラー**

**解決方法:**
1. JVMヒープサイズを増やす（JARで実行している場合）
2. ネイティブバイナリを使用する

**トラブル: CI/CDでフォーマットチェックが失敗する**

**解決方法:**
1. ローカルとCIで同じバージョンのclojure-lspを使用
2. `.cljfmt.edn`がリポジトリに含まれていることを確認
3. `clojure-lsp format`でローカルでフォーマットしてからコミット

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

問題が解決しない場合は、以下のチャネルで支援を求めることができます：

| チャネル | URL/連絡先 |
|---------|------------|
| GitHub Issues | https://github.com/clojure-lsp/clojure-lsp/issues |
| Slack（Clojurians） | #clojure-lsp チャンネル |
| 公式ドキュメント | https://clojure-lsp.io/ |

**Issue報告時に含める情報:**
- clojure-lspのバージョン（`clojure-lsp --version`）
- 使用しているエディタとLSPクライアント
- OS情報
- ログファイルの内容
- 再現手順

---

## 改訂履歴

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

---

*本マニュアルは、clojure-lspのエンドユーザー（開発者）向け業務運用マニュアルです。*
*システムの更新により、画面や操作方法が変更される場合があります。*
*最新情報は[公式ドキュメント](https://clojure-lsp.io/)を参照してください。*
