【AI駆動開発／初心者向け／効率爆上げ】兼務・初心者エンジニアが使えた３つのAI・ダメだったAI／振り返りポエム【G's Academy】

# はじめに
秋から年末のこの季節、好きなんですよね。特にスーパー。ハロウィンおわったと思ったらクリスマス！そして正月！ころころラインナップが変わって、あぁ年末やな、と思います。

今日は、今年も振り返りも兼ねて…AI駆動開発をテーマに、ちょっと技術っぽい記事を書いてみます。

:::note info
※この記事は「<a href="https://qiita.com/advent-calendar/2024/gsacademy">G's ACADEMY【技術記事書いてみた編】 Advent Calendar 2024</a>」投稿記事です。
:::


# 自己紹介
初めまして。<a href="https://every-co.com/" target="_blank">Every</a> COOの田中 武征（Takeyuki Tanaka/taketaketakeyuki）です。

COOとは名ばかりで、小さい会社なのでなんでも屋ですが、３割くらいは自社開発のエンジニアとして今でもコード書いてます。

そしてもう一つ、私は<b><a href="https://gsacademy.jp/" target="_blank">G's Academy</a> DEVコース23期卒業生</b>です。DEVというのはコース名です。2021年の春から夏、土曜日に半日かけてプログラミングを学び、半年後にアントレプレナーとして、エンジニアして立ち上がることを目指すものでした。プログラミングスクールは多々ありますが、起業家的な視座を持ち、起業志望の方が多く集まる刺激的な場、という意味では日本唯一。超おすすめです！

私大文系卒、当初はhtmlだけすこーし触った程度でしたが、わかりやすいプログラムとメンターの皆さんのサポートで、なんとか立ち上がるところまでいけました。

<iframe width="560" height="315" src="https://www.youtube.com/embed/GtSupPBNis8?si=xmn9e-4L0RFL8YRV" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<center><最後にはプレゼンの機会もいただきました！></center>

2021年秋卒業し、1年半くらいは粛々と一人で開発を進め…社内の方・社外の方の力を借りつつ2024年2月にプロダクトをリリースするに至りました。それが人事の方向けe-Learning SaaS<a href="https://everyhracademy.com/" target="_blank">Every HR Academy</a>です！

# 心の叫び
初心者エンジニアが、経験者いない環境で開発するのに何がしんどいか。それは「バグ取り」。

* エラーが出たとき、まずエラーの特定ができない
* 特定できても検証・解消の仕方がわからない
* 検索して記事出てきても自分の状況に合ってるかわからない
* 状況と環境違う中で反映の当て嵌め方がわからない 
…ローカルmamp環境で出たエラーに対し、Docker前提のコードを当てはめ、解決できないことに憤っていたりしました。笑

2021年当初は「聞く」しか解決のしようがなく、メンター勤めていただいた<a href="https://fusic.co.jp/members/54">吉野さん</a>にはずいぶんお世話になりましたが…ここ1年、環境が激変。いわゆるGenAIに助けられることが増えてきました。ということで今回は、そのTipsをご紹介します。


# AI駆動開発って何？
「AI×開発」というキーワードから、あなたは何を感じますか？このキーワードだけだと、なんか「チャットボット作るとか？」みたいなイメージになりますかね。
もちろん、プロダクトの機能にAIを取り入れることも今めちゃくちゃ推進されていますが、開発プロセスにAIを入れる、というのがいわゆる「AI駆動開発」です。定義としては…

> 要件整理、UI/UXデザイン、設計、コーディング、テスト、リリース、インフラ構築などをAIを活用を前提にした開発プロセス
><a href="https://www.creationline.com/tech-blog/glossary/71931" targe>https://www.creationline.com/tech-blog/glossary/71931</a>

ということで、定義されているものの思想はかなり高い次元にありますが、要は開発のスピードアップなり品質向上なりにAI利活用していこうぜ、ということと解しています。

ということで、開発の経験が短い私が実際に使ってみて「使えた」「使えなかった（使いこなせなかった！）」ものをご紹介します

## 使えたAI駆動開発ツール１：ChatGPT
https://chatgpt.com/

★どんな時に使えるか
* やりたいことが決まっている（機能の追加とか、バグの修正とか）
* 上記が単一のファイル内で概ね解決する範囲
* コード・関数・ファイルの依存関係が分かっている

王道ですが、まじで助かってます。

バグが出た時は、バグのコメントとバグ発生箇所、そして該当ファイルのコード全文を打ち込むと、結構な確率で解決してくれますし、機能開発でも、「ポンチ絵」だけ書いてアップロードしてくれるとある程度の形にしてくれます。

