0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gpt-oss-20b + Ollamaでソースコードレビューを行う方法

Last updated at Posted at 2025-10-29

概要

このガイドでは、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)

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?