ChatGPT APIでコードのリファクタリングをするサービスを作りました

![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90682/ad44976d-a6e9-79dc-106f-f679ffe1aa7a.png)

みなさんこんにちは [@y_temp4](https://twitter.com/y_temp4) です。

この記事では、先日公開された ChatGPT API を用いてコードをリファクタリングするサービスを作ってみたのでご紹介します。

サービス：[Refiner - AI-based code refactoring service](https://www.refiner.dev/)
リポジトリ：[y-temp4/refiner: The open-source Refraction alternative.](https://github.com/y-temp4/refiner)

このサービスは OSS にしているため、誰でもソースコードを閲覧できます！スターをつけてもらえると泣いて喜びます⭐️

## 作ろうと思ったきっかけ

元々、自分は ChatGPT の API を使って何か作ろうというよりかは、OSS 製の既存のサービスの代替サービスを何か作ってみたい、というモチベーションのほうが高かったです。

OSS の代替サービスには、例えば [calcom/cal.com: Scheduling infrastructure for absolutely everyone.](https://github.com/calcom/cal.com) のような感じで Calendly の OSS の版のサービスなどがあります。

このようなサービスは他にも複数あって、例えば以下の [awesome-oss-alternatives](https://github.com/RunaCapital/awesome-oss-alternatives) というリポジトリから OSS 代替サービスで有名なものの一覧が確認できます。

https://github.com/RunaCapital/awesome-oss-alternatives

自分は開発者として、特にジャンル問わず自分の好みのサービスを楽しく作れればいいな〜と思っていたので、日々何か良いアイデアは無いかな？と考えていました。

そんな中、ChatGPT API が公開され、「これはチャンスだ！」と思い、とりあえず前から気になっていた [Refraction](https://www.refraction.dev/) というコードのリファクタリング等を行ってくれるサービスの OSS 代替版を作ってみることにしました。

## 製作期間

新しくなった ChatGPT API が公開された翌日の朝から作成に着手し、その日の夜にリリースしました！

[Initial commit](https://github.com/y-temp4/refiner/commit/df740281ad6f31c3affa35314f1e5a50548e6826) から[最初のリリース](https://github.com/y-temp4/refiner/commit/13ed1e4b1d842ffcc3829e0124f6fc1e08fa05c9) までのコミットだけ見ると、制作時間は 10 時間ほどでしょうか。ただ、この間は割と普通の生活をしながら（？）開発をしていて、ずっと開発に没頭していたわけではないので、手を動かしていた時間はもう少し短いかなぁと思います。

## 採用技術

リポジトリの README にも書いてありますが、今回のサービス開発では主に以下の技術を採用しています。

- [OpenAI GPT3 API](https://openai.com/product)
- [Next.js](https://nextjs.org)
- [tRPC](https://trpc.io)
- [NextAuth.js](https://next-auth.js.org)
- [Prisma](https://prisma.io)
- [Mantine](https://mantine.dev)
- [Tailwind CSS](https://tailwindcss.com)

### [OpenAI GPT3 API](https://openai.com/product)

OpenAI のアカウントがあれば、誰でも簡単に API キーが発行できます。18 ドルくらいの無料枠があるため、気軽に試せるのが良いですね。

### [Next.js](https://nextjs.org)

最近はもっぱら Next.js ばかり使っています。特に後述する tRPC との親和性が非常に高く、重宝しています。

### [tRPC](https://trpc.io)

tRPC は TypeScript ベースで効率よくバックエンドとフロントエンドの開発ができるライブラリです。

> tRPC allows you to easily build & consume fully typesafe APIs without schemas or code generation.
> https://trpc.io/docs/ より

バックエンドの API を構築すると、型安全な API クライアントを自動で生成してくれるためかなり開発者体験が良いです。
また、Next.js で使う際は API Routes にエンドポイントを立てて使えるため非常に便利ですね。

今回の開発がスムーズにできたのは、間違いなく tRPC のおかげです。tRPC は近年注目されつつある技術ですが、まだまだ採用事例は少ない気がします。今後は採用事例がどんどん増えていくと嬉しいですね😄

### [NextAuth.js](https://next-auth.js.org)

認証機構の組み込みに使いました。本記事の執筆時点では名前が [Auth.js](https://authjs.dev/) に変わりつつあり、SvelteKit や SolidStart などの Next.js 以外のフレームワークでも使えるようになるっぽいですね。

### [Prisma](https://prisma.io)

tRPC での API 開発時に使っています。TypeScript との親和性が高く、DB のマイグレーション等も行ってくれるのでもう手放せません🤝

### [Mantine](https://mantine.dev) / [Tailwind CSS](https://tailwindcss.com)

今回はサッと UI を組み立てたかったので、Mantine を採用することにしました。Mantine を使うのは初めてでしたが、割と使いやすくて良かったですね。

Mantine は [Mantine UI](https://ui.mantine.dev/) というコンポーネントのサンプル実装があり、そこからよく使うコンポーネントを利用できたのも非常にありがたかったです。

また、Mantine とあわせて Tailwind CSS も採用しました。基本的な UI は Mantine に任せつつ、ちょっとしたデザインの修正は Tailwind CSS で行いました。結構雑に開発したこともあり、お作法は整ってないところもありますが、将来的には直したいですね･･･🫣

---

また、リファクタリングしたいコードを Web 上で書くエディタには [monaco-editor](https://www.npmjs.com/package/monaco-editor) を使っています。今回は React のプロジェクトだったので [@monaco-editor/react](https://www.npmjs.com/package/@monaco-editor/react) を使って組み込んでいます。

それと、このプロジェクトの雛形の作成には [Create T3 App](https://create.t3.gg/) を採用しています。Create T3 App を使うと

- Next.js
- TypeScript
- tRPC
- Prisma
- Tailwind CSS
- NextAuth.js

あたりの技術がセットアップされたプロジェクトを簡単に作成できるので良いですね。

## おわりに

catnose さんのツイートにもあるように、最近出た ChatGPT API ベースのサービスのメインとなるロジックは ChatGPT の API に投げるプロンプトを用意している箇所だけかなと思います。

https://twitter.com/catnose99/status/1635465564222271488

自分が作ったサービスも本質的に重要な箇所は以下の数行だけで、あとは認証機構やコードを入力するインターフェースを整えただけにすぎません。

https://github.com/y-temp4/refiner/blob/27e14980c1/src/server/services/openai.ts#L9-L22

今後はもう少し凝ったロジックを入れ込んだサービスもどんどん出てくるかなとは思いますが、逆に今はアイデア勝負で色々できる時期なのかな、とも思います。

みなさんもぜひ ChatGPT API を使って新しいサービスを作ってみてください🙌

## 宣伝

Web のフロントエンドに関する技術を解説する YouTube チャンネルを作りました✨

今回の記事でも触れた ChatGPT API を Web アプリケーションで使う方法についても解説しているため、気になる方はぜひご確認ください！

https://www.youtube.com/watch?v=grydfxv_JTI