昨年あたりから、生成AIによるプログラミング・コード生成が盛り上がりを感じており、身の回りでもClaude CodeやOpen AI Codex、Gemini Code Assist、GitHub Copilot等のサービスを利用している話をよく聞きます。
便利ではあるものの、トークンがすぐ無くなる、何月何日までリセットされない、といった悩みを持たれている方も多いと思います。
その解決策の一つがローカルLLMによるコード生成です。
ローカルLLMを利用する場合、自前でAI基盤を構築する初期投資は必要ですが、構築後はトークンの制約に悩まされず、リソースがある限りコード生成に使い倒すことができます。
ローカルLLMには次のような利点もあります。
- オンプレで構築した場合、外部サービスに自社データを持ち込む必要がない。インターネット接続なしに生成も可能。
- 予期せぬサービス仕様変更や提供終了を気にせず、自前で実行環境のコントロールができる。
社内のAI Private Cloud環境を利用してローカルLLMを動かし、自分のPCに入っているVS Codeからコード生成ができるようになったため、その話を共有させていただきます。
構成
下図のような構成で、ローカルLLMを使用したコード生成を行いました。

- コード生成のチャットインターフェースとして、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で公開する設定としています。
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を追記しています。
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にアクセスする際に使用します。
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」拡張機能を導入します。
「Claude Code for VS Code」拡張機能の設定にて、環境変数を設定するため「Edit in settins.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の生成結果が返ってきました。

画面はシンプルな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を変えてみる等の検証も気になるところで、検証したらまた投稿しようと思います。

