プログラミング・スキルアップ

Foundry Local入門2026|API課金ゼロでLLMを動かす全手順

読了時間: 約15分

Claude APIのトークン課金を眺めながらプロトタイプを回す日々。テスト用のチャットボットだけで月$40を超えた請求書が届いた。「ローカルで済む処理はローカルに逃がすべきだ」と腹を括ったタイミングで、2026年4月9日にGA(一般提供)を迎えたのがMicrosoft Foundry Localだ。

約20MBのパッケージをインストールするだけで、Phi-4やDeepSeek R1が自分のマシン上で動く。クラウド通信なし。従量課金なし。OpenAI互換のAPIをローカルで叩ける。実際にプロトタイプのバックエンドをこのツールに差し替えてみたところ、API課金は月$40から$0になった。Ollamaと何が違うのか、どこまで実務に耐えるのか。導入からPython SDKでのアプリ構築、Whisper音声文字起こしまで、手を動かした結果を整理する。

Foundry Localの正体

一言で片づけると、MicrosoftがONNX Runtime上に構築した「ローカル推論専用の実行環境」だ。クラウドのAzure AI Foundryと同じモデルカタログ体験を、手元のPCで再現する。弁当箱に例えるなら、Azureがレストラン、このツールは同じレシピで作るテイクアウト弁当に近い。

構成は3層。

  • モデルカタログ -- Microsoftが量子化・最適化済みのモデルを配布。foundry model listで一覧を取得し、ダウンロードするだけ
  • 推論エンジン -- ONNX Runtimeが裏側で動く。GPUがあればCUDA、NPUがあればNPUバリアント、どちらもなければCPUへ自動フォールバック
  • OpenAI互換API -- http://localhost:5272 で立ち上がるローカルサーバー。既存のOpenAI SDKコードをほぼ無修正で流用できる

開発者にとって大きいのは、ハードウェアの差異を吸収してくれる点だ。対応範囲が広い。NVIDIA GPU(2000シリーズ以降)、AMD GPU(6000シリーズ以降)、Intel NPU、Qualcomm Snapdragon X Elite、Apple Silicon。筆者のチームではWindows(RTX 4070)とMac(M3 Pro)が混在しているが、同じPythonコードがどちらでも動いた。環境差を意識せず済むのは、地味だが開発速度に直結する。

Azure AI Foundryとの関係

Foundry Localは開発・テスト向けのローカル実行環境。本番スケールが必要になったらAzure AI Foundryへモデルを移行できる設計になっている。「ローカルで試して、クラウドで本番」という導線をMicrosoft自身が整備した格好だ。VS CodeがIDEの入口としてAzureへの導線を作ったのと同じ構図に見える。

Ollama・LM Studioとの使い分け

項目 Foundry Local Ollama LM Studio
推論エンジン ONNX Runtime llama.cpp llama.cpp
モデル形式 ONNX(Microsoft最適化) GGUF GGUF
カタログ規模 約20種(厳選) 数千種(コミュニティ) 数千種(HF連携)
NPU対応 Intel / Qualcomm / AMD 限定的 限定的
OpenAI互換API あり(port 5272) あり(port 11434) あり
GUI なし なし あり
公式SDK Python / JS / C# / Rust Python / JS / Go等 TypeScript
音声モデル Whisper内蔵 なし なし
本体サイズ 約20MB 約100MB 約300MB
月間DL数(2026Q1) 非公開 5,200万 非公開

選び方は明快だ。

Foundry Localが合う場面。 NPU搭載のCopilot+ PCで推論を走らせたい。Whisperの音声文字起こしも1ツールで済ませたい。Azureへ将来移行する可能性がある。こういう条件が1つでも当てはまるなら、Foundry Localを起点にするのが筋が良い。

Ollamaが合う場面。 コミュニティモデルを自由に試したい。GGUFで量子化パラメータを細かく制御したい。既にOllamaベースのワークフローが回っている。月間5,200万ダウンロードのエコシステムはトラブル時の情報量が桁違いだ。

LM Studioが合う場面。 GUIでモデルを選んですぐ試したい非エンジニア。チーム内デモでの「とりあえず動くもの」が必要なとき。

インストールから初回起動まで

ここではmacOS(Apple Silicon)での手順を中心に示す。Windowsはwingetに読み替えるだけで、Linuxもパッケージマネージャが変わる以外は同じ流れだ。

Step 1: CLIのインストール

bash
# macOS / Linux
brew install foundry-local

# Windows
winget install Microsoft.FoundryLocal

# 確認
foundry --version

Step 2: モデルのダウンロード

bash
# カタログ確認
foundry model list

# Phi-4 mini(3.8B、約2.4GB)をダウンロード
foundry model download phi-4-mini

# DeepSeek R1 7B(推論特化)も追加
foundry model download deepseek-r1-7b

