unless’s blog

日々のちょっとした技術的なことの羅列

OpenAI APIを使ってサクッと生産性を上げるツールを作ってみた

みなさんもご存知のように、ChatGPTによる台頭が生成AIブームを引き起こしています
せっかくなのでこの波に乗ってみようと思い、OpenAIのAPIを使用して簡単なツールを作成しましたので紹介します

OpenAI API

OpenAI APIは、ChatGPTで有名なOpenAIが提供しているAPIです

openai.com

OpenAIのAPIサービスにはいくつかの種類があります。どのような種類のAPIがあるかはDocsを参照することでわかります

詳しい解説は別のブログに譲ることにします

commit-wiz

github.com

1つ目は"commit-wiz"というツールを作成しました
このツールはGitのDiffを読み取り、どのような変更内容かを解析し、Commitコメントを提案してくれるツールです
きちんとした組織であればCommitコメントが整備されている環境もあるかと思いますが、ベンチャー企業などではCommitコメントの粒度やフォーマットが整っていないこともよくあります

さらに、"Fix"や"commit"といったコメントが横行することもよくあるかと思います
このツールを使用することで、簡単にマシなCommitコメントを生成することができます
ちなみに、このツールのCommitコメントのほとんどはこのツール自体で生成されています

Commits · ouchi2501/commit-wiz · GitHub

Commitコメントの生成にはChat completions APIというAPIを使用しています

platform.openai.com

func requestOpenAI(ctx context.Context, key string, gitDiff string, length int) string {
    client := openai.NewClient(key)
    response, err := client.CreateChatCompletion(ctx, openai.ChatCompletionRequest{
        Model: openai.GPT3Dot5Turbo,
        Messages: []openai.ChatCompletionMessage{
            {
                Role:    openai.ChatMessageRoleSystem,
                Content: fmt.Sprintf(systemContent, length),
            },
            {
                Role:    openai.ChatMessageRoleUser,
                Content: gitDiff,
            },
        },
    })
    if err != nil {
        panic(err)
    }
    return response.Choices[0].Message.Content
}

このツールはGo言語で作成しており、公式サイトに掲載されている有志によるコミュニティライブラリを利用しています

OpenAI Platform

このライブラリを使用することで、OpenAIのAPIをかなり簡単に利用できます
実際、このツール自体もコンパクトな実装で済んでおり、大枠を作成するのに1時間程度しかかかりませんでした

code-explain

github.com

image

2つ目は、選択したコードを英語または日本語で要約してくれるNeovimのプラグインを作成しました
自分自身の経験から、エンジニアはコードを書く時間よりも読む時間の方が多いと考えています
また、読み取りにくいロジックに出くわすことも多いです
そこで、このプラグインを使用しAIがコードの処理内容を要約してくれることで、コードの理解を迅速化できるでしょう
VS CodeにはGitHub Copilot Labsによって同様の機能が提供されていますが、自分はNeovimを使用しているためNeovim向けのプラグインを作成しました

githubnext.com

こちらもcommit-wizと同様にChat completions APIを使用しており、curlを使って呼び出しています
Vimプラグインの作成は初めての経験でしたが、意外と簡単に作成できました

さいごに

このように、最近話題の生成AIを活用して簡単なツールを作成しました
OpenAIのAPIは様々な言語のコミュニティライブラリが充実しており、使いやすいため生成AIを活用したツールやプロダクトのアイデアがある方はぜひ挑戦してみることをお勧めします

また、私が所属しているCyberAgentのDeveloper Productivity室ではDeveloper Productivity Engineerを募集してます
開発生産性を高めるための特命ミッションを担うチームで、技術者への最高の開発体験実現と、技術者が本質的な開発に専念できるようにするための環境づくりをしています
開発生産性の向上やDevOpsに興味があれば、ぜひカジュアル面談しましょう

site.developerproductivity.dev