見出し画像

ChatGPTでコードを書いてアプリを作った話



始めに


こんにちは、お久しぶりです。Note記事を更新する余裕がなく4カ月もほったらかしにしていました💦
タイトルですがなんのこっちゃと思うかもしれませんが、この数カ月ChatGPTにコーディングをさせて、アプリをリリースしていました。
ChatGPTを使ったコーディングに興味がある人の参考になれば幸いです。
先ずはリリースしたアプリを紹介します。

リリースしたアプリ

Croma key VRM

VRMを読み込んでモーションを受信し、背景色を変えられるアプリ。
主にOBS忍者にVseeFaceやOBSを起動しなくても映像送信ができるアプリです。

Multi Track OSC Sender

IMU式モキャプデバイスの位置ズレ問題の解決や、SlimeVRと自作のデータグローブのモーションをまとめて使えるようにする為独自アプリ開発しました。
※現在作り直し中なのでsteamVR版は未リリース

MocapAssistant

SonyのMocopiを使った配信で位置がズレてしまう問題を解決する為に開発したアプリ。少ないアプリで配信ができ運動系などのゲームや配信で活躍します。

MAKERoom

Vroomで読み込める3D背景を簡単に作成できるアプリ

何故ChatGPTで作るに至ったか

単純にプログラミングが出来ないからです。数年前まだ高校生の頃C#を授業で習った記憶はありますが、全くと言っていいほど理解が出来ませんでした(笑)
多分今ならもう少し理解できるのでしょうが、当時は文字の羅列に拒否反応を起こしていました。基本の構文くらいは出来たかもしれませんが応用となるとサッパリ分からなかった記憶があります。

そして時間がたった今ですが、Aiの普及で誰でも前提知識がなくともプログラミングができる時代になりました。特にChatGPTの登場です。
私もChatGPTが出た当初少しだけコードを書かせて動いて感動した程度でその後触らなかったのですが、Vtuberとして配信する時に自分の欲しいアプリがないのでChatGPTを使ったアプリ開発を始めることにしました。

ChatGPTでコーディングする上でのメゾット

・まずベースとなるコードを書かせる

例 カメラのコントローラー

プロンプト
UnityにてカメラにアタッチしたらキーボートのWASDで移動、ホイールでズーム、右クリック押しながらマウス移動で回転するコードを書いてください。

実行結果

using UnityEngine;

public class CameraController : MonoBehaviour
{
    public float moveSpeed = 10.0f;
    public float zoomSpeed = 4.0f;
    public float rotationSpeed = 100.0f;

    private Vector3 dragOrigin;

    void Update()
    {
        MoveCamera();
        ZoomCamera();
        RotateCamera();
    }

    void MoveCamera()
    {
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(horizontalInput, 0, verticalInput) * moveSpeed * Time.deltaTime;
        transform.Translate(movement, Space.World);
    }

    void ZoomCamera()
    {
        float scrollInput = Input.GetAxis("Mouse ScrollWheel");
        Vector3 zoomDirection = transform.forward * scrollInput * zoomSpeed;
        transform.Translate(zoomDirection, Space.World);
    }

    void RotateCamera()
    {
        if (Input.GetMouseButtonDown(1))
        {
            dragOrigin = Input.mousePosition;
            return;
        }

        if (!Input.GetMouseButton(1)) return;

        Vector3 difference = Input.mousePosition - dragOrigin;
        dragOrigin = Input.mousePosition;

        float rotationX = difference.x * rotationSpeed * Time.deltaTime;
        float rotationY = difference.y * rotationSpeed * Time.deltaTime;

        // カメラの回転をX軸とY軸に適用する
        // Y軸の回転はシーンの上下を向く動作なので、カメラ自体ではなく、カメラの親や空のGameObjectに適用することを推奨します。
        transform.Rotate(Vector3.up, rotationX, Space.World);
        transform.Rotate(Vector3.right, -rotationY, Space.World);
    }
}

実際の挙動

プレイモードでカメラを操作しています

・上記コードを元に追加の機能を足していく
基本的にこの繰り返しになります。ベースになるコードが出来てしまえば大体の欲しい機能は実装できると思います。

・プロンプトの出し方
他の方はどうか分かりませんが、自分はコードを追記や改変してほしい場合は元になるコードをコピペして「上記コードに○○をするコードを追記してください。」と命令するようにしています。
また、別のコードを参照に書かせると精度が上がるので「以下のコードを参考に上記コードに○○を追加するコードを書いてください」と命令を出すようにしています。

新規で書いて欲しい場合は、「Unityにて○○するコードを書いてください」と何で使うコードなのか分かるように命令しています。

ChatGPTでコーディングする際はAiがイメージの湧きやすい命令をするように心掛けています。噂ですがお願いの仕方で出力が変わるらしいので必ず「して下さい」とお願いする言い方にしています。

ChatGPTを使ったアプリ開発のメリットデメリット

メリット
1からC#を勉強する時間を省ける。自分の書いて欲しいコードをAiが代わりに書いてくれる。
デメリット
複雑なコーディングや複数のスプリクトを扱う処理は苦手。ChatGPTを頼り切ってしまうと自分自身の成長には繋がらない。

以上の事から全部ChatGPTに頼ることは難しく、コーディング出来る人は補助として使うのがいいのかなと思います。私は勉強する時間をプロンプトを投げる時間にまわして開発していますが…実際複雑なセーブ機能など実装できずにいる…

ChatGPTでアプリ開発した感想

少なくとも数千回プロンプトを投げていますが、投げれば投げるほど自分自身のプロンプトの精度は上がっていってる気はします。但し、時間が無限に溶けていきます(笑)
ChatGPTにコードを書かせて自分は何をしていたかというと、UIを作ったり、○○をしたときに○○をアタッチして〇〇をするコードを書いてもらうフローを考えたり。コピペしたりコピペしたりコピペしたりコピペしたりコピペしたり…
個人的には自分の出来ない事をChatGPTに補って貰って作ることが出来るならそれはChatGPTの本来の在り方なのかなと感じています。(これが言いたかった)
以上がChatGPTでアプリを作ったお話になります。

この記事が気に入ったらサポートをしてみませんか?