Algomatic Tech Blog

Algomaticの開発チームによる Tech Blog です

Neovim & Claude Code でCursorっぽく開発したい

はじめに

Claude Codeがめちゃくちゃ伸びています。 この背景には、特定のIDEへの依存度を下げたいという需要があるのだと思います。

確かに特定のIDEに依存しないClaude Codeは高い柔軟性を持ちますが、CursorやWindsurfのような気の利いた機能(Diff表示やGUIでの設定管理などなど)はありません。

本記事ではこれらの課題に対する解決策として、Neovimの--listen機能を活用したClaude Codeとの効率的な連携方法を提案します。これにより、CLIベースの柔軟性を維持しながら、直感的で快適な開発体験を実現できます。

今回紹介する方法を使えば、Claude Codeの支援を受けながらNeovimを操作することができるようになるので、Vimに慣れていない方にこそ試してみて欲しいです。

主なユースケース

編集の可視化とトラッキング

ユースケース:

Neovimとの連携により、以下のような編集操作の可視化が実現できます:

  • Claude Codeが操作しているファイルをNeovimのバッファにリアルタイムで表示
  • Edit、MultiEdit、Read、Writeなどの編集Tool実行時の変更をリアルタイムで反映

価値:

  • 編集内容の透明性が向上し、Claude Codeの動作を直感的に理解できる
  • エディタとターミナルの行き来が減少し、コンテキストスイッチのコストを削減できる

Neovimの機能を活用したアシスト

ユースケース:

  • LSPの診断情報の解析と修正
  • Vimの操作や設定の支援

価値:

  • より詳細な情報へのアクセスが可能になる
  • Vim操作に不慣れなユーザーでもClaude Codeのアシストで高度な操作が実行可能になる

基本的な仕組み

nvim --listen とは

まず重要な注意点として、この機能はVimでは利用できず、Neovim専用の機能となります。

nvim --listenは、Neovimをソケット通信可能なサーバーとして起動する機能です。これにより、外部のプログラムからNeovimを操作することが可能になります。以下に基本的な使用例を示します。

まず、Neovimをサーバーモードで起動します:

nvim --listen /tmp/nvim

こうして起動したNeovimに対しては、様々な操作が可能です。例えば、接続確認のために以下のコマンドでメッセージを表示できます:

nvim --server /tmp/nvim --remote-send ':echo "vim接続確認"<CR>' 2>/dev/null && echo "VIM_CONNECTED" || echo "VIM_DISCONNECTED"

nvim内の表示

また、新しいファイルを開く場合は以下のようにします:

nvim --server /tmp/nvim --remote filepath

Claude Codeとの連携方法

Claude Codeは、システムコマンドを実行するためのBash Toolを標準で備えています。この機能を活用することで、先ほど説明したNeovimのリモート操作コマンドをClaude Codeから直接実行することが可能です。

設定方法

必要ツール

  • Neovim(Msgpack-RPCとLua APIのサポートが必要)
  • Claude Code CLI(最新版を推奨)
  • tmux(オプション:マルチペイン環境の構築用)

基本設定

Neovimの起動

nvim --listen /tmp/nvim

Claude Codeの設定

~/.claude/CLAUDE.mdに以下のルールを記述することで、どのプロジェクトで作業しても、NeovimとClaude Codeを連携できます。

docs.anthropic.com

# Claude Code + Vim 連携ワークフロー

このファイルは、Claude Code での vim 連携作業を効率化するための指示書です。

## セッション開始時の設定

### 1. Vim 接続状態の確認

ユーザーは以下のコマンドで nvim を起動しています。

```sh
nvim --listen /tmp/nvim
```

セッション開始時、ユーザーのリクエストに回答する前に必ず以下のコマンドを実行してください。:

```sh
nvim --server /tmp/nvim --remote-send ':echo "vim接続確認"<CR>' 2>/dev/null && echo
  "VIM_CONNECTED" || echo "VIM_DISCONNECTED"
```

- VIM_CONNECTED: vim 連携ワークフロー有効
- VIM_DISCONNECTED: 通常ワークフローで継続(vim 操作をスキップ)

その後、nvim 関連のコマンドが失敗するまで、VIM_CONNECTED を維持します。

## コーディングワークフロー

### Read

ユーザーにコードの内容を示す場合、以下のコマンドを実行する

```sh
nvim --server /tmp/nvim --remote filepath
```

### Write, Edit, MultiEdit

Edit, MultiEdit の場合は、ファイルの変更前に、必ず以下のコマンドを実行してファイルを開く

```sh
nvim --server /tmp/nvim --remote <変更対象ファイルのパス>
```

Edit, MultiEdit が完了したら、必ず以下のコマンドで vim の表示を更新する

```sh
nvim --server /tmp/nvim --remote-send ':checktime<CR>'
```

Write の場合は、ファイルの作成後に必ず以下のコマンドを実行し、ファイルを開く

```sh
nvim --server /tmp/nvim --remote <作成したファイルのパス>
```

## 診断・デバッグ連携

### vim 診断の取得

#### 現在開いているファイルのパス

```sh
nvim --server /tmp/nvim --remote-expr "expand('%:p')"
```

#### 診断情報の詳細取得

```sh
nvim --server /tmp/nvim --remote-expr "luaeval('vim.inspect(vim.diagnostic.get(0))')"
```

#### 特定行へジャンプ(診断箇所への移動)

```sh
nvim --server /tmp/nvim --remote-send ':行番号<CR>'
```

### LSP・診断関連

実行時にはユーザーに画面を表示させる

#### LSP 再起動(設定変更後)

```sh
nvim --server /tmp/nvim --remote-send ':LspRestart<CR>'
```

#### バッファリロード

```sh
nvim --server /tmp/nvim --remote-send ':checktime<CR>'
```

Tmuxの設定 (Optional)

Tmuxでマルチペイン環境を構築すると、NeovimとClaude Codeを1画面で管理できます。 その際に、vim-tmux-navigatorを使用すると、NeovimとTmuxのペイン間を自由に移動できます。

この辺りは完全にOptionalです。

まとめ

本記事では、Neovimの--listen機能を活用したClaude Codeとの連携方法について解説しました。

注意点として、ファイル編集の度に毎回Bash Toolを呼び出すのは効率的とは言えません。 Terminal出力を常時監視し、特定のToolの利用を検知した際に自動的にバッファを切り替えるような仕組みが望ましいでしょう。 今回は最小限の実装でClaude CodeとNeovimの連携を実現しましたが、より洗練された実装への第一歩として捉えていただければと思います。

ここまで読んでいただきありがとうございました! Algomaticでは一緒に営業AIエージェントを育てる仲間を絶賛募集中です。

興味を持っていただいた方、ぜひお声掛けください!

jobs.algomatic.jp