VSCode + Continue と Ollama + DeepSeek Coder で、フリーでサクサク動くAIコーディング環境を作る

# 概要
VSCode と Continue という拡張機能を使って、無料でサクサク動くAIコーディング環境を作成する。
内部ネットワーク上に Ollama と DeepSeek Coder をインストールした別のPCを用意して、環境を別々に分けることにより、普段使っているPCのリソースを節約し、快適にコーディングできるようにする。

# できる事
- ソースコードの記述中に、生成AIが次の候補を提案してくれる
- 「C#でクイックソートのGeneics版のコードを書いて」などと指示を与えると、その関数を書いてくれる
- テストコードを書いてくれる
- コードのレビューをしてくれる
- AIによるチャット機能がついているので、設計の相談に乗ってくれる

# 環境
```plantuml
@startuml
cloud 内部ネットワーク {
frame ローカルPC {
  (VSCode)
  (Continue)
  (VSCode)<->(Continue)
}
package "Ollama PC" {
  (Ollama)
  (DeepSeek Coder)
 (Ollama) <-> (DeepSeek Coder)
}
(Continue) <--> (Ollama)
}
@enduml
```

# DeepSeek Coderとは
Cursor、Github Copilot などと同様の、生成AIによるコードアシスタント モデル。
Meta社の Code Llama などと比較しても優れたコードを出力するとある。
また、高度なコード補完機能を持つ。

https://github.com/deepseek-ai/DeepSeek-Coder

### ライセンス
[DeepSeek Coder ライセンス（モデル）](https://github.com/deepseek-ai/DeepSeek-Coder/blob/main/LICENSE-MODEL)

# Ollama 環境を構築
[Ollama を内部ネットワークで共有する](https://qiita.com/a_ogura/items/b29c22f3009c093d58f4)を参照し構築を行う。

DeepSeek Coder のモデルはインストールするPCのスペックによる使い分ける。
一般的には、搭載している PC の VRAM 容量で見分ける。
今回は、DeepSeek Coder の 6.7B モデルを使う。

Ollama をインストールしたPCで、PowerShell もしくは コマンド プロンプトを立ち上げ、以下のコマンドを打つ。
```powershell
ollama pull deepseek-coder:6.7b
```

## VS Codeでの設定方法

### VS Codeを立ち上げる
### `Continue`拡張機能をインストールする
![0b580d70-25bd-4dfe-b8a4-c75f5f35202f-960x205r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/b8d61551-b8a0-4e52-cada-a34864a3743b.png)

### インストール後、左サイドにContinueのアイコンが出る
![ct.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/b0aeaa58-4429-53b5-f191-cef80c6fac2c.png)

### Continueのアイコンを、ドラッグ＆ドロップで右端に持っていく
![dd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/4dacd8c1-3d8b-e9e4-678c-315dd32277bf.png)
実際は、右端まで持っていく必要はないが公式はこれを勧めている

### AIチャットウィンドウの右下に設定歯車があるのでクリック
![chat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/6234192b-c06d-0842-75f0-0cd472ed84ec.png)

### 設定jsonファイルが開くので、編集を行う
![2fc16aaf-f18d-4799-935a-5570853cb64a-960x597r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/0c878ac7-952b-0adc-579e-500e5c8c12e7.png)
`models`に、DeepSeek Coder の指定と、Ollama PCのエンドポイントを指定する
ここでは、エンドポイントのIPアドレスを、`172.16.11.68`としている

### 設定jsonファイルの下部にある `tabAutocompleteModel` を編集する
![230d1728-493b-485b-a2ac-fce71ffc8e36-960x468r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/8e4312d5-99a4-57a1-f2a9-a84a76dacc7d.png)

### [CTRL]+[S]で保存し、設定jsonを閉じる
 
### AIチャットウィンドウの下部に設定した`deepseek-coder:6.7b-instruct`があるので、これを選択する
![523b279e-2707-4dad-a0fe-3c0c18f34821-960x668r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/0ba79d67-fe2e-a23d-e167-7cc388434fb0.png)

### 補足として、AIチャットウインドゥが消えた場合は、右上にある画面分割ボタンを押せば出てくる
![f1d72286-f8e4-4073-8f95-d9961efb81da-706x960r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/5fdf9c6a-39e6-faf5-3f2c-961867a30527.png)

### この状態でスタンバイ状態
![91656de4-569b-4850-ba34-112b2082bf4a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/99b8242f-fcdf-a721-ea48-815b22ccb71b.png)

### とりあえず、日本語で"Hello, World!"生成の指示を出してみる
![fec758db-c3da-446c-906f-96b3e3672516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/0b9b0022-6995-c800-df7c-a76f854c2d50.png)
**返答があり、コードが生成されれば成功。**

### 右上の再生ボタンを押すと、AIチャットからコード部分へコピペされる
![a16c58ac-c979-45ed-a515-40e93a7da7df.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/29bd301c-57dd-a35d-3f8c-cec3b7821fb2.png)
コピペ中
![610a75b9-ccba-4cd1-8100-79dfb748bf1f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/4b29a0b0-ba4f-9825-a9d1-85b36a03acf2.png)

### [SHIFT]+[CTRL]+[RETURN]により、一気に反映させる事もできる
![30652b4b-7607-406c-8aa0-db435cef9c21-960x601r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/1c707ef7-cd41-a8ae-ac59-da2fab55e47e.png)

以上、快適なコーディングライフを楽しみましょう！

### 補足
新しいチャットを始める場合は、AIチャットウインドゥ右上にある「＋」ボタンを押す
![09c47a74-b06d-40fd-bd09-e53989ccf0b8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266949/2069e6cb-77bb-3628-5686-9b057732b841.png)