とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

vLLMとGooseを連携してローカルLLMでコーディング

先日このような記事を書きました。

devops-blog.virtualtech.jp

これはOllamaとGooseをすべてローカルの環境にインストールして、アプリ開発に使うのを想定しました。

最近のクライアントは性能が高く、すべてローカルに閉じても十分活躍してくれると思いますが、開発用の環境はとにかく色々なものが同時に動いているため、AIを動かす余力が残っていないということもあるかと思います。そもそも理想的なスペックのマシンを割り当てられていないと言う悲しい事例もあるかもしれません。

そんなあなたにおすすめなのが、リモート上のつよつよマシンでLLMサーバーを動かして、それを手元のクライアントで使うと言う方法です。 ここでいうリモートとは、あくまで同じネットワーク内にあるマシンという話です。場合によってはVPN越しの社内ネットワークのマシンになるかもしれません。

それを実現するには色々な方法がありますが、姉妹サイトの仮想化通信の方でせっかくvLLMをとりあげましたので、今回はLLMサーバーとしてvLLMを使う構成で解説しようと思います。

vLLMのセットアップ方法については次で解説しています。そちらをご覧ください。

tech.virtualtech.jp

では、構築したvLLMをどのように開発マシンから利用すればいいでしょうか。今回はGooseを使った方法をご紹介します。

Gooseをおすすめする理由

Gooseはオープンソースのソフトウェアです。アプリ版とコマンドライン版が提供されています。 アプリ版はAIエージェントとチャット形式で対話しながらアプリ開発する場合に向いています。 コマンドライン版は開発環境のIDE等からアクセスするのに最適です。

2つのインターフェースがあるので、必要に応じて選択できます。

GooseはローカルLLMのほか、色々なSaaSのサービスと連携して使うこともできます。開発の規模が大きくなってSaaS後からが必要になった場合も、同じツールをそのまま使う事ができます。

なにより、Goose自身には何も制限がなく無料で使えるというメリットがあります。完全にローカルに閉じて使うこともできますし、今回のようにローカルネットワーク上のLLMサーバーと連携して使うこともできます。SaaSのAIサービスと連携して使うことも可能です*1

Gooseと連携する方法

vLLMの起動

前の記事を参照いただくとして詳細は省略します。vLLMを起動次のような感じで、セットアップします。 オプションは、vLLMが何のアクセラレーターを使って動かすのかとか、たとえばアクセラレーターとしてGPUを使う場合、NVIDIAのGPUなのか、AMDのGPUなのか、GPUのグレードは何かとか、AIのモデルは何にするのか、どれくらいのコンテキストを許容するのかとか、とにかく色々な要素があります。

最適値はChatGPTとかGemini等と対話して決めていけばいいでしょう。とにかくトライアンドエラーです。 今回は次のようなパラメーターで動かすのを例とします。

max-model-lenは大きい値を設定するほど、ものすごく長大なテキストをAIとやりとりできますが、大きくなればなるほどリソースを多く消費します。GPUの場合はGPUメモリーです。今回利用しているgemma-4-26b-a4b-itはmax-model-lenもパラメーターをかなり大きく設定しているので、NVIDIA A100のGPUは80GBのモデルがうごいているのですが、メモリーの使用状況が74,653MiB / 81,920MiBでした。結構ぎりぎりまで使っています。ただここまでリソースを使っているのもあり、チャット形式のやり取りではかなり高速に動いてくれるので、良い感じです。

cd ~/vllm
mkdir -p templates
curl -L \
  https://raw.githubusercontent.com/vllm-project/vllm/main/examples/tool_chat_template_gemma4.jinja \
  -o ~/vllm/templates/tool_chat_template_gemma4.jinja

uv run python -m vllm.entrypoints.openai.api_server \
    --model google/gemma-4-26b-a4b-it \
    --dtype bfloat16 \
    --max-model-len 32768 \
    --gpu-memory-utilization 0.90 \
    --port 8080 \
    --host 0.0.0.0 \
    --enable-auto-tool-choice \
    --tool-call-parser gemma4 \
    --chat-template templates/tool_chat_template_gemma4.jinja \
    --default-chat-template-kwargs '{"enable_thinking": false}' \
    --override-generation-config '{"max_new_tokens": 4096, "temperature": 0.0}'

(2026/04/22オプションをアップデート)

GooseとvLLMをつなぐ

openai.api_serverのオプションを指定しているので、OpenAI API互換のサーバーとしてvLLMが動きます。 そのため、GooseにはOpenAI サーバーとしてプロバイダーの登録をすれば良いと言うことになります。

詳細はSupported LLM Providersをご覧いただきたいですが、最低限はここら辺の設定がされていれば良いことになります。vLLMのサーバーのIP、ポートは8080を指定しているので、次のような感じで設定します。

CLI版のGooseの場合はgoose configureを実行して、選択肢から「Configure Providers → OpenAI」を選び、後は上の設定から質問されたものを入力していくだけです。OPENAI_HOSTで指定したノードにアクセスできると最後にモデルの選択がされるので、適切なものを選択します。vLLMの場合は1つのポートで使えるモデルは1つだけだと思われるので、1つのモデルしか出てこないでしょう。

設定が完了すると、最後のこのようなメッセージが表示されて設定は終わりです。この設定を開くと今まで設定した設定が書かれています。

◒  Checking your configuration...   
└  Configuration saved successfully to /Users/ytooyama/.config/goose/config.yaml

アプリ版の場合も基本的には同じような感じです。Gooseのアプリを開き、設定を開いてモデルの設定を変更からOpenAI Providerを選択して、次のような設定をして設定を保存、後は使うだけです。

使ってみる

CLI版はお気に入りのターミナルから、gooseコマンドを実行して呼び出します。後はチャットで対話しながら開発します。 gooseコマンドを実行する前に、プロジェクトディレクトとリーへのチェンジディレクトリーをお忘れなく。

アプリ版はChatGPTとかClaude Desktop等でなれているとはおもいますが、チャット形式でやり取りして開発します。 開発中のコードは都度コードの実行もできますし、ソースをVSCodeで開いたりも可能です。

慣れるとCLIの方が軽快に動いて良いです。

*1:AIサービスの利用規約や課金体系によります。公式のクライアント以外を使う場合、API課金が必要である可能性があります