アプリ開発初心者はchatGPTを使ってAndroidアプリを作れるのか？

この記事は、Advent Calendar 2022に投稿する記事になります。
(公開が遅れていますが...)

私は普段、Unityを使ったゲーム開発を主にしているのですが、ここ最近``chatGPT``という対話形式のAIがTwitterなどで流行しており、私も``chatGPT``でどんなことができるのだろう と日々試行錯誤しています。
そんな中Qiitaで[今話題のChatGPTと一緒にAndroidアプリを作ろう！](https://chat.openai.com/chat)という記事に出会いました。

私は、Unityで簡単なAndrid向けゲームは作ったことがありますが、Andorid向けのアプリ開発などはしたことがないです。過去に「こういうアプリあったら便利なのに」と思ったことはあったものの、専門外という事もあって、手を出さずじまいだったのです。

という事で、この機に``chatGPT``に教えてもらいながら初めてのAndroidアプリケーションを開発してみようと思い立ったのです！

#### 最初に
この記事は私のような**Androidアプリの開発未経験者の方がAIの力だけで完成まで至れるのかを追う記事となりますので、技術的な記事とは異なるかもしれません**ので悪しからず。
また、結果から言いますと、完成に至ることはできませんでした。ですが、全然できなかったわけでは無かったので、その過程を見ていただければな～と思います！

## 企画
先の記事に則ってchatGPTに企画出しをしてもらうのもいいな、と考えましたが、初学者にいきなり難しい企画を投げられても完成させられる気がしないので、まずは簡単な**カウンターアプリ**を作ってみたいと思います！

理由としましては、私が最近プレイしているポケモンSVで、色違いを求めて大量発生のポケモンを倒していて、倒した数の目印になるメッセージを見落としてしまう事が多々あるので、自分でカウントできるアプリ作っちゃおう！と思ったからです。


## 環境構築
そもそも何から手を付ければいいのか分からないので、そこから聞いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/4a55d33f-22b1-ae03-5c8a-f15d765e6127.png)

まずはAndroidStudioをインストールしなければいけないようですね
[AndroidStudioの公式サイト](https://developer.android.com/studio/install?hl=ja)に飛び、リファレンスに従って環境を構築していきます。

さてインストールも完了し、無事起動することができました。
プロジェクト作成画面は``UnityHub``に似ているので、おそらくそれに従えばよさそうです。
しかし、プロジェクトを作っていて壁にぶつかりました。使用言語の問題です。
``java``と``kotlin``から選べるようですが、どちらも使ったことがなく、どっちがいいかも分かりません。
という事で、``chatGPT``に聞いてみました！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/f9ce019c-bb78-f81e-89ae-2df0c68e2749.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/1226e6e5-483f-fb9e-df0e-a493e5a270e5.png)
ちなみますと、``chatGPT``では、時々回答が途中で途切れてしまう事があるので、そういう時は「**つづき**」と言ってあげると続きを教えてくれますよ！

ということで、両者一長一短のようですが、せっかくなのでモダンそうな``kotlin``を選んでみましょう！
しかし、ここにきて更なる壁が...
```
Failed to read or create install properties file.
```
という<font color="red">エラー</font>が発生してしまいました。
これも``chatGPT``に聞いてみましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/5cd0b426-1b35-b72a-b1ff-9951d2b38780.png)
なるほど。起動しなおして管理者権限で実行するのが速そうですね。
という事で、無事空のプロジェクトらしきものができました！

これにて環境構築は終了ですね！

## いざ開発！
### UI作成
まずはUIを作成する必要があるみたいですね！
私は初学者で、AndroidStudioの操作方法すらも分からないので、頼っちゃいましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/efa0c156-6c83-240d-31f8-9c82992d1c31.png)
ほうほう...なにやら詳しそうな説明をしてくれたので、いったんこの通りにやってみます。

しかし、進めば進むほど壁が出てくるもので、今度は**layoutフォルダが無い**という問題に直面しました。
これについても聞いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/8efc6a15-b2fe-4033-a347-226cd1caa086.png)
とりあえず自分で``layoutフォルダ``を作ってみる事にします。(回答の中ではフォルダーとありますが、実際はディレクトリという表記でした)
そのlayoutフォルダに``activity_main.xml``というファイルを作成しました。

``activity_main.xml``にアクセスすると、フォームアプリケーションのようなUIが出てきましたね...
私はフォームアプリケーションで電卓を作る程度の開発はしたことがあるので、経験を活かしてUIの作成を続けます。

ボタンの配置、色の指定、テキストの編集、サイズ調整が終わりました！
しかし、エラーが出てしまいました。
```
Missing Constraints in ConstraintLayout
This view is not constrained vertically: at runtime it will jump to the top unless you add a vertical constraint  The layout editor allows you to place widgets anywhere on the canvas, 
and it records the current position with designtime attributes (such as layout_editor_absoluteX). These attributes are not applied at runtime, so if you push your layout on a device, 
the widgets may appear in a different location than shown in the editor. To fix this, make sure a widget has both horizontal and vertical constraints by dragging from the edge connections.  Issue id: MissingConstraints  Vendor: Android Open Source Project
```

