概要
このガイドでは、Ollama を使ってローカルの gpt-oss-20b モデルでソースコードレビューを実行する方法を紹介します。
Ollamaはローカル実行に特化した軽量な推論サーバーで、API互換もあるためPythonなどから簡単に呼び出せます。
1. モデルの準備
まず、gpt-oss-20b モデルをOllamaにインポートします。
ollama pull gpt-oss:20b
2. 基本的なレビュー実行
Ollamaのコマンドラインから直接レビューを実行できます。
ollama run gpt-oss:20b "次のコードをレビューして改善提案をしてください: $(cat main.py)"
このコマンドでは、main.py の内容をプロンプトに埋め込んでいます。
3. PythonからAPIで実行する場合
OllamaはローカルAPIを http://localhost:11434 で提供しています。
Pythonから直接リクエストを送ることで、非対話的なレビューが可能です。
import requests
import json
code = open("main.py").read()
prompt = f"次のPythonコードをレビューし、問題点と改善提案を具体的に挙げてください:\n\n{code}"
payload = {
"model": "gpt-oss:20b",
"prompt": prompt,
"stream": False
}
res = requests.post("http://localhost:11434/api/generate", json=payload)
print(res.json()["response"])
4. ストリーミングでリアルタイム出力を受け取る
長い出力をリアルタイムで処理したい場合は、stream=True を使います。
import requests
import json
code = open("main.py").read()
prompt = f"次のコードをレビューしてください:\n\n{code}"
payload = {
"model": "gpt-oss:20b",
"prompt": prompt,
"stream": True
}
with requests.post("http://localhost:11434/api/generate", json=payload, stream=True) as r:
for line in r.iter_lines():
if line:
data = json.loads(line.decode("utf-8"))
if "response" in data:
print(data["response"], end="", flush=True)
5. カスタムテンプレートを使う場合
レビューを一定のフォーマットで出力したい場合、プロンプトを明示的に指定します。
prompt = """
あなたは上級ソフトウェアエンジニアです。
以下のコードをレビューし、次のフォーマットで出力してください。
1. 問題点
2. 改善提案
3. 潜在的なリスク
4. 最適化のアイデア
コード:
{code}
6. 結果例
以下、実際にコードレビューした結果を示す
レビュー対象ソース
レビュー結果
7. 応用:レビューを自動化スクリプトに統合
複数ファイルを自動でレビューするスクリプト例:
import os, requests, json
def review_file(path):
code = open(path).read()
prompt = f"このコードをレビューしてください:\n\n{code}"
res = requests.post("http://localhost:11434/api/generate",
json={"model": "gpt-oss:20b", "prompt": prompt})
print(f"=== {path} ===")
print(res.json()["response"], "\n")
for root, _, files in os.walk("./src"):
for f in files:
if f.endswith(".py"):
review_file(os.path.join(root, f))
まとめ
| 項目 | 内容 |
|---|---|
| 実行マシン | MacBookM4pro 12CPU 16GPU 24GB メモリ |
| 実行環境 | Ollama |
| モデル | gpt-oss:20b |
| メリット | ローカルでセキュアにレビュー可能 |
| 推奨モード | stream=True(リアルタイム出力) |
| 応用 | CI/CDパイプライン統合、Linter補助など |
📘 備考
- OllamaのAPIはOpenAI互換ではありませんが、形式はシンプルで扱いやすいです。
- 大規模コードレビュー時は
stream=True推奨。 - 結果をMarkdownとして保存すれば、そのままPull Requestコメントにも使えます。
この内容を .md ファイルとして出力したい場合、Pythonで簡単に書き出せます:
with open("ollama_code_review.md", "w") as f:
f.write(markdown_content)