0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカルLLMを使ってVSCodeでコード生成してみた

0
Last updated at Posted at 2026-09-14

昨年あたりから、生成AIによるプログラミング・コード生成が盛り上がりを感じており、身の回りでもClaude CodeやOpen AI Codex、Gemini Code Assist、GitHub Copilot等のサービスを利用している話をよく聞きます。

便利ではあるものの、トークンがすぐ無くなる、何月何日までリセットされない、といった悩みを持たれている方も多いと思います。

その解決策の一つがローカルLLMによるコード生成です。

ローカルLLMを利用する場合、自前でAI基盤を構築する初期投資は必要ですが、構築後はトークンの制約に悩まされず、リソースがある限りコード生成に使い倒すことができます。

ローカルLLMには次のような利点もあります。

  • オンプレで構築した場合、外部サービスに自社データを持ち込む必要がない。インターネット接続なしに生成も可能。
  • 予期せぬサービス仕様変更や提供終了を気にせず、自前で実行環境のコントロールができる。

社内のAI Private Cloud環境を利用してローカルLLMを動かし、自分のPCに入っているVS Codeからコード生成ができるようになったため、その話を共有させていただきます。

構成

下図のような構成で、ローカルLLMを使用したコード生成を行いました。
image.png

  • コード生成のチャットインターフェースとして、VS Codeの拡張機能Claude Code for VS Codeを使用。(左)
  • VS CodeからLiteLLMというAPI Proxyを経由してLLM実行環境に接続。(真ん中)
  • GPUノード上にLLM実行環境Ollamaを構成しQwen3-coder-NEXTを動かす。(右)

GPUノードでの作業

ローカルLLM実行環境の実装

次の通り、Kubenetesクラスター上で、helmにてollamaを実装しました。

$ helm repo add otwld https://helm.otwld.com/
$ helm repo update
$ helm install ollama otwld/ollama --values values.yaml

values.yamlの中身は次の通り、ollamaリポジトリーからqwen3-coder-next(8ビット量子化)をプルして2つのGPUでモデルを稼働、nodePort:31434で公開する設定としています。

values.yaml
ollama:
  gpu:
    enabled: true
    type: "nvidia"
    number: 2
models:
  pull:
    - qwen3-coder-next:q8_0 
service:
  type: NodePort
  nodePort: 31434
persistentVolume:
  enabled: true
  size: "300Gi"
  storageClass: "sc"

実装後、次のコマンドにてCLIでコード生成を試してみることができます。

$ kubectl exec -it <pod名> -- ollama run qwen3-coder-next:q8_0 \
"Write a quick sort in Python" 

Dockerサーバーでの作業

次のコマンドで、DockerサーバーからGPUノードにアクセスし、疎通確認を行うことができます。成功するとモデルの情報が出力されます。

$ curl http://<GPUノードのIPアドレス>:31434/api/tags

OpenAI API Proxyの実装

Dockerfile, config.yaml, .envを用意します。

Dockerfileは、LiteLLMのイメージを指定し、コンテナ内にconfig.yamlをコピーして、4000番ポートで公開する設定が入っています。

FROM ghcr.io/berriai/litellm:main-stable

COPY config.yaml /app/config.yaml

EXPOSE 4000

ENTRYPOINT ["litellm"]
CMD ["--config", "/app/config.yaml", "--port", "4000"]

config.yamlでは、下記の通りモデル名やGPUノードのIPアドレス・ポート情報等を指定します。
デフォルトでは、LLMでサポートされていないパラメーターも含めてリクエストを行いエラーとなったため、drop_parms: trueを追記しています。

config.yaml
model_list:
  - model_name: qwen3-coder-next
    litellm_params:
      model: ollama_chat/qwen3-coder-next:q8_0
      api_base: http://<GPUノードのIPアドレス>:31434
      timeout: 300
      stream_timeout: 300
      drop_params: true
general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY

.envファイルに設定するキー文字列は、VS CodeからLiteLLMにアクセスする際に使用します。

.env
LITELLM_MASTER_KEY=<キー文字列>

作成したDockerfileを使用してLiteLLMのイメージをビルドします。

$ docker build -t litellm-qwen .

ビルドしたコンテナイメージを実行します。

