ローカルLLMのコード補完Cotabを作った話

に公開

ローカルLLMでコード補完

まるで思考を先読みするかのように、今書こうとしている関数を提案してくれる――そんなクラウドモデル並みのコード補完を、ローカルLLMで実現できないかと考えてVS Codeのプラグインを開発しました。

外部にデータを送信せず、高品質なコード補完(オートコンプリート)を行いたい人におすすめです。

Cotabがコードの関数名を自動補完している様子を示すGIFアニメーション

特徴は?

Cursorのような、直近の編集履歴をより反映させた提案をするようにしています。
具体的には、今開いている全コードに加え、編集履歴や外部シンボル、エラーを考慮してコード補完を行うため、より編集意図を汲んだ提案を表示できます。
表示速度は初回処理後は1秒未満で表示できるよう最適化しています。

提案は行の途中、複数行や数行下、次編集するであろうもっと下の行へのジャンプなどもしてくれます。なので対象行付近をクリックしたときに補完を表示してくれます。

また、この仕組みを使ってプロンプトを変えることでコメント専用モード、翻訳専用モードも作りました。(カスタムモードも作れます)

違いは?

Continue.devやllama-vscodeはFIMという仕組みを使い、軽量なモデルで超高速(0.1秒〜0.3秒)な補完表示を行えます。
Cotabは直近の編集を加味することで、より意図にあった提案をしますが、比べると表示速度はワンテンポ遅くいです。

コメントモード

Cotabのコメント専用モードでコメントを自動補完している様子を示すGIFアニメーション

コメント言語は設定ページで変えられます。

翻訳モード

Cotabの翻訳モードで英語コメントを日本語に翻訳している様子を示すGIFアニメーション

例えばUE5のエンジンはすべて英語で書かれているので、さっと日本語に出来ると助かります。

インストール

クイックスタート

VSCode Marketplace

GitHub

今後の課題

Cursorは新規コードの提案だけでなく、既存のコード編集・アルゴリズム変更なども秀逸です。CotabはCursorのような変更の提案はまだ弱く、一旦既存のコードを消した際に新しいコードを提案してくれます。

また、Cursorは未importの関数を使うとTABを押すだけでimportを追加してくれたり、別ファイルにジャンプ&補完したりと広範囲な編集も行え、まさに公式が謳う「TAB・TAB・TAB」の開発が出来ます。
Cotabはそのような大規模な提案はできません。
ファイル全文を高速出力できるDiffusionアルゴリズムを使ったモデルというのもあるらしいので、いつか試してみたいです。出力ができれば差分を取ってTABジャンプが実現できます。

そもそもなんで作った?

プライベートではCursorをずっと使っていますが、仕事ではプライバシーの観点からまだ使えません。もともとAIを使った開発には非常に興味があり、ローカルLLMでCursorのような体験を実現できないものかと、開発しました。

パフォーマンス

ソースコードが100行と実用想定の1000行超えでのケースで、
最初の処理が終わった2回目以降の補完表示速度を載せます。

RTX 4070

モデル 100行 1500行+200外部シンボル
高速モデル 0.2秒~0.5秒 0.6秒~1.0秒
高品質モデル 0.4秒~0.8秒 0.7秒~1.2秒

RTX 3070

モデル 100行 1500行+200外部シンボル
高速モデル 0.3秒~0.5秒 0.8秒~1.3秒
高品質モデル 1.0秒~1.8秒 2秒~2.5秒

※ 高品質モデルはVRAM 8GBにすべて乗らないため少し遅いですが動作可能です。

タイプ モデル名 説明
高速モデル Qwen3-4B-Instruct-2507 4Bでも予想以上にいい提案をしてくれます。
このモデルは32kコンテキストでVRAM 5.5GBで高速に動作します。
高品質モデル Qwen3-Coder-30B-A3B このモデルは高品質な補完が行えます。
Q1でもQwen3-4Bより良い提案をしてくれ、VRAM 11GBで高速に動作します。
VRAM 4GB~で稼働させられるプリセットを用意しています。

最後に

2025年はAIの性能がかなり向上し、指示した内容がしっかり実装され、業務で使える高品質なものが得られるようになりました。
2026年は、さらにその上のレイヤーとして、AIを活用した便利なツールが一気に増えるのではないかと考えています。

しかし、今回のCotabプラグインでは、趣味の時間を使い、現在の状態に仕上げるまでに約2カ月半かかりました。
知識0からエージェントを使い、実際に動作する補完プラグイン自体は2日程度で完成しましたが、そこから品質向上や安定化、UXなどの実用に耐える品質まで高めるには、かなり時間がかかりました。

エージェントがなければ、半年かかっても完成していなかったと思います。AIは非常に活躍しました。しかし、だからといって、実用的な品質のツールを数日で次々と生み出せるかというと、そう単純なものでもないんだなと実感しました。

今ではエージェントをずっと回し続けるみたいな開発もできるようですので、今後はもっとAIの使い方を学び、使いこなしていきたいです。

Discussion