気軽に試せるラップトップ環境で、チャットbotを提供するオールインワンの生成AI環境構築から始め、Kubernetesを活用した本格的なGPUクラスタの構築やモデルのファインチューニングまで解説する本連載。今回は、「Visual Studio Code」と「Ollama」を活用し、Visual Studio Codeでローカルモデルに対してコードの生成や修正、レビューを指示したり、AIエージェントモードでコーディングさせたりする方法を解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
2025年4月初旬に「Visual Studio Code」(以下、VS Code)のバージョン1.99がリリースされ、AI(人工知能)とのチャット機能が統合されました。同時に、AIエージェントを利用できる「Agentモード」も追加されました。
AIコーディングにおいて、VS Codeは、「Cursor」「WindSurf」と比較して後れを取っていましたが、VS Code 1.99で追加されたAgentモードにより、開発者からの自然言語による指示の下、自律的に関連ファイルやエラーメッセージを収集し、ソースコードの編集、テスト、デバッグができるようになりました。
昨今、開発者の間で注目されている、自然言語でAIに指示を出してコーディングを任せる「Vibe Coding」が、VS Codeで実践できるようになりました。またMCP(Model Context Protocol)を用いた外部AIツールとの連携、「Ollama」のサポートによるローカルモデルの利用にも対応しました。
本連載では、今回から2回にわたってVS Codeに統合されたAI機能を紹介します。今回は、VS Codeで追加されたAI機能の概要と、コーディングに特化したAIモデル「DeepCoder」をVS Codeで利用する方法を解説します。なお、本稿では、VS Code バージョン1.100.2を利用しています。VS CodeのAI機能はバージョンアップする都度、機能が追加されたり画面が変わったりしていますので、あらかじめご了承ください。
VS Code 1.99で「GitHub Copilot」のチャット機能がVS Codeに統合されるとともに、Agentモードが新たに実装されました。
VS Code 1.99でAIチャット機能が統合されたことにより、下記のようなことが可能になりました。
これらの新機能とともに、Ollamaを利用したローカルモデルや「Gemini」「Claude」などOpenAI以外のモデル、「OpenRouter」を通じて多様なモデルが利用可能になりました。
そしてVS Code 1.99からは、Ollamaと組み合わせてローカルのLLM(大規模言語モデル)が利用可能となりました。これにより、機密情報を外部の生成AIサービスに渡すことなく安心、安全に生成AIを利用できるという利点があります(※)。また、一時的にネットワークに接続できず、GitHub Copilotが利用できない場合、応急措置としてローカルのLLMを利用したり、GitHub Copilotのコード補完やチャット上限数に到達した際、補完的に利用したりできます。
注意点として、チャット機能がVS Codeに統合されたとはいえ、その利用にはGitHub Copilotへのサインインが必要です。コード補完やコミットメッセージの自動作成などの機能は、依然としてGitHub Copilotのみの機能として提供されています。とはいえ、2024年12月にリリースされた「GitHub Copilot Free」プランにより、手軽に機能を試すこともできるようになりました。
※:2025年5月時点では、GitHub Copilotに対して通信をすることがあり、完全にローカルで動作することが保証されているわけではない点にご留意ください。なお、GitHubは公式ドキュメントにおいて「デフォルトでは、GitHub、その関連会社、サードパーティーは、お客さまのデータ(プロンプト、提案、コード スニペットなど)をAIモデルのトレーニングに使いません。これは、GitHub Copilotのお客さまの個人設定に反映され、有効にすることはできません」と説明しています(参考リンク)。またGitHub Copilotにおけるプライバシーについては、GitHub Copilot Trust Centerもご確認の上、ご利用ください。
読者の皆さんもご存じのように、「DeepSeek」が一時期世間を賑わせました。性能もさることながら、誰でも利用できるオープンな形で提供したこと、蒸留により高性能な小規模モデルを提供した点も注目を集めたポイントでした。
そのような背景の下開発されたのが、「DeepSeek-R1-Distill-Qwen-14B」をベースとする、DeepCoderです。バークレイ大学の研究チームと米国のAIベンチャーであるAI Togetherが公開した、コーディングに特化したファインチューニングモデルです。
DeepCoderは、PCで実行可能な14B(140億パラメーター)のサイズながら、プレビュー版の時点でOpenAIの「o3-mini」に匹敵するコーディング性能をLiveCodeBench(LCB)やCodeforces Ratingなどのベンチマークで示しています。
DeepCoderよりも高い性能を示すモデルもありますが、16GBのメモリ(RAM)のPCで実行可能なサイズのモデルの中で比較すると、執筆時点ではトップクラスの性能となっています。
DeepCoderのモデルは、MITライセンスで公開されており、誰でも自由に利用できます。モデルを開発する過程で利用されたデータセットやスクリプトも公開されており、DeepCoderをベースに誰でもモデルをカスタマイズできる点が特徴の一つとなっています。
今後、DeepCoderの技術をベースとした、より高度な手法の開発やモデルの登場にも期待できます。そこで今回はこうした柔軟性も併せ持つDeepCoderを利用して解説しています。
ただし、欠点として、英語で記述されたコードによりファインチューニングされているため、ベースとなっているDeepSeek R1が持っていた日本語処理能力が弱まってしまっています。日本語でDeepCoderに質問しても英語で返答されたり、英語で質問した方が適切な回答が得られたりする点に、注意が必要です。
本題に入る前に、VS CodeのAIチャット機能を利用してみましょう。
VS Codeを利用したことがない人は、VS Codeの最新版(本稿の説明では1.100.2)をインストールしてください。VS Codeのダウンロードとインストール方法はプログラマー以外にもおすすめ 「Visual Studio Code」のインストールから基本設定までを参考にしてください。
既にVS Codeをお使いの場合は、VS Codeを最新版に更新してください。VS Codeを更新するには、左下の歯車アイコンから「Check for Update(更新の確認)」を選択します。
AI機能を利用するには、VS Codeの右上のCopilotアイコンを選択します。
すると、右にチャット画面が表示され、AI機能が利用可能になります。
GitHub Copilotにサインインしていない場合は、サインインを促す画面が表示されます。
「Set up Copilot」もしくは「Sign in」を選び、CopilotアカウントまたはGitHubアカウントでサインインしてください。
セットアップの前に、ローカルモデルで利用できる機能も確認しておきます。エディタからコードを選択し右クリックすると、Copilotによるインライン編集機能が起動します。
ローカルモデルは下記のように「Review and Comment」以外のインライン編集機能が利用できます。
機能 | ローカルモデルでの利用 | 説明 |
---|---|---|
Editor Inline Chat | ○ | エディタの中でAIと対話を実施 |
Explain | ○ | コードの説明 |
Fix | ○ | コードの修正案を提示 |
Review and Comment | × | レビューとコメント |
Generate Doc | ○ | コードを説明するコメントを作成 |
Generate Tests | ○ | テストコードを作成 |
AIとチャットをしながら作業を進めていくチャット画面には、「Ask」「Edit」「Agent」の3つのモードがあります。Ollamaモデルのサポート状況は下記の通りです。
モード | Ollamaモデルの利用可否 |
---|---|
Ask | ○ |
Edit | ○ |
Agent | △(Tool Capability〈ツール呼び出し機能〉を持つモデルのみ) |
Agentモードは、ツール呼び出し機能に対応しているモデルのみサポートされます。本稿執筆時点では、Llama 3/4シリーズやQwen 2.5/3シリーズなどのOllama Libraryのモデルがツール呼び出し機能に対応しています。なお、今回利用するDeepCoderや本稿執筆時点でのDeepSeekの最新版(DeepSeek R1 0528)、Googleが提供するGemma3に対して、Tool Callingの機能を追加したモデルをOllama Hubの筆者のサイトで公開しているので、興味がある人は利用してみてください。
下記の機能はローカルモデルの場合、利用できません。
機能 | 説明 |
---|---|
コード補完 | コード作成中に現在入力中のコードに続く案を提示する機能(参考) |
コミットコメント作成機能 | ファイル差分からコミットメッセージを自動的に作成する機能 |
Copilotの機能を完全にオフラインで使えるようにする要望は、VS Codeの下記のIssueで提出されています。
完全にローカルで利用したい方は、上記のIssueに「いいね」をすると、Microsoftによる対応が進む可能性もありますので、ぜひ、「いいね」をお願いします。
それでは、Ollamaを利用してローカルモデルをダウンロードし、セットアップしていきます。なお、「GPT-4.1」などの生成AIサービスが提供するモデルを利用する人は「サンプルコードをダウンロードする」までスキップして構いません。
PCにモデルをダウンロードするため、Ollamaをインストールします。Ollamaの公式サイトからインストーラを取得して、インストールしてください。
Ollamaを既に別のホストにインストールしている場合、VS Codeのsettings.jsonで下記設定をすると接続できます。
"github.copilot.chat.byok.ollamaEndpoint": "http://[ollamahost]:11434"
続いて、DeepCoderをインストールします。今回は、筆者が準備した量子化済みDeepCoderを利用します。ターミナルまたはPowerShellを起動して下記のコマンドを入力します。
ollama pull okamototk/deepcoder:14b
上記モデルの実行が遅いと感じた場合、より小さなサイズの「qwen2.5-coder」をお勧めします。このモデルは、Alibabaが開発するLLM「Qwen」をコーディング特化にファインチューニングしたモデルで、こちらもコーディング性能の高さが特徴となっています。PCで実行するにはGPUがないと厳しいものの、32B(320億パラメーター)のモデルとして、GPT 4o(2024.08.06)に匹敵する性能を持つという評価結果も出ています。
参考までに、それぞれのモデルのパラメーター数とOllamaで利用する際に要求されるメモリサイズをまとめました。
モデル名 | パラメーター数 | 要求メモリ |
---|---|---|
DeepCoder(14B) | 140億 | 10.7GiB |
qwen2.5-coder:7b | 70億 | 8.3GiB |
qwen2.5-coder:3b | 30億 | 4.5GiB |
qwen2.5-coder:1.5b | 15億 | 3.1GiB |
※Ollama 0.6.6での値となります |
DeepCoderも1.5Bのモデルを提供していますが、日本語性能が著しく劣化しているため、日本語環境での利用は非推奨です。qwen2.5-coderより新しいQwen3がリリースされており、高性能なモデルとして注目を浴びていますが、コーディングに特化していない汎用(はんよう)モデルのため、小規模なモデルのコーディング性能はqwen2.5-coderより若干劣るようです。Qwen3はデフォルトでは思考(Reasoning)モードで実行されるため、応答時間も長くなります。
コードの解析などをモデルに指示する際には、コンテキスト長(モデルの入力トークン数)が重要になってきます。Ollamaのデフォルト値は2048ですが、長いソースコードや複数のソースコードを読ませる場合、不足しがちです。
コンテキスト長の変更は、Ollama実行時の環境変数「OLLAMA_CONTEXT_LENGTH」を変更します。16GBメモリのPCの場合は、一例として下記のように値を設定します。
OLLAMA_CONTEXT_LENGTH=8192
環境変数の設定方法はWindows/macOS/Linuxごとに異なりますので、本連載第3回記事の環境変数の設定を参考にしてください。重いと感じたらOLLAMA_CONTEXT_LENGTHをもう少し小さい値にするか、利用するモデルのサイズを小さくしてみてください。
では、DeepCoderを利用するために、VS Codeで設定をしていきましょう。
VS Codeのチャット画面から、モデル名(デフォルトではGPT-4o)をクリックすると、モデル選択のプルダウンメニューが表示されます。
ここで「Manage Models...」を選択すると、使用したいモデルの選択画面が画面上部に表示されます。
「Ollama」を選択すると、Ollamaで利用できるモデル一覧が表示されます。先ほどダウンロードしたDeepCoderのモデルにチェックを入れて「OK」をクリックします。
これにより、チャット画面からOllamaでダウンロードしたモデルを選択できます。それでは、モデルをGPT-4oからDeepCoderに変更してみましょう。
これで、設定は完了です。
チャットの挙動がおかしい場合、VS Codeの設定とプラグインを初期化すると直る可能性があります。VS Codeの設定の初期化方法は以下の手順です。
rm -rf ~/.vscode rm -rf ~/Library/Application\ Support/Code
Remove-Item -Recurse -Force $env:USERPROFILE\.vscode Remove-Item -Recurse -Force $env:APPDATA\Code
なお、本稿執筆時点では、ローカルモデルを利用中のオフライン環境において、AIがGitHub Copilotにアクセスしようとして失敗し、チャットを利用できなくなる不具合がまれに発生します。これについては、VS CodeやGitHub CopilotのIssueに修正リクエストが上がっているので、今後解決される可能性はあります。
ここでは、GitHubで公開されているFlaskによるTODO管理のサンプルアプリケーションを利用します。お手持ちのアプリケーションコードで試したい場合はスキップしてください。
下記のコマンドを実行してPCにサンプルアプリケーションダウンロードします。ダウンロード後、VS Codeのワークスペースとして開いてください。
git clone https://github.com/NonokaM/flask-todo-example
なお、flask-todo-exampleは下記のようなシンプルなファイル構成のアプリケーションとなっています。
app.py template/ index.html static style.css
さて、生成AIによる支援機能を使っていきましょう。AIに支援してもらいたいコードを開いて選択します。サンプルアプリケーションのapp.pyにあるadd関数を選択し、右クリック(macOSの場合は[Ctrl]キー+クリック)し、Copilotを選択するとメニューが表示されます。
Editor Inline Chatを開き、「/explain 日本語で」と入力します
すると、日本語で選択したコードについてAIが説明します。
Copilotメニューの「Explain」を選択して説明させることも可能です。ただしこちらの場合、英語で解説されることも多く、「Editor Inline Chat」から選択して「日本語で」と追加するとよいでしょう。
Editor Inline Chatで利用できるコマンドには、/explain以外に次のようなコマンドがあるので、試してみてください。
コマンド | 説明 |
---|---|
/doc | コードにコメント追加 |
/edit | コードの編集 |
/explain | コードの解説 |
/fix | コードの修正 |
/generate | コードの生成 |
/test | テストコードの作成 |
VS Codeのチャット画面には、Ask、Edit、Agentの3つのモードがあることは冒頭でも紹介しました。モードごとの違いと使い分けのポイントは以下の通りとなります。
モード | 主な目的 | 出力、影響範囲 | チャット画面以外の実行方法 |
---|---|---|---|
Ask | 質問、コードの解説 | チャットに返答 | |
Edit | コードの編集提案 | 選択コードの変更提案 | コード選択→右クリックなど |
Agent | 複雑なタスクの実行 | 複数ファイル、プロジェクト全体 | コマンドパレット |
それぞれ具体的に何ができるのか、見ていきます。
Askモードでは、エディタ上で表示されているコードやVS Code上のターミナルの実行結果/エラーメッセージについて生成AIに問い合わせ、コードの説明やレビュー、エラーメッセージの解決方法の提示などをさせることができます。
試しに、コードのレビューを指示してみました。
コードのレビュー依頼
app.pyを開いた状態で、チャットに以下の文章を入力します。
あなたは優秀なソフトウェアエンジニアです。以下の点に注意してレビューしてコメントしてください: * コードの可読性(変数名、関数名、コメントなど) * コードの保守性・再利用性(関数分割、DRY原則など) * パフォーマンス上の懸念点(無駄な処理、非効率なアルゴリズムなど) * バグや論理ミスの可能性(明らかな不具合や意図しない挙動) * セキュリティ上の懸念点(入力検証、サニタイズ不足など) * コーディング規約との整合性(言語・プロジェクトに応じて) レビューの結果は以下のフォーマットで出力してください: # 指摘点(タイトル) ## 修正前コード: 修正前のコード ## 内容: 何が問題か簡潔に説明 ## 重要度: [低 / 中 / 高] ## 対応案: どう修正するべきか提案
入力すると、下記のような画面になります。
チャット画面のテキストボックスの上部に「app.py」が選択されていることに注意してください。この部分はコンテキストと呼ばれ、AIに渡す情報を設定する場所となります。
なお、「コンテキストの追加」から、他のファイルやフォルダをコンテキストとして追加できます。その他、エラーメッセージを解析させる際には、Terminalの実行結果(Add Context→Tools→TerminalLastCommand)などもコンテキストに渡すことができます。
上記のプロンプトでコードをレビューした結果、セキュリティとエラーに関する2つの問題を指摘してくれました。
コードの右上のアイコンを開いて、これらの提案を承認すると、コードに変更を反映できます。
エラーの修正
ただ、ソースコードを反映しても正しく動作しないことがあります。コードを反映し、VS CodeのTerminal上で実行すると、次のようなエラーが出力されました。
この場合、チャットのテキストボックス上部の「Add Context」をクリックし、「Terminal Last Command」を選択し、「エラーを修正」と入力します。
すると、Flaskの最新バージョンではescape関数が削除されたことを説明した後、修正案のコードが提示されました。
提示された内容は先述したように、右上のアイコンからコードに反映できます。
なお、DeepCoderは日本語能力に優れていないため、上記のスクリーンショットのように英語で出力されることもあります。
Editモードでは、現在開いているファイルに対して、AIを利用して編集できます。
サンプルコードはコメントがないので、下記の指示を入力して、コメントを追記してもらいましょう。
各メソッドの機能が分かるように日本語でコメントを追記
モードがEditとなっている点とテキストボックス上部のコンテキストにapp.pyが選択されていること確認します。
実行が完了すると、下記のように、app.pyにコメントが追記されます。
コメント部分ごとにチェックボックスがあり、チェックすると変更を反映できます。また「Keep」をクリックして編集全体を一括反映することも可能です。
Agentモードでは、ワークスペース内のファイルを横断的に解析し、複数のファイルに対するリファクタリングや機能追加、テスト作成など複雑な作業にも対応しています。
アプリケーションやテストの実行もチャットから指示できます。そのため、アプリケーションやテストの実行方法を知らなくても「アプリを実行」「テストを実行」と指示するだけで、さまざまな作業を簡単に自動化できます。またMCPによる外部ツールの呼び出しも可能になっており、まさに開発者の代理人(エージェント)として動いてくれます。
先述した通り、Agentモードはデフォルトでは、Tool Calling(Function Calling)に対応するモデルしか選択できません(2025年5月時点でDeepCoderは利用できません)。ただし、VS Codeのsettings.jsonでツール呼び出し機能のチェックを無効化することにより、全てのモデルでAgentモードが利用できるようになります。
"chat.agent.allModels": true
これにより、DeepCoderもAgentモードで利用可能となります。
チャットモードを「Agent」に変更して、下記のように機能の追加を指示します。
TODOを一括登録する画面を追加してください
すると、ソースコードを解析し、ここでは、以下のコードを追加してくれました(※実行結果は毎回異なります)。
チャット画面に表示されたコードの右上にあるApplyアイコンをクリックすることにより、コードの追加を承認します。
次のような画面になり、エディタ内にコードが追加されます。
チャット画面に表示されたその他の箇所にも同様の操作をすることで、TODOアイテムを一括登録する機能を実装できます。
なお、利用するモデル(特にGPT-4oやClaudeなど高性能なモデル)によっては、直接エディタにコード案を提示してくれることもあります。その場合は、コード上から変更案を承認できます。
本稿では、VS Code 1.99で追加された生成AI機能について、Ollamaでダウンロードしたモデルを利用しながら解説しました。ローカルモデルの利用には一部制限があるものの、今後の改善に期待が持てます。そして今回利用したDeepCoderは今後正式リリースが予定されており、さらなる精度向上にも注目です。
Copyright © ITmedia, Inc. All Rights Reserved.