ChatGPTを使ってGB版風テトリス作った


作ったもの↓

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/e844a2d2-442f-56bf-a131-1b23ae499ce6.gif" width="300">

環境:Kotlin +Jetpack Compose

開発期間:3週間

かかった費用:約3000円 (ChatGPT4.0 1か月/30ドル)

※自分が遊ぶ目的のためアプリ公開はしてないです。


## 開発の流れ
### ①ゲーム開発手法の決定
 最初に、ChatGPTにゲーム開発手法を提案して貰った。

![①.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/75c5d676-71a3-8a6d-439d-58bc4d0f422e.png)


以前はJavaとXMLを使用したアプリケーション開発の経験があったが、折角なので新しい技術を採用することに。
今回はChatGPTの提案の中からKotlin+Jetpack Composeの手法を選んだ。

KotlinはAndroid開発で推奨されている言語で、可読性を大幅に向上させる。
さらに、Jetpack ComposeはKotlinで全て記述できるツールキットで、宣言的UIを利用して、直感的かつ柔軟にUIを構築できる最新の技術。だそう。

![①-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/fafb74e8-7aad-348e-f386-a13a2da69934.png)


### ②開発環境の設定
 Android開発は久々でAndroid Studioの環境もなかったため、環境設定の方法をChatGPTに教えてもらった。

![②.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/1de1b3f4-c61a-47d7-c950-84df490eedbf.png)


大まかな手順を提示してもらい、新規プロジェクトの形式などもキャプチャーを共有し選んでもらった。

![②-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/eab2ac7c-c47e-04cd-41eb-11350cc43993.png)


### ③機能要件の生成
 作りたいイメージがGB版テトリスだったので、このテトリスのゲーム画面のキャプチャーをChatGPTに見せ、大まかな機能要件を提示した。

![③.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/3a5f4c49-70b9-c89e-84b2-eb5201a9b0a6.png)

![③-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/88a4aa24-7c85-0417-6ca5-654460cd040f.png)

その後、対話を通じて不足している機能や必要な要件を洗い出しブラッシュアップした。

### ④ソースコードの生成
 次に生成した機能ごとに実装をして貰う。
最初はゲームの最も基本的な要素である「画面上部からブロックが落下してくる」機能の実装をお願いした。

![④.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/7e0942da-14c5-0170-6531-255cb1f89bed.png)

![④-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/9e0a5af0-8e7b-d3e1-8db7-8befb004c6e7.png)


### ⑤エラー修正
 開発中そのままBuildするとエラーが発生することがあったので対処が必要な時があった。
 具体的なエラーログや発生箇所のキャプチャーを渡すと、修正方法を提示して貰えた。

![⑤.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873792/4c3bb0ab-0705-c1d7-fbdc-92641dd36256.png)


### ⑥ソースコードの全体的な調整
 定期的に全体のソースコードを共有することで、統一性や一貫性に関する助言を得た。
 また、各機能の実装がプロジェクトの全体像に適合しているかを確認し必要に応じて調整。
 この段階で各処理のコメントも生成し、自分自身の全体像理解も進めた。

### ⑦ ③～⑥の繰り返し
後はアジャイル的な開発アプローチで機能ごとの実装、修正、リファクタリングを繰り返して完成。


### 良かった点

**・開発スピードの効率化**
ChatGPTのおかげで開発スピードが大幅に加速された。
コードの提案、機能の実装方法、エラー解決のアドバイスなど、
今までのようにGoogle検索で自力で調べなくとも開発できるのは非常に驚きだった。

**・直感的な理解と学習の促進**
 ChatGPTはプロジェクトの内容に沿った説明をしてくれるため、
今までのように公式ドキュメントや個人サイト、質問サイトなど、環境や状況と異なる内容から原因を突き止める必要がないため、課題の解決スピードやコードへの理解も非常に早くなった。

### 気になった点
**・間違った内容でも正しい内容のように説明されることがある**
よく言われているが、誤った情報を正しいかのように提示すること度々あった。
例えば、Buttonが長押しされたときにミノ(ブロック)が連続して移動するように実装を指示したが、何度試しても実装がうまくいかず
調べたところ、Buttonコンポーネントはデフォルトでは長押し(onPress)イベントをキャッチできなかったようで、無理やり実装しようとするせいでおかしくなっていた。（ここに関しては自力で調べてTextコンポーネントを代用して実装した）

**・開発者が実装を理解していないとソースがめちゃくちゃになりがち**
１機能ごとに実装を指示しないと、生成されるソースコードが断片的で統一性を欠くことがあった。
変数の命名ルールやコメントの説明口調がバラバラだったり、
クラスの機能分担が混在していたりと、
定期的な全体ソースの見直しと、自分自身がプロジェクトを理解する必要はあると強く感じた。(元受けが業務を理解しないまま委託するとプロジェクトが崩壊するのと同じですね。)

**・ChatGPTの返答内容が日々変化する**
プロジェクトの進行と共に、ChatGPTの返答の内容やスタイルに変化が見られた。
触り始めた頃との終わり頃で振舞い方が変わっていて、当初は間違いを指摘するとChatGPTは謝る素振りをしていたが、開発が終わるころは全く謝ることがなかったため、
先週実装できた内容が今週はできなくなるなるのではという不安を少し感じた。

## 所感
 ChatGPTが開発者にとって、とても強力なツールになるのだと肌身で実感できた。
 OpenAIのChatGPT4.0以外にも、GitHub CopilotやCursorなど他生成AIツールもサービス公開されているため、別の機会に試したい。