WSL2上でローカルLLMを使ってClineを使ってみる

## はじめに
最近のAIの進化、凄いですよね。
私もGithub CopilotやClaudeなどを活用してコードを書いていますが、少し前よりかなり快適になったと感じます。
ただ、私用のプロジェクトで使っていると月額いくらかかかるのが少し気になっていました。
そこで、自分が今使っているPCがちょうど高スペックだったので今流行り(?)のClineをローカルLLMで使ってみようと思ったのが本記事を書こうと思ったきっかけです。

## 環境
```
OS : Ubuntu (WSL2)
CPU : i7-13700KF
GPU : RTX4090
RAM : 64GB
```

## 環境構築
### Ollama動作環境構築
1. Ollamaのインストール
下記のコマンドを実行し、Ollamaをインストールします。
マニュアルインストールも行うことができるので、そちらでやりたい方は[公式のドキュメント](https://github.com/ollama/ollama/blob/main/docs/linux.md)を参照ください。
 ```shell
 > curl -fsSL https://ollama.com/install.sh | sh
 ```
2. CUDAドライバーのインストール
公式ではオプションとなっていますが、インストールを行います。
CUDAドライバーのダウンロード先は下記です。
https://developer.nvidia.com/cuda-downloads

最終的に下記のように`nvidia-smi`のコマンドが動作すれば環境構築OKです。
```shell
> nvidia-smi
Sat Apr  5 07:48:22 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.124.06             Driver Version: 572.70         CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| 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 GeForce RTX 4090        On  |   00000000:01:00.0  On |                  Off |
|  0%   42C    P8             23W /  450W |    3279MiB /  24564MiB |     13%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A              29      G   /Xwayland                             N/A      |
+-----------------------------------------------------------------------------------------+
```

### モデル選定
環境構築ができたらローカルで動作させるモデルの選定を行います。
現状公開されている一番いいモデルをインストールすればいいと思うかもしれませんが、コンシューマー向けのデスクトップPCで動作させることは難しいでしょう。

そこでローカル環境で動くモデルを探す必要があります。

どのモデルを選ぶかによって生成されるコードの品質にも影響しますが、この辺りの説明は他の記事に任せます。
この辺りの記事が読んでいて面白かったのでよかったら読んでみてください。
 -> [Ollamaで体験する国産LLM入門](https://zenn.dev/hellorusk/books/e56548029b391f)

私はサイバーエージェントが公開している、DeepSeek-R1-Distill_Qwen-14B/32Bに日本語データを追加学習させたLLMを利用していきます。
- [cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf](https://huggingface.co/mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf)
- [cyberagent-DeepSeek-R1-Distill-Qwen-32B-Japanese-gguf](https://huggingface.co/mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-32B-Japanese-gguf)

### モデルダウンロードと実行
ではコマンドでHuggingFaceにあるモデルを使ってみましょう。
`:Q5_K_M`の部分はなくても勝手にインストールされますが、メモリの使用量などちょうどいいものを選ぶのが良いと思います。

![スクリーンショット 2025-04-05 081740.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326068/e82a5938-354f-48a5-8b34-36de09b9ab6f.png)

```shell
# ollama run hf.co/{username}/{repository}:{quantization}
> ollama run hf.co/mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf:Q5_K_M
```
上記コマンド実行後に適当な文字を打って返答が返ってくればOKです。
```
>>> こんにちは、元気ですか？
<think>
ユーザーが「こんにちは、元気ですか？」と尋ねてきました。この質問は日本語では非常に一般的ですが、丁寧
さと適切な返答のバランスを考慮する必要があります。

まず、「こんにちは」は挨拶であり、その後の「元気ですか？」は具体的な状態への質問です。ユーザーがどの
ような関係性や文脈でこのメッセージを送ったか分からないため、幅広い対応が必要です。例えば、友人との会
話では軽い返答かもしれませんが、ビジネス相手へのメールであればよりフォーマルな回答が適切でしょう。

次に、「元気ですか？」に対する答えとして、「はい、元気です」という単純な肯定はありますが、少し具体的
な状況を交えると親しみやすさや誠実性が出ます。例えば、「最近忙しいですが体調は問題ありません」や「普
段通りの活動が可能です」などが考えられます。

さらに、ユーザーが本当に相手の健康状態を心配している可能性も考慮します。その場合、過剰に明るすぎず、
適度な現実感のある返答が必要です。例えば、「少し疲れている部分もありますが、全体的に問題ありません」
というような表現はバランスが良いでしょう。

また、日本語では「元気ですか？」に対して「いえ、少し具合が悪いです」のような否定的な回答をすることは
稀ですが、ユーザーが何か隠れた意図（例：相手に心配してほしい）を持っている場合は考慮が必要かもしれま
せん。しかし、一般的には肯定的で前向きな返答が求められます。

最後に、返答の長さと適切性です。過度に冗長にならず、簡潔でありながら必要な情報を含めることが重要です
。ユーザーとの関係性や場面によって適宜調整します。
</think>

**返答例：**

「こんにちは！
体調は特に問題なく、普段通りの活動が可能です。最近忙しいですが、健康面では安定しています。ありがとう
ございます！
何かお困りのことがあれば遠慮なく伝えてくださいね！」

**構成ポイント：**
1. **挨拶への丁寧な応答**（「こんにちは」に「こんにちは！」で対等性を表現）
2. **現状の明確化**（肯定的・具体性のある回答）
3. **関心の示唆**（追加サポートの申し出で親近感向上）

**補足：**
- 仕事相手への返答なら「業務に支障なしです」とフォーマル化
- 友人との会話では「最近疲れ気味だが大丈夫よ」と軽口を効かせる
- 長期的な付き合いなら「少しストレスはあるけど体調は問題ない」で本音交わす

**潜在ニーズへの配慮：**
- 本当の意図が「相手に心配してほしい」場合、「疲れている部分も正直ありますが…」と少しつつも答え
- 意図的に軽い返答を希望する場合は「元気で～！（笑）」で雑談へ誘導
```

### Cline環境整備
モデルの実行ができたので最後にClineを使ってAIコーディングをやってみましょう。
まずはVSCodeの拡張機能ではClineを追加します。
![スクリーンショット 2025-04-05 083152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326068/8cf5807f-bed5-49f3-824e-c400c13c1bfe.png)
次にVSCodeに追加されたアクティビティバーのClineタブを開き、API Providerを「Ollama」に設定します。
![スクリーンショット 2025-04-05 083303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326068/b56df7e8-a37c-4394-90c7-5145f3c79df7.png)
Ollamaを選択し、先ほど実行したモデルを選択した状態になれば準備はOKです。
![スクリーンショット 2025-04-05 083544.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326068/fe6f588f-63da-4633-acef-349194141d1a.png)

### 実際に実行してみる
環境の準備ができたので、`Type a message...`のところに下記のような指示をしてみた。
```
現在のsrc/main.pyはpythonのdiscord botを開発するためのコードだ。
新しく、discordで/helloと打ったら"こんにちは"と返してくれる機能を追加したい。
```
しばらく待っていると結果が返ってきます。
また、`See new changes`を見ることで今回のプロンプトで変更された箇所を確認することも可能です。
ちゃんと動作できていることが確認できたので
![スクリーンショット 2025-04-05 093439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326068/c517b1bd-0dc2-4818-b4e3-3cd457cda175.png)

![スクリーンショット 2025-04-05 093456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326068/9bd5a4eb-f2bb-4b82-976b-1a9ee5170ea8.png)

## 負荷について
推論が走ってるとき、もちろんですがPCの動作が重くなります。
GPUの3D使用率は普段だったらあまり見ない90%を超えるときもありますし、GPUメモリ、RAMのメモリなどフル稼働です。
裏でブラウザやVSCodeなどは動かしていますが、それ以外のウィンドウは開いていなくても下記のようになります。ローカルLLM恐るべし。
![スクリーンショット 2025-04-05 084948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326068/e14371c2-afed-437a-aa23-6d6939565949.png)


## さいごに
ここまででローカルLLMを使ってClineのAIコーディングを始める方法をまとめてきました。
月額課金で使えるAIの進化も凄いですがローカルで動作するAIの進化も凄まじく、コード生成もプロンプトによっては活用できそうなレベルだと思います。

ただ、スペック面をクリアするのはかなり難しく私が使っているRTX4090をもってしても32Bパラメータ版のモデルの動作はかなり遅く、日常使いはできないレベルでした。

ローカルAIのために高スペックのGPUを買うぐらいなら大人しく月額で使えるAIサービスを利用するのがいいですが、もしすでに高スペックGPUを持っているのであれば使ってみると面白いかもしれません。

最後まで読んでいただき、ありがとうございました。

## 参考
- https://note.com/cppp_cpchan/n/n92c7795f5939
- https://zenn.dev/toki_mwc/articles/d1ebbd634ff488
-