![スクリーンショット 2024-12-14 11.22.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619799/82a158e9-9e85-0a9d-f01c-6276a5f032c6.png)
※上半分がコード、下半分がエラー。間に書いてる指示だけで、概ねの方針を示してくれる。

一方、例えばフレームワークで開発している場合、MVC的な関連性がわかっていない状態だと「どこまでを反映させればいいか」の取捨選択ができません。ファイルの構成とか、基本的なCRUDの反映ができるとか…イメージとしては「DBがカラムアプリケーションをデプロイできた」くらいのレベル感が求められるイメージです

## 使えたAI駆動開発ツール２：Cursor
https://www.cursor.com/

★どんな時に使えるか
* どんなときにも！

もはやないと戻れない。ChatGPTと種別が異なり、いわゆる「コーディングエディタ」です。VS Codeと同じ役割のツール、ですね。
そもそも標準機能としてAIと一緒に開発できる…というのがパワフルです（VSCodeでもできるんですよね、github Copilotとかで…）。

#### できること１：開発を補完してくれる！
コーディングしてると、「次に書きたいコード、これなんじゃない？」というのをお勧めしてくれます。これが結構な精度なんです！

私は今Laravelメインで開発しているのですが、例えば
* controllerに引数を追加すると、view側でそれを検知してくれる（これほんと感動します。）
* 例えばフォームの項目のように、ある程度繰り返しする項目について、modelとかから値を拾ってるのか、順番にかつ適切な名称かつ最適なタイプ（text型なのかimputなのか）でコーディングレコメンドしてくれる

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619799/750eb270-9c8e-c9c0-c7eb-bf201c5340fd.gif">
こんな感じ。おすすめ出てきたら「tab」で反映！

#### できること２：コードの流れを踏まえてコードの中で質問できる

そしてもう一つパワフルな機能。「ctrl+k」で”ここに入れ込みたいコード”について質問し、具体的にレコメンドしてくれます

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619799/420a41e4-b197-2568-4bca-11c33390964d.gif">
こんな感じです。ルーティングをベースとしたコーディングを、ほぼ完璧にしてくれてます。

## 使えたAI駆動開発ツール３：v0.ai
https://v0.dev/

デザイン特化のツールです。PPTのポンチ絵をアップロードすると、瞬く間にコーディングを完了してくれます。
CSSは「完全に理解した！」レベルなので、型作ってもらえるだけでもだいぶ助かっています。

＜img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619799/f1c2d973-b05e-6ae1-9b09-38ff53d2f9da.png">
これね

## 逆に使いこなせなかったのは…
* blot
  * https://bolt.new/
  * Typescriptベースで、ファイル構成からデプロイまでやり切ってくれる
  * そもそもTSがわからないので使いこなせなかったけど、対話しつつ複数のファイルに横断される修正を一括でかけてくれるのはパワフル。

* Auto-GPT/Agent GPT
  * https://agentgpt.reworkd.ai/ja
  * いわゆる”タスク処理”が得意なAgent型のGPT…うまく動かせはしたのですが、そもそも私の能力値では指示の投げ方・タスクの受け方等が全くわからず挫折。でも、すごいことはできそう

* Phind
  * https://www.phind.com/search?home=true
  * GPTとの違いがピンと来なかった。私レベルだとあまり変わらないかも 

* Wolverine
  * https://wolverine-invent.com/presentation
  * バグを発見→修正→再実行してくれる・・らしい！コンセプト知って感動したのですがそもそも動かせなかったです。



# 便利になった！けど…
挙げた３つのAIツール、本当に開発する度にほぼ必ず触っているまであって、おかげでとてもとても開発が早く正確になりましたし、ストレスからも解放されました。使いこなせず挫折燃していますが、いろいろ試してみることは続けたいと思います。

しかし一方で…AIの力を借りるにしても、最低限の知識がないと何もできなかったな…というのが感想です。

YouTubeとかみてると、「完全知識０でAI駆使して開発！」みたいなのよくみます。確かに、簡単なツールを自分のためにつくるとか、思いつきを形にするとかはできてしまうなって印象です。

一方、開発のリアルって、日々ビジネス側と話し、細かな画面構成を調整したり、DB構成から考えなきゃいけないかとか、これは関数で処理しようとか、そういうもののあたりをつけていくことの積み重ねかなと思っていて、その役割までは現時点ではAIにはできないのかな、という印象です

（・・・できないことはないかもしれないけど、まだ人がやった方が早い&精度が高い）

それをやるためには、写経でもいいからコードを書いて、デプロイして、エントリーレベルでもシステムの全体間がわかっていることって大事だったなぁ、と思います。そこまでやったからこそ、ある程度AIツールの恩恵を受けて、駆動開発やれてるのかなと。

ということで、勉強しといてよかったし、AIの力を借りながらも、すこーしずつ勉強続けたいなぁと思った年末でした！