$ docker run -d --name litellm --env-file .env -p 4000:4000 \
--restart unless-stopped litellm-qwen

次のコマンドで、DockerサーバーローカルからLiteLLM経由でGPUノードにアクセスし、疎通確認を行うことができます。こちらも、成功するとモデルの情報が出力されます。

$ curl http://localhost:4000/v1/models -H "Authorization: Bearer <キー文字列>"

PCでの作業

Dockerサーバーへのsshポートフォワード設定・ログイン

Macのhomeディレクトリ配下にある.ssh/configファイルにて下記設定を追加します。

Host docker-server
    Hostname <DockerサーバーのIPアドレス>
    port 22
    User <Dockerサーバーにログインするユーザー名>
    LocalForward 4000 localhost:4000

Dockerサーバーにsshログインします。

$ ssh docker-server

VS Codeの設定

VS Codeに「Claude Code for VS Code」拡張機能を導入します。

image.png

「Claude Code for VS Code」拡張機能の設定にて、環境変数を設定するため「Edit in settins.json」をクリックします。

image.png

settings.jsonは次のコードに置き換えます。

settings.json
{
	"claudeCode.environmentVariables": {
    	"ANTHROPIC_BASE_URL": "http://localhost:4000",
	    "ANTHROPIC_AUTH_TOKEN": "<キー文字列>",
	    "ANTHROPIC_MODEL": "qwen3-coder-next"
	  }
    "claudeCode.disableLoginPrompt": true
}

VS Codeを再起動します。

コード生成の実施

VS Code再起動後、Claude Codeチャットインターフェースからコード生成の指示をして、ローカルLLMの生成結果が返ってきました。
image.png

画面はシンプルな3層MLPのコードをPyTorchで生成し、活性化関数の変更を指示した結果です。

次のコマンドで生成中のollamaログもリアルタイム参照可能です。

$ kubectl logs <pod名> -f

以下のコマンドでGPU使用状況が確認でき、L40Sが載っている環境で動かしてみたところ、GPU使用率:20〜40%、メモリ使用率:90%超という状況で動きました。

$ kubectl exec -it <pod名> -- nvidia-smi
Tue Sep  1 00:50:50 2026       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.126.20             Driver Version: 580.126.20     CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L40S                    On  |                        |                    0 |
| N/A   42C    P0            144W /  350W |   43811MiB /  46068MiB |     40%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA L40S                    On  |                        |                    0 |
| N/A   42C    P0            151W /  350W |   44415MiB /  46068MiB |     28%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            2865      C   /usr/lib/ollama/llama-server          43802MiB |
|    1   N/A  N/A            2865      C   /usr/lib/ollama/llama-server          44406MiB |
+-----------------------------------------------------------------------------------------+

まとめ

難易度の高いコード生成は、最新のClaudeやCodexに負けるかもしれませんが、そうでなければそれほど遜色なく対応できる印象です。

コード生成可能なローカルLLMは、qwen3-coder-next以外にも多くあり、代表的なモデルとしては以下があります。(2026年9月時点)

  • moonshotai/Kimi-K2.7-Code
  • deepseek-ai/deepseek-V4-Flash
  • Qwen/Qwen3.8-27B
  • zai-org/GLM-5.3-Flash
  • tencent/Hy3
  • openai/gpt-oss-120b
  • meta-llama/Llama-4-Maverick-17B

Kimi-K2.7-Codeがコード特化モデルなのに対し、deepseek-V4-Flash/Qwen3.8-27B/GLM-5.3-Flash/Hy3/gpt-oss-120b/Llama-4-Maverick-17Bは汎用LLMです。汎用LLMであってもコード生成能力は高く、コーディング支援やエージェント用途でも利用されています。

ローカルLLMの分野では中国系モデルの存在感が大きく、SWE-benchなどの公開ベンチマークでもQwen/Kimi/DeepSeek/GLM/Hyといったモデルが上位にランクインしています。

パラメーター数の大きいモデルは実行に必要なGPUリソースも大きくなるため、ローカル実行を前提とすると、このあたりが有力な選択肢になると思います。

LLMを変えてみる等の検証も気になるところで、検証したらまた投稿しようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?