保存先は~/.foundry/models/。ストレージを圧迫しそうならFOUNDRY_MODEL_DIR環境変数で外付けSSDに逃がせる。Ollamaだとキャッシュパスの変更に設定ファイルの編集が要るが、こちらは環境変数1本。この差は些細に見えて、CIで複数マシンにデプロイするときに効いてくる。

Step 3: ローカルサーバーの起動と動作確認

bash
# サーバー起動
foundry service start

# 動作確認
curl http://localhost:5272/v1/models

{"object":"list","data":[{"id":"phi-4-mini",...}]} のようなJSONが返れば起動完了。ここまでの作業でつまずく要素はほぼない。

推論環境はこれで整った。次は、どのモデルを落とすかを判断する。

対応モデル一覧と選び方

2026年4月時点のカタログから、実用上の選択肢を整理した。

モデル パラメータ 用途 VRAM目安 特徴
Phi-4 Mini 3.8B 汎用チャット・コード補完 約3GB 最初に試すならこれ一択
Phi-4 Reasoning 14B 数学・論理推論 約10GB 推論チェーン付き応答を返す
Qwen 2.5 Instruct 0.5B〜3B 軽量チャット・テキスト分類 0.5〜2GB 8GB RAMのPCでも動く
DeepSeek R1 7B / 14B 推論・コーディング 5〜10GB オープンソース推論モデルの定番
Mistral 7B 7B 汎用チャット 約5GB 英語タスクに強い
Whisper -- 音声文字起こし 約1.5GB 日本語音声にも対応

自分ならまずPhi-4 Miniで動作確認し、タスクに応じてDeepSeek R1やWhisperを足していく。Qwen 2.5の0.5Bは8GBメモリのノートPCでも走る軽さで、テキスト分類や定型応答にはこれで十分だ。

日本語性能はモデル次第

カタログのモデルは英語中心でチューニングされている。日本語チャットならPhi-4 MiniかQwen 2.5が比較的まともに動くが、長文要約や敬語の使い分けではクラウドAPIに及ばない。軽い処理はローカル、品質が要る処理はAPIという切り分けが現実的だ。

Python SDKでチャットアプリを作る

OpenAI互換APIが立っているので、既存コードの書き換えは最小限で済む。エンドポイントを差し替えるだけだ。

SDKの導入

bash
# macOS / Linux
pip install foundry-local-sdk

# Windows(GPU加速を使う場合)
pip install foundry-local-sdk-winml

最小構成のチャット

Python
from foundry_local import FoundryLocalManager
from openai import OpenAI

# Foundry Localの起動とモデルロード
manager = FoundryLocalManager()
model_id = manager.download_and_load("phi-4-mini")

# OpenAI互換クライアント
client = OpenAI(
    base_url=manager.endpoint,
    api_key="not-needed"  # ローカルなので認証不要
)

response = client.chat.completions.create(
    model=model_id,
    messages=[
        {"role": "system", "content": "簡潔に日本語で回答してください。"},
        {"role": "user", "content": "Pythonのリスト内包表記を1文で説明して"}
    ]
)

print(response.choices[0].message.content)

# メモリ解放
manager.unload(model_id)

api_key="not-needed"の行が全てを物語っている。認証なし。トークン計測なし。課金なし。既存のOpenAI SDKプロジェクトでbase_urlapi_keyの2行を書き換えるだけで、ローカル推論に切り替わる。実際に社内のFAQボットをこの方法で移行したが、コード差分は5行だった。

ストリーミング応答で体感速度を上げる

Python
stream = client.chat.completions.create(
    model=model_id,
    messages=[
        {"role": "user", "content": "FastAPIの基本的なルーティングを教えて"}
    ],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

M3 Pro(18GB)でPhi-4 Miniをストリーミングした実測値を載せておく。初回トークンまで約1.2秒。以降は毎秒30〜40トークン。クラウドAPIだとネットワーク往復で200〜500msのオーバーヘッドが乗るが、ローカルならゼロだ。「今日の予定を教えて」程度の短い応答なら、体感でクラウドの倍は速く感じる。

LangChainとの接続

Python
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="http://localhost:5272/v1",
    api_key="not-needed",
    model="phi-4-mini"
)

response = llm.invoke("RAGシステムの設計パターンを3つ挙げて")
print(response.content)

RAGパイプラインではChatOpenAIbase_urlだけ差し替えればいい。Embedding部分はOpenAIのまま残してもコードの分岐は不要だ。テキスト処理の配線はこれで足りる。

もう1つ、OllamaにもLM Studioにもない機能を使ってみる。

Whisperで音声文字起こし

テキスト生成と音声文字起こしが同じ環境で動く。機密性の高い社内会議の録音をクラウドAPIに投げるのは、管理部門が首を縦に振らないケースが多い。そういう場面でWhisperがローカルで回るのは話が早い。

Python
from foundry_local import FoundryLocalManager
from openai import OpenAI

manager = FoundryLocalManager()
whisper_id = manager.download_and_load("whisper")

