『Software Design 2026年9月号』
本記事は、筆者が実際にローカルLLMを使用した経験を紹介することで、その追体験をしてもらいつつ、ローカルLLMに関する基礎知識や構成の具体的なケースを知ってもらうものです。
筆者がローカルLLMに触れた経緯
筆者が実際にローカルLLMを使い始めたのは、今から約3年前の2023年に遡ります。もともとは文章のベクトル検索などの、多次元ベクトルのクラスタリング問題に関心がありました。これは、自然言語で書かれた文章を、意味の近さを表す多次元の数値≒ベクトルに変換し、数学的に分類・
このようにローカルLLMに触れるうち、RTX 4070の12GBというVRAMでは動かせるモデルが限られることに不満を抱くようになり、もう少し大きなVRAMのグラフィックボードが欲しくなりました。そこで購入したのがRadeon RX 7600 XTというAMD製のGPUを積んだVRAM 16GBのグラフィックボードです。選定理由は、NVIDIA
ハードウェアに詳しい方には、ここまで挙げてきたグラフィックボードからもうおわかりかもしれませんが、筆者の好みはワットパフォーマンス
筆者の現在の主な興味は、ローカルLLMとAIエージェントを組み合わせたコーディングにあります。このRX 7600 XTをFedoraのマシンに載せ、llama.
今ローカルLLMである理由
具体的な話題に入る前にまず、筆者がなぜローカルLLMに注目するのかを解説します。
「定額でトークン無制限」時代の終焉
いくつかの理由があるのですが、1番目に挙げるべきは
またトークン単価こそ下がっていますが、タスク単位でのトークン消費量は劇的に上がっています。これはAIの能力や精度が、長大なコンテキストや思考
ただしここで留意すべきは、コストが3倍になったとしても、クラウドLLMのほうが安いということです。ローカルLLMの調達・
オープンウェイトモデルの進化
2番目の理由は、オープンウェイトモデルの能力が向上してきたことです。オープンウェイトモデルとは、AIが学習した結果のパラメータ
ローカルLLMを使ってみること自体の価値
また、蛇足かもしれませんが、もう1つだけそれらしい理由を挙げておきましょう。それは差別化です。今ITエンジニアの多くは、程度の差はあれどもその合理性に基づき、クラウドLLMを利用しています。しかしそこで最終的に成果を上げるのは、極論資本力にほかなりません。現状はまだエンジニアとしての経験がものを言う部分が大きいですが、お金さえ払えば誰でも同じような均質な成果を得られる未来は、一歩ずつ近づいています。そんな中で、ローカルLLMで得られる体験は、均質になりにくい≒差別化しやすい、ということが起こるかもしれません。これはロマンがある、ぜひ触れておきたい、そう思うのです。
ローカルLLMの構成
では、個人の環境で現実的に動かせるローカルLLMはどう構築したらよいのでしょう? 基本的なローカルLLMの構成は、グラフィックボード
グラフィックボード
グラフィックボードにおいて、比較的にVRAMが多く、入手しやすいのがVRAM 16GBのラインになります。LLMを扱ううえではメモリは多いほうが有利なのですが、16GBを越えると価格上昇が急になります。GPUの選択肢としてはNVIDIA製が優勢なのですが、用途を推論に限るのならばAMDが割安なので選択肢に入ります。AMDはソフトウェア環境の構築・
メモリサイズを優先するならば、Unified Memoryを採用している、Mac製品各種やNVIDIA DGX Sparkとその互換機も悪くない選択肢となるでしょう。Unified Memoryとは、CPUとGPUが高速なメモリを物理的に共有するしくみのことです。広大なメインメモリをそのままGPUから使えることで、速度はグラフィックボードに劣るものの、大きなモデルを動かすことができる技術です。また、ここで挙げたDGX Sparkは、そのUnified Memoryを採用した、コンパクトなデスクトップ型のAI開発向けのワークステーションです。通常のPCでは実現できない大容量と広帯域のメモリを、手元で静かに扱える機材として注目されています。さらに、このDGX Sparkと同じアーキテクチャをノートPCで使うための、RTX Sparkが発表され、2026年秋の発売が予定されています。こちらもおもしろい選択肢になるんじゃないかと期待しています。
LLMの生成速度を重視する場合、NVIDIA RTX Pro Blackwellシリーズが最善の選択になるでしょう。ただしプロ用ということもあり、価格が100万円前後とお小遣いと言える範囲からは大きく逸脱するので、難しいところですね。
LLM推論エンジン
LLM推論エンジンとは、グラフィックボードやCPUの計算能力を活用し、モデルのウェイトデータを実際に読み込んでテキストの生成処理を行う、ローカルLLMにおける心臓部といえるソフトウェアです。いわば、モデルウェイトという映像データを実際の動画として画面に映す、再生プレイヤーのような役割だと考えるとわかりやすいでしょう。筆者がよく使っている推論エンジンはggml-org/
競合にはOllama、LM Studio、Unsloth Studioなどがありますが、いずれもllama.
llama.
オープンウェイトモデル
すでに述べたとおり、2025年後半から、量子化込みでVRAM 16GBで動き、コーディングエージェントとしてそこそこ機能するモデルが増えてきました。代表例はQwen3.
執筆時点でVRAM 16GBで動くモデルは、gpt-oss-20b、Qwen3.
ローカルLLMのモデル選びは極論、モデル本来のパラメータサイズとそれを削る量子化
コーディングエージェント/AIアプリケーション
コーディングエージェントは、プロンプトで指示することで、ソフトウェアプロジェクトに対してさまざまな操作を実行することができます。企業により提供されるコーディングエージェントには、Claude Code、Codexなどがあります。
オープンソースのコーディングエージェントにも、OpenCode、OpenHands、SWE-agents、Aider等々、複数の選択肢があります。オープンソースのコーディングエージェントは、AIのベンダーやモデルを自由に選べることから、ローカルLLMでの利用に適していると筆者は考えています。筆者は、その中でも特に自分が試してみたかった、Playwrightのテストエージェント機能が、OpenCodeに対応していたことから、OpenCode[2]を主に使っています。
筆者のローカルLLM環境構成
筆者が実際にローカルLLMを使っている構成はすでに示しましたが、ここで再度その詳細の紹介と、理由を説明します。
ここまでで説明していなかった最も重要な点は、ローカルLLMサーバーを動かすマシンと、実作業を行うワークスペースのマシンを分けているという点です。つまりリモートでローカルLLMサーバーを動かしています
実作業にはWindowsのMSYS2環境を利用しています。リモートのローカルLLMサーバーは、LinuxディストリビューションのFedoraでllama-serverを動かしてLAN越しにアクセスしています。詳細な構成は次のとおりです。
-
作業用マシン
- OS:Windows 11+MSYS2
(MSYSTEM=UCRT64) - AIアプリケーション
- OpenCode
(コーディングエージェント) - その他、自作のアプリケーション複数
- OpenCode
- GPU:RTX 4070
- CPU:Core i9-9900K
- RAM:64GB
- OS:Windows 11+MSYS2
-
ローカルLLMマシン
ローカルLLMを実行するマシンと、実作業用のマシンを分ける最大の利点は、長い時間がかかるタスクを実行している最中でも、実作業用のマシンに負荷がかからないことです。以前、作業用マシンのRTX 4070で推論作業を実行中に、そのままWebミーティングに参加してしまい、作業用マシンでのあらゆる作業がものすごく遅くなってしまったことがありました。この構成であればAIに作業させている間に、GPUを使うゲームももちろん快適に遊べますね。
llama-serverはOpenAI互換のAPIを提供してくれるので、リモートでLLMを動かすことが簡単です。リスト1にOpenCodeでリモートのローカルLLMを利用する設定例を示します。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"llama.cpp": {
"npm": "@ai-sdk/openai-compatible",
"name": "llama-server (LAN)",
"options": {
"baseURL": "http://192.168.0.2:8080/v1",
"apiKey": "dummy"
},
"models": {
"loaded-model": {
"name": "Loaded model"
}
}
}
},
"model": "llama.cpp/loaded-model"
}
この構成の弱点は、OpenCodeをWindowsのネイティブに近い環境で動かしていることです。OpenCodeは公式にはWSL内での実行を推奨しています。その推奨とは異なる環境で動かしていることで、AIが実行したツールが失敗し、余計な処理が必要になっているのを観測しています。いくつか取っている対策はあるのですが、公式に推奨されているWSL内で実行するほうが良い結果になりそうです。
もちろんWSLの中で動かせば、問題なく動く可能性が高いのはわかっています。しかし、筆者は昔からWindows/
ローカルLLMを使った作例
このようなローカルLLMを用いて、筆者がどのようなことをしてきたのかを紹介します。
E2Eテストの自動設計・自動作成
まずはローカルLLMでPlaywrightのテストエージェントを使った話を紹介しましょう。Playwrightのテストエージェント
導入は非常に簡単で、導入したいプロジェクトに対して次のコマンドでPlaywrightとテストエージェントをセットアップするだけです。
$ npm init playwright@latest $ npx playwright init-agents --loop=opencode
ここで実際にやっていることは、前述の3つのサブエージェントを定義するファイルの作成です。その後OpenCodeを起動し、/initコマンドでAGENTS.
> @playwright-test-planner OPFSプロトコルのE2Eテストを計画して
このようなアバウトな指示でも、ローカルLLMがソースコードを読み取ってそれなりの計画を作ってくれました[8]
# OPFS E2E Test Plan
## Application Overview
OPFS(Origin Private File System)プロトコルのE2Eテスト計画。NVGDサーバー(http://127.0.0.1:9280)の/opfs/パスで提供されるファイルシステムUIのテスト。OPFSはブラウザのnavigator.storage.getDirectory() APIを使用し、Secure Context(localhost/HTTPS)で動作する。テストはChromium、Firefox、WebKitの3ブラウザで並列実行。
## Test Scenarios
### 1. 01-navigation
**Seed:** `tests/seed.spec.ts`
#### 1.1. OPFSページが正常に読み込まれる
**File:** `tests/opfs/01-navigation.spec.ts`
**Steps:**
1. http://127.0.0.1:9280/opfs/ にアクセス
- expect: タイトルが"OPFS: /"である
- expect: h1に"OPFS: Origin Private File System"が表示される
- expect: パンくずリストに"(Root)"が表示される
2. ページタイトルを確認
- expect: ページタイトルが"OPFS: /"である
3. h1要素の内容を確認
- expect: h1要素に"OPFS: Origin Private File System"が含まれる
4. パンくずリストの内容を確認
- expect: パンくずリストに"(Root)"が表示される
#### 1.2. サブディレクトリのナビゲーション(クリック)
(..略..)
このあとの手順はジェネレータに実装させ、エラーがあったらヒーラーに直させるという手順になります。ただ正直に言いますと、この後に一発で全部のテストケースを実装できたわけではありません。というのも、一度のセッションで全部実装させるには、現時点のローカルLLMでは精度と速度が足らず、何回もやりとりを繰り返すことになったためです。1セッションで実装するテストケースは1個ずつにする、というような工夫が要りそうです。LLM自体が万能の魔法ではないと実感することで、逆にどうすれば実用に耐えうる使い方ができるかという、設計を楽しむ余地が残されている、と考えることもできますね。
翻訳専用モデルのクライアント
次は、翻訳用にファインチューニングされたモデルをローカルLLMとして動かし、それにアクセスするクライアント、すなわち簡易なエージェントを作った作例です。使用したモデルはwebbigdata/
ここで注目してほしいのは反復翻訳機能です。ここで言う反復翻訳というのは、翻訳する際に相互に翻訳を繰り返して、翻訳後の文の内容を検証する一連の作業のことです。やっていることは、目的の言語への訳文の変化がなくなるまで相互に翻訳を繰り返すだけなのですが、あらためて考えてみるとAIにおける
ちなみに最新のGemma 4では、ファインチューニングなしに翻訳が可能です。しかも140以上の言語に対応し、音声入力にも対応しているらしいです。本当にものすごく進化していますね。
ローカルLLMは、クラウドLLMよりも速度は圧倒的に遅いですが、意外としっかりした振る舞いをします。しかし精度と速度の問題はあるので、本格的に利用するには、エージェントやそのハーネスの設計で工夫のしがいがありそうです。
実際にローカルLLMを使ってみて、どう思ったか
2026年7月の執筆時点において、実際にローカルLLMを使ってみて、筆者がどのように感じたかを書きます。
まず何より、1年前に比べて、圧倒的にコードが書けるようになっていました。ローカルLLMとして動くreasoningモデル自体は、2025年の初頭から登場していました。しかし当初はいまいちだったと言わざるを得ません。でも今年は状況が一変しています。もちろんクラウドLLMに比べれば問題はあるものの、現時点でもはるかにコードが書けるようになっています。しかも、これまでの進歩の速度を考えれば、来年や再来年にはどうなってしまうのか、と期待をしてしまいます。
次に、速度をはじめとした実利を求めると、NVIDIA製GPUと比べるとAMD製のGPUはやはり弱いと思い知らされます。特にCUDAというソフトウェア環境の充実は、NVIDIAの大きな強みです。AMDにおいてCUDAと同等のレイヤーになるのがROCmですが、CUDAほどには多くの環境に提供されておらず、自分でビルドが必要だったりと一手間余分に必要です。そのためか推論エンジンにおいてもROCmへの最適化などが遅れ、ハード性能だけではなくソフトウェアでも一歩劣っている状況が、2026年現在でも続いています。
VRAMは32GBくらいあると、モデルの選択肢が広がり、遊べる≒試せることが増えそうです。16GBでは、強めの量子化を使っても20B程度までの中型モデルが、利用できる限界です。しかしオープンウェイトのモデルには、30Bから40Bのものもラインナップとして提供されがちです。そのあたりのモデルを試して比較したい、という気持ちになります。そこで今はNVIDIA RTX PRO 4500 Blackwellを購入するか迷い始めています。
最後に、実際にローカルLLMを触ってみたことで、Transformerの構造的な弱点を実感できました。Transformerはその動作において、大きく分けてPrefillとDecodeという2つの段階から成っています。PrefillというのはTransformerが文字を出力し始める準備段階で、Decodeは実際に1文字ずつ出力する段階です。どちらもコンテキストが長くなると、コンテキスト長nに対して、O(n2)の計算量がかかり、非常に遅くなっていきます。
KVキャッシュを利用していて、用途がチャットであれば、この計算量を実感することは少ないです。しかし特にコーディングエージェントでの利用で、ファイルを読んで一気にコンテキストが大きくなったときなどは、Prefillが終わって1文字目が出力≒Decodeされるまで、待ち時間は10分や20分にも至ります。マシンのファンは唸を上げ、熱い空気を吹き出します。しかし画面は通信中を示したまま静止しています。このローカルLLMにおける
このようなO(n2)のアルゴリズムを、サービスとして大規模に提供することを考えると、ITエンジニアとしては軽くめまいを覚えます。クラウドLLMが提供しようとしている
