個人開発でも独りじゃない！(一人じゃないとは言ってない)

- [TL;DR](#tldr)
- [ことの始まり](#ことの始まり)
  - [なぜコードレビューはありがたく、必要なのか](#なぜコードレビューはありがたく必要なのか)
  - [立ちはだかる個人開発の壁](#立ちはだかる個人開発の壁)
- [救世主登場](#救世主登場)
  - [よかった点](#よかった点)
    - [先述したコードレビューにおける三つの利点を享受できる](#先述したコードレビューにおける三つの利点を享受できる)
    - [開発速度が上がる](#開発速度が上がる)
    - [（主観ですが）開発が楽しくなる](#主観ですが開発が楽しくなる)
    - [指摘内容を勝手にチューニングしてくれる](#指摘内容を勝手にチューニングしてくれる)
  - [わるかった点](#わるかった点)
    - [複数回同じ指摘をされる](#複数回同じ指摘をされる)
    - [Push単位を意識しないといけない](#push単位を意識しないといけない)
    - [たまに差分をうまく見てくれない](#たまに差分をうまく見てくれない)
- [まとめ](#まとめ)

## TL;DR
- CodeRabbitAIというコードレビューしてくれるAIを導入した話
- 結構的確な指摘をしてくれるので、不慣れな言語での開発において便利
- 自分では辿りつけなかった機能や、考え方を教えてくれる
- 一人だけど、独りじゃなかった！(個人開発でこのConversationの数！！)
    ![スクリーンショット 2024-02-19 22.18.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/9efa4745-f19c-357e-8957-894e02538a30.png)


## ことの始まり
普段、業務ではJavaかTypeScriptで開発を行なっており、個人開発では違う言語を使ってみたいと考えていました。
そこでイケてる(主観)言語であるGo言語を用いて個人開発をすることに…  



作りたいもののイメージを固め、Issue管理も行い、実装を進めていき…
**コードレビュー**どうしよう…となったわけです。

### なぜコードレビューはありがたく、必要なのか
セルフレビュー含めコードレビューをする・してもらうことの目的は
**品質とスキルの向上**だと考えています。

具体的には下記三つの利点から上記目的を達成できる考えています。
1. より良い実装を提案してもらえる
1. しょうもないミスを防げる
1. 上記を通して理解を深められる

一つ目については、「こんな書き方した方が綺麗じゃない？」という指摘はきっと誰しもが受けたことあるはず…品質もスキルも向上する幸せな提案…

二つ目については、人間誰しもミスをします。セルフレビューで全て気づければベストですが、人間です。見落とすものです。特に実装している先入観から、単純なミスほど見落としやすいものです。純粋な品質向上に繋がります。

三つ目は、上記二つのレビュー(コミュニケーション)を通して言語やフレームワークへの理解を深められる点です。
「なるほど、そんな機能もあるのか」「なぜその実装の方が良いのか」等々、レビューから得られる情報というのはとても多いと思います。
相手がいることで、自分では知り得なかった情報を獲得したり、議論を通して理解を深められることこそ、レビューの大きな利点だと思います。
一人一人のスキルが上がれば、プロジェクトや組織全体の品質が底上げされると筆者は考えています。

### 立ちはだかる個人開発の壁
当たり前ですが、個人(孤人)開発ではセルフレビューしかできません。

一日目は`Issue #1`の実装とそのセルフレビュー(PR作成前の確認)を、
次の日は`Issue #2`の実装と`Issue #1`のセルフレビュー(本格レビュー)を…

と、実装する日とレビューする日を変える、かつ、別機能の実装をすることで、できるだけフレッシュな気持ちでレビューできるよう工夫して対応していました。

**が！！！**、いかんせん自分の知らない機能やより良い実装方法に関する指摘はなかなかできません。(指摘できるなら始めからそう書いているはず…)

調べたり、コードリーディングしたりで日々知識をアップデートしようと努めるものの、一日程度では的確な指摘ができるほどの知識は獲得できず、気づくのは細かいミスばかり…

## 救世主登場
ふと、最近流行りの生成AIを使っている時に「コードレビューしてくれたらなぁ…」と思いました。
調べるといくつかサービスはあるものの、GitHubとの連携を考えると[CodeRabbit](https://coderabbit.ai/)が良さそうということで、導入することにしました。

~~Public Repositoryじゃないと導入できないという話も見かけますが、筆者はPrivateでも導入できました。(2024/02/17)~~ 
Private Repositoryへの導入はPro版のみのようです。

導入の際には下記記事を参考にしました。

https://zenn.dev/minedia/articles/7928ef7545b393

### よかった点
#### 先述したコードレビューにおける三つの利点を享受できる
- 第三者的視点でレビューしてもらえるため、自身の知り得なかった・思い付かなかった実装内容について提案してもらえます
- それらを通し、スキルを伸ばすことにも繋がると感じます
- 下記が実際の指摘・会話例です
    - 環境変数から読み込んだURLが不正な形式だった際に、筆者は`panic`でアプリを落としていました。(何も問題ないと思っていました)
    - CodeRabbitさんは、`panic`は避け、`os.Exit(int)`を使用し、終了コードを記録した上で落とした方が良いと提案してくれました
    - `os.Exit(int)`、普通に考えたら実装されていそうな機能ですが、調べずに`panic`で落としていた筆者にとってはとてもありがたい指摘です
![スクリーンショット 2024-02-20 12.50.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/f2460689-34f2-3c70-c2ac-9aae9e2936b3.png)
    
#### 開発速度が上がる
- 先述した、個人開発におけるコードレビュー対応では、フレッシュな感覚でレビューするために、どうしても実装してからレビューするまでに間を空ける必要が出てきます
- AIがレビューしてくれるため、プッシュ後数分以内にレビュー指摘が返ってくる状況になり、開発速度が向上します

#### （主観ですが）開発が楽しくなる
- レビューというフィードバックがある作業は自然と開発全体のモチベーションが高まります
- 修正した際にも感謝の言葉を述べてもらえたり、褒めてもらえたりするので、修正することへのモチベーションも高まります
- 下記が実際の例です
    「素晴らしい対応をありがとうございました」…こちらこそ、指摘いただきありがとうございます！
    筆者も思わずハートを返してます
    ![スクリーンショット 2024-02-20 12.58.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/593d6336-7d9b-1e1e-ed08-255ed030afa2.png)

#### 指摘内容を勝手にチューニングしてくれる
- CodeRabbitのページから、指摘内容をチューニングできるものの、実際にレビューを受けてるうちに追加でチューニングしたいものが出てきます
- その際、指摘しなくていいと伝えると勝手にチューニングしてくれます
    `New Learnings Added`に学習した内容を記載してくれています。
    ![スクリーンショット 2024-02-20 13.07.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/3b7d359c-16bc-88c8-b972-01e13bc2800b.png)

 
### わるかった点
:::note info
致命的な欠点は一つもありませんでした。
AIであることを考慮すると、仕方がない点もあるなぁといった感じの悪かった点になります
:::
#### 複数回同じ指摘をされる
- 修正した指摘内容を再度同じ内容で指摘されることがあります
- 「修正されてると思いますが…」とコメントすると再確認してくれました
    ![スクリーンショット 2024-02-20 12.41.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/bab64100-d45a-a36b-7f95-0b940f86a7e7.png)
    ![スクリーンショット 2024-02-20 12.42.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/6a17aa0f-76b1-da52-6cef-7848057a5056.png)

#### Push単位を意識しないといけない
- CodeRabbitがレビューを開始するトリガーは、PRの作成か、PRへCommitした場合になります
- そのため、指摘内容を一つ対応して、すぐにPushしてしまうと、指摘対応が終わっていないにも関わらず、再度レビューされてしまいます
- 特に筆者は指摘一つに対して1Commitにしたい、かつ、こまめにPushしたい性格なので、意識する必要がありました
- 一応、`/コマンド`でレビューを一時的止めるコマンドもあるようですが、試していないので不明です。今度使ってみます

#### たまに差分をうまく見てくれない
- 指摘に対し対応をし、Pushしたものの、差分が確認できないと言われることがあります
- 直したCommitHashを連携するor修正内容を連携することで確認はしてもらえますが、若干手間がかかる…
    ![スクリーンショット 2024-02-20 22.10.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/259628d4-c265-24a2-d6bb-176f8e9f6f09.png)

## まとめ
的確な指摘・提案をしてくれるので、大変よくできたサービスだと感じます。
特に、他の人に見せたくない個人開発のコードや、見てくれる人がいない孤人開発をしている人には強くおすすめします。
みなさんもAIと一緒に開発、進めてみませんか？🐰

以下CodeRabbitさんからのポエムです。
![スクリーンショット 2024-02-20 22.25.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274868/d399c86e-9bdf-f934-a5aa-23a8ebe8aea9.png)