client = OpenAI(
    base_url=manager.endpoint,
    api_key="not-needed"
)

with open("meeting.wav", "rb") as audio:
    transcript = client.audio.transcriptions.create(
        model=whisper_id,
        file=audio,
        language="ja"
    )

print(transcript.text)

30分の日本語会議音声(WAV、約150MB)をM3 Proで処理したところ、所要時間は約4分。「プロジェクトマネージャー」が「プロジェクト真似者」になるような固有名詞の誤認識は散見されたが、文脈から修正できるレベルだった。クラウドに音声を送れない機密会議の議事録作成なら、これで十分回る。

1つ注意点がある。複数話者の分離(ダイアライゼーション)には非対応だ。「誰が何を言ったか」を区別するには、Claude CodeやGPT-4oで後処理を挟む必要がある。Whisperで文字起こし → LLMで話者分離という2段構成が、2026年4月時点での現実的な落としどころだろう。

使ってわかった制約と注意点

正直なところ、GA直後のツールには粗さが残る。導入前に知っておかないと時間を無駄にする制約を列挙する。

モデルの選択肢が狭い

ここが最大の不満だ。Ollamaの数千モデルに対して、カタログは約20種しかない。Llama 4もGemma 4も、2026年4月時点では載っていない。Microsoftが1つずつONNX最適化を施して配布する方式のため、新モデルの追加は数週間〜数ヶ月遅れる。最新モデルを即座に試す用途には向かない。

大型モデルは対象外

カタログの最大はDeepSeek R1の14B。70Bクラスは守備範囲外だ。エッジデバイスや一般的な開発PCを前提に設計されているので、意図的な線引きだろう。大型モデルが必要ならOllamaか、素直にクラウドAPIを使う。

GGUFモデルのインポートに非対応

ONNX形式に変換済みのHugging Faceモデルは読み込めるが、GGUFやSafetensors形式からの直接インポートは非対応だ。Ollamaならollama pull一発で終わる操作が、こちらではONNX変換パイプラインを自前で組むことになる。Microsoft Oliveという変換ツールが一応あるが、初見でスムーズに使えるかというと怪しい。ドキュメントを3回読み直してようやくモデル変換に成功した。

ドキュメントの混在問題

Microsoft Learnで検索すると、クラウド版「Azure AI Foundry」のドキュメントが混じって表示される。これが厄介だ。ローカル固有のAPIリファレンスを探すのに30分費やした経験がある。結論、公式GitHubリポジトリ(microsoft/Foundry-Local)のREADMEとサンプルコードから辿るのが最短ルートだった。

WSL2は未サポート

2026年4月時点でWSL2上では動作しない。Windows上で直接インストールする必要がある。WSL2でOllamaを使っている開発者は、Foundry LocalについてはWindows側に別途インストールすることになる。

よくある質問

Q. 完全に無料で使える?

無料。モデルのダウンロードもローカル推論もライセンス料はかからない。各モデル自体のライセンス(Apache 2.0やMITなど)に従う必要があるが、Foundry Local本体に費用は発生しない。

Q. GPUなしでも動く?

動く。CPU推論に自動フォールバックするので、8GB RAMのノートPCでもQwen 2.5の0.5Bなら実用的な速度が出る。ただしPhi-4の14BクラスをCPUで回すと1トークン数秒かかり、チャット用途には厳しい。

Q. Ollamaと同時に使える?

問題なく共存する。Foundry Localはポート5272、Ollamaは11434で起動するのでポート競合は起きない。両方を立ち上げておき、タスクに応じて使い分ける運用が一番現実的だ。

Q. インターネット接続は必要?

モデルの初回ダウンロード時だけ必要。一度ダウンロードしたモデルはローカルにキャッシュされるので、以降はオフラインで推論できる。機内や社内のエアギャップ環境でも動く。

Q. 商用利用は可能?

Foundry Local自体はMITライセンス。各モデルのライセンスに従えば商用利用も可能だ。Phi-4はMIT、Qwen 2.5はApache 2.0で、いずれも商用利用を許可している。

まとめ

Microsoftが品質保証したローカルLLM実行環境。モデル選択肢はOllamaに遠く及ばない。しかしNPU対応の幅広さ、Whisper統合、ONNX Runtimeの安定性、Azureへの移行パス -- この4点はOllamaにもLM Studioにもない。

自分ならこう使い分ける。プロトタイプ初期でAPI課金を削りたいとき。機密データをクラウドに送れないとき。NPU搭載の社用PCで推論を回したいとき。この3場面ではFoundry Localを選ぶ。最新モデルを即座に試したい、70B以上を動かしたい場面ではOllamaに切り替える。両方をポート違いで立てておく運用が、現時点でのベストだと思っている。

VS CodeもTypeScriptも、出始めは「またMicrosoftか」と冷めた目で見られていた。数年後にデファクトになった。このツールが同じ道を辿るかはわからないが、brew install foundry-localの1行で試せる以上、触っておいて損はない。