エラーについて``chatGPT``に聞いてみたら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/9f1a7aa7-1c74-ed08-6b12-117fba715831.png)
という答えが返ってきました。
しかし、AndroidStudioを見ても、[Infer Constraints]ボタンが見当たらず、泣く泣くネットで調べた情報で解決しました。
このように、**必ずしも解決に導いてくれるわけでは無い**です。(当たり前といえば当たり前)

ボタンと同様の手順でテキストエリアも設置しました！
これでUIの配置は完了ですね！

### 機能の実装
UIは設置してあるだけでは意味がないので、**ボタンを押したらテキストエリアの数字がカウントされる**という機能を実装しなければいけないですね。
これもどうすればいいのか分からないので聞いてみます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/a9ccfc25-6c4c-6124-618f-3c804550c8b6.png)
これを参考に、OnClick属性にメソッド名を設定しました！
メインアクティビティに当たるクラスが存在しなかったので、``chatGPT``に聞きながら、``layoutフォルダ``と同じ要領で作りました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/92dcd22d-9d47-32ab-4f77-a9aa736efc9a.png)

ここまで出来たら、やっとでスクリプトを組む段階に来ましたね！
もちろんコーディングも``chatGPT``に組んでもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/071f96d2-8617-20bd-3e5d-c210d0960ea3.png)

そのままコピペしてみたら、10個ほどのエラーが出てしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/4cd9796f-9df5-b8da-2341-802cbba95103.png)
このエラーをそのまま``chatGPT``に聞いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/4b69d4ba-b366-a115-5690-e5756f0cbca3.png)
どうやらほとんどのエラーはこの``import``という事をすればいいようなので、一通り書いてみたら無事エラーが消えました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/efdff5b6-01f0-7e4b-982e-347c9f50cc61.png)

ですが、こんなに冗長な記述をする必要があるのでしょうか？こればかりはAIに聞いてもどうにもならなさそう(複雑な操作が必要な可能性がある)ので、もし詳しい方がいれば教えて欲しいです！

## 動作確認
さて、ここまで長々と書いてきましたが、ついに``chatGPT``に指示された実装をすべて完了しました！
ここからは動作確認へと移りたいと思います！！
もちろん実行の仕方も分からないので、聞きます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/2b17d16f-9dfd-cd29-0348-bb7818f27ce9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/c9b70dd2-5781-8b97-cf65-2cd342a4dde0.png)
実機ビルドもできるのですが、せっかくなら仮想デバイスを作って、どの環境でも実行できるように知識を付けたいと思います。
私はGalaxyS21を使用しているのですが、そのプロファイルが無かったので、作成します！
この部分は[**Galaxyの公式サイト**](https://developer.samsung.com/galaxy-emulator-skin/guide.html)に端末の情報やskin(端末の画像データ？)と共に使用方法があるので、それに従います！
無事に仮想デバイスを作成できたのはいいのですが、仮想デバイスを起動したときの負荷にPCが耐えきれなかったのか、**何故か**Qiitaの作成中の記事のタブがロールバックして、スクリプトを組むところまで戻った挙句下書きが上書きされて辛かったです...

色々ありましたが、仮想デバイスは起動できました！
さて、ビルドターゲットを仮想デバイスに設定していざ実行！！してみたのはいいのですが、一向に何も起動しません...
``chatGPT``に聞いてみると、考えうる理由を挙げてくれましたが、それでも解決はしませんでした...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/336dcca0-1104-1342-a16d-b52943ebaec8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588962/65006e48-3679-b3e1-dc87-1d16ddbdb3fe.png)
実機ビルドもしてみましたが、ダメ...！
logcatを確認してみると、どうやらjavaで記述されたシステムファイル(?)がエラーを吐いているみたいで、未経験者の私には解決できませんでした...
```logcat
com.google.android.googlequicksearchbox E/A: onError
    com.google.android.apps.gsa.shared.speech.a.n: errorCode: 65561, engine: 2
        at com.google.android.apps.gsa.staticplugins.di.a.e.a(SourceFile:3)
        at com.google.android.apps.gsa.s3.n.gF(SourceFile:1)
        at com.google.ce.g.a.f.f(SourceFile:2)
        at com.google.android.apps.gsa.speech.k.a.g.d(SourceFile:21)
        at com.google.android.apps.gsa.speech.k.a.g.jG(SourceFile:6)
        at
```

## 結果
開発自体はできていたような気がするのですが、肝心のビルドができず、結果として完成には至りませんでした...
やはり完全に知識がない状態からでは、エラーへの対処や、仕組みの理解の面で解決できない問題が非常に多く、**``chatGPT``だけの力ではアプリの完成はできない**という風に感じました。
もしかしたら、私のやり方や環境が悪かった可能性は大いにありますが、やはり現在の``chatGPT``は分からない事や、回答できない質問に対して、素直に「できない」という回答を返さず、それっぽい回答をしてしまうせいで、**初心者にはそれが正しい情報に見えてしまう**というトラップがありますね。

結果として、新しい技術を身に着けるときは、ちゃんと有識者の方が残してくれた情報をインプットする方が良いという事がよく分りましたね！！

#### 最後に
もし、今回の私が行った一連の作業で間違っているところや、なぜ最後に実行できなかったのか、原因が分かる方がいましたら、教えていただけると幸いです。