👾

ChatGPTにコードレビューをさせてみた

2023/03/21に公開

有給を取って4連休だったので、
流行りのChatGPTにコードレビューさせるWebアプリをつくってみた。
https://gptreview.dev

着想

個人開発してたりするとレビュー相手が欲しくなるもので、流行りのChatGPTを使っていたりした。
しかし、やり取りがまあまあ面倒なので「ファイルをアップロードしたら勝手にレビューしてくれないかなー」と思い開発に至った。

ターゲット

  • 個人開発をしている人
  • ジュニアレベルのITエンジニア

実装

最低限の機能要件的としては

  • ファイルのアップロード
  • アップロードしたファイルの解析をOpenAIのAPIで行う
  • コードレビュー指摘を日本語200文字以内で行う(文章が途切れるため)

実装は極めて簡単だった。
技術スタックは以下

  • Python3.11.2
  • Django4.0.3
  • TailwindCSS2.2.19
review.py
import requests
import os

def generate_review(code):
    # APIキーを環境変数から取得
    OPENAI_API_KEY = os.environ['OPENAI_API_KEY']

    # APIリクエスト用のヘッダーを設定
    headers = {
        'Authorization': f'Bearer {OPENAI_API_KEY}',
        'Content-Type': 'application/json',
    }

    # APIリクエスト用のデータを設定
    data = {
        'prompt': f'200文字以内で日本語のみでコードレビュー指摘をしてください:\n{code}\nレビュー:',
        'temperature': 0.7,
        'max_tokens': 300,
    }

    # APIリクエストを送信
    response = requests.post('https://api.openai.com/v1/engines/text-davinci-002/completions', headers=headers, json=data)

    # APIリクエストのレスポンスをプリントアウト
    print(response.text)

    # 応答をJSON形式で取得し、生成されたテキストを抽出
    response_json = response.json()
    if response_json.get('choices'):
        generated_text = response_json['choices'][0]['text'].strip()
    else:
        generated_text = 'Error: APIからのレスポンスがありません'

    # 生成されたテキストを整形
    formatted_text = generated_text.replace('\n\n', '\n')

    return formatted_text

24時間経たないぐらいで完成して、どこにデプロイするか考えていた。
デプロイ先をChatGPTに聞いてみると何故かとてもHerokuをおすすめしてきたが、
あまり使ったことのないGCPにデプロイを行った。

GCPへのデプロイは以下を参考にした。
https://laboratory.kiyono-co.jp/1261/gcp/

デプロイしてツイートした後のめちゃめちゃ試されてる感...

詳しい実装内容は以下
https://github.com/radkmb/GPTReview

完成品

https://gptreview.dev

ファイルをアップロードすると、日本語でのレビューとコードの改善例を表示してくれる

これから

ディレクトリごとアップロードしたらどうなるのかな...など考えています🤔
あとは使っていただいてのフィードバックや、自分でも使いにくいところは修正していきます🧑‍💻

宣伝

私が働いている株式会社ファンコミュニケーションズではエンジニアの採用を強化しています。
Java, PHP, JavaScript, Spring Boot, Codeigniter4でビビッとくる方はDMください!

Discussion