🐈‍⬛

Continue.dev + Ollamaでローカルコーディングアシスタントを作ってみた話【謎ディレクトリ生える】

に公開

はじめに

GitHub CopilotやClaude Codeは便利ですが、課金が発生するし、コードがクラウドに送られるのが気になることもあります。「無料で・ローカルで・コードを外に出さずに」コーディングアシスタントが使えたら最高じゃないか、ということでContinue.dev + Ollamaの組み合わせを試してみました。

結論から言うと、できることとできないことがはっきりしていて、正直面白いです。

環境

項目 内容
OS Windows
エディタ VS Code + DevContainers
コンテナ構成 Docker Compose
LLM実行環境 Ollama(コンテナ)
使用モデル Gemma3 / Llama3.2

OllamaはDockerコンテナで動かしています。環境構築については以前の記事を参照してください。

Continue.devとは

VSCode上で動くオープンソースのAIコーディングアシスタントです。主な機能は3つ。

チャット:サイドバーでコードについて質問できる。@ファイル名でコンテキストを渡せる。

コード補完:コードを書いていると次の行を予測して補完候補を表示。Tabで確定。

インライン編集:コードを選択してCtrl+Iで指示を出すと、その場で書き換え候補をdiffで提示してくれる。

そしてこれら全部がローカルLLMで動くので、課金なし・APIキーなし・コード外に持ち出しなしです。

セットアップ

devcontainer.jsonにContinue.devを追加

{
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "continue.continue"
      ]
    }
  }
}

Rebuildすると自動でインストールされます。

config.yamlを設定

DevContainer内だとOllamaはlocalhostではなくollamaというホスト名で動いているので、apiBaseを明示的に指定する必要があります。ここでハマりました。

name: Local Config
version: 1.0.0
schema: v1
models:
  - name: Gemma3
    provider: ollama
    model: gemma3
    apiBase: http://ollama:11434
    roles:
      - chat
      - edit
      - apply
  - name: Llama3.2
    provider: ollama
    model: llama3.2
    apiBase: http://ollama:11434
    roles:
      - autocomplete
      - chat

apiBaseを書かないとUnable to connect to local Ollama instanceのエラーが出ます。DevContainerで使う場合は必須の設定です。

実際に使ってみた

コード補完:普通に使える

def hello(name):

まで書いて少し待つと、

def hello(name):
    print(f"Hello, {name}!")

とTabで確定できる補完が出てきました。意図をちゃんと読んでいて、普通に便利です。

インライン編集:シンプルな指示なら使える

コードを選択してCtrl+Iで「コメントつけてください」と指示したところ、docstringを生成してdiffで提示してくれました。

Accept/Rejectで選べるのも◎。

ただprintが2行になるというご愛嬌もありました。完璧ではないですが、無料でここまで動けば十分です。

チャット:コンテキストを渡すのがコツ

「hello関数を見習ってbye関数作ってください」と指示したところ、hello関数をちゃんと読んでbye関数を作ってくれました。docstringも自動でつけてくれます。

左側中央のmain.pyとかあるところでinsert Codeを選択すると...

ただしどのファイルをいじるかの判断は苦手で、新規でファイル作成しようとすることがあります。@demo.pyのようにファイルを明示的に指定してあげると精度が上がります。

謎ディレクトリ生える事件

本記事のハイライト?です。

「(これから新規作成する関数は)既存のコードに変更は一切加えず、追加するだけでよいです」と追加指示したところ、Gemma3が最終的に下した判断がこちら。

直前の画面(すでにあるコードを修正する形で実装):

「追加するだけでいいよ」

とアドバイス送ったところ:

なお、編集していたファイルはどうなったかというと、私がまだ不慣れなせいもあって...

そしてふとディレクトリ画面を見ると...

demo/
  introduce.py   ← 勝手に作られた
workspace/
  demo.py        ← 勝手に作られた

「既存コードに変更を加えるな」と言われた結果、新ディレクトリごと生やして別世界を構築するという謎の解釈をしたわけです。

これはローカルLLMの限界がよく出ていて、

  • 複数回のやり取りでコンテキストが混乱しやすい
  • 「既存を変えるな」という制約を守れないことがある
  • 迷ったら新ファイル・新ディレクトリを作るという逃げに走る

Claude CodeやCopilotと比べると、複雑な編集指示の正確さはまだ差があります。

まとめ

機能 評価 コメント
コード補完 普通に使える
インライン編集(シンプル) diffで確認できるので安心
チャット @でファイル指定すると精度UP
複雑な編集指示 謎ディレクトリが生えることがある

「無料・ローカル・コード外に出ない」でここまで動くのは正直すごいと思います。完璧ではないですが、補完とシンプルなチャットだけでも小規模な個人開発に十分に使えるかも印象です。

業務コードをクラウドに送りたくない場面や、APIコストを気にせず使い倒したい場面では特に有力な選択肢になると思いますが、より調整やテクニックが必要になると思われます。

今後試したいこと

  • コーディング特化モデル(Phi-4等)での精度比較
  • RAGを組み合わせてドキュメントを参照させる
  • チームでの共有環境としての活用

Discussion