ChatGPTを使った.NetとC#によるゼロからのデスクトップアプリケーション-AIはプログラマーを代替することができるかー
- cyberxjp
- 2024年4月2日
- 読了時間: 13分
AIがプログラマーに取って代わる日も近いと言われている。今、それがどの程度可能なのかを確認したかった。私は仕事でChatGPT(以下、本文では「chgpt」と呼ぶ)をよく使うが、特にタスクが自明でない場合、その回答が必ずしも適切でないことは経験上知っている。しかし、私は自分の専門分野(私はバックエンド)に関連した質問を彼にするので、彼の答えを読む段階で、私は彼の間違いに気づき、いくつかの点を明確にすることができる。時には、彼のアイデアをキャッチするだけで、それ以上質問で彼を苦しめることなく、自分で彼の解答を完成させることもできる。
AIの助けを借りてゼロからアプリケーションを書くのはどんな感じなのだろう(プログラマーでなく、コードの簡単な間違いさえも見抜けないのであれば、それはまったく可能なことなのだろうか)と疑問に思ったので、検証の成果を最大限に高めるために、私は自分が経験がありながらもやったことがないプロジェクトをやってみようと思う - .NetとC#でmacbook用のデスクトップアプリケーションを書こうと思う。)
私はこの検証で2つの目標を追求している:
ノンプログラマーでも完全にゼロからアプリケーションを書くことができるという仮説を検証することだ(もちろん、私がプログラマーであることを念頭に置いているので、この実験はあまりクリーンなものではないが、それでも、できるだけ自分から遠い分野と言語を選んだ)。
デスクトップ・アプリケーションがどのように書かれるかを理解すると同時に、C#言語を久しぶりに触ってみたい興味もある。
重要:この記事を書いている間に、ずいぶん大きくなってしまったので、現在の部分はアプリケーションを起動するところまでにして、最終的なデバッグ、美化、本格的なプログラムの形成は後編にすることにした。
それでは始めましょう!
ソースデータ
ChatGPT 3.5を利用。
VS Code (私がコードを書くプログラム)はすでにインストールされていたので、インストールするステップは省略しました。
すべてのステップを簡単にするために、私はgitリポジトリを作成し、各ステップを別の要求として作成しました。chgptにgitの扱い方について質問せず、私の経験をここに持ってきたのは、私がプログラマーではなく、ニューラルネットワークの助けを借りてプロジェクトを作ろうとしている場合、チームで仕事をする可能性が低く、リポジトリ、コミット、リクエストといった問題に関心を持つ可能性が低いという事実から、読者のためだけにそれを行ったからです。
ステップ0:一般的な質問
まず始めに、.Netとは何かと尋ねた。

次に、それまでの彼とのコミュニケーションの文脈をなくすため、別のチャットルームを作り、ゼロからアプリを作ることにした:

まあ、今のところ、不明瞭な言葉は多いけれど、それなりに聞こえる。おそらく、さらにステップ・バイ・ステップで説明してくれるだろう。私はテストを書くつもりはない。=)
ステップ1:ツールのインストール
では、具体的なステップに進もう。
PS.途中から弊社の東欧エンジニアが検証を引き継いだためChatGPTがロシア語になっています。

彼は、.NET SDK(私の理解では、.Netプラットフォームそのもの)とIDE(つまり、コードを書くためのプログラム)を私のコンピューターにダウンロードするよう勧めた。
SDKは問題なくインストールできたし、上に書いたように、私はすでにVS Codeを持っていたので、そのステップはスキップした。
彼が言っているエクステンションについては、初心者はそれが何なのか、どこを見ればいいのか、ここで悩むと思う。それでも、彼が勧めるものを見るために、少し追いかけ回した:

見ての通り、彼の答えはあまり適切ではなく、私がそんなものはないとはっきり言ったにもかかわらず、前に書いたのと同じ名前を繰り返しただけだった。
結局、C#の拡張機能を開いて、説明を見て、まさに彼が言っていたことだと思い、インストールした。

ステップ2:プロジェクトの作成
次にプロジェクトを作成する。ターミナルを開き、dotnet new console -n TicTacToeコマンドを実行する。

ここで私がターミナルとは何か、ターミナルの開け方はどうするのか、と尋ねてもよかったのだろうが、さほど困難を招くことはないだろうと判断し、この点は省略した。
しかし、ここでもうひとつ重要なことがある。彼はインストールするコマンドを書いて、「コンソール・アプリケーションのように新しいプロジェクトを作成する」とコメントした。コンソール・アプリケーションとはインターフェースのないアプリケーションのことで、コンソールにテキストでコマンドを書くと、アプリケーションがテキストで応答する、というような仕組みになっている。コンソールにテキストでコマンドを書くと、アプリケーションはテキストで応答する。これは私が望んでいるものではないし、もともと彼に頼んだことでもない(おそらく私のせいで、実際にはデスクトップ・アプリケーション != インタフェースを持つアプリケーションなのだが)。だから、もしこの段階で私が手を滑らせて、彼の鼻をこすりつけなければ、このミスが後々どの段階で明るみに出て、再設計にどれだけ骨が折れることになるかはわからない。

よくなってきたけど、それでも、もう一度はっきりさせようと思った:

つまり、彼はすでに本来の仕事を忘れ、ふさわしくない選択肢を提案しているのだ。そういうこともあるので、彼とは油断しないようにしないといけない。
最後に、彼は何を使うか私に尋ねるが、私は見当がつかないので、尋ね続けなければならない:

そして、かなり長い相違点のリストがあるのだが、最初のポイントから、Xamarin.Formsは私たちには全く適しておらず(なぜ彼はそれを提案したのだろうか)、AvaloniaUIを選択すべきなのは明らかだ。
とにかく、これらすべての明確な説明の後、彼は最終的な指示を書き、私はそれを使ってプロジェクトをデプロイした:

それだけでは終わらない。VS Codeでプロジェクトを開いた後、2つのエラーが発生し、その対処を始めた:

最初のポイントでは、.NET Core SDKをインストールすることを勧めているが、最初に.NET SDKをインストールした場合、インストールする必要があるのか私にはわからない。再度お尋ねします:

必要ないことがわかった。上の説明に従って変数を設定し、VS Codeを再起動した。このトピックについてさらにいくつか質問したが、記事を短くするためにここでは挙げない。一般的に、この問題はコンピューターを再起動することで解決した。公平を期すために、私は現在のVS Codeウィンドウ(100万個も開いている)を閉じただけなので、もしかしたら全部閉じてから開き直せば、再起動しなくても解決したかもしれない。
プロジェクトを開いた後、エラーはなかったが、ビルド・リソースをインストールするよう提案された。しかし、ビルド・リソースをインストールするよう提案された。

ちなみに、当初は2つのエラーがあると言っていた。つまり、2つ目のエラーはこのトピックに関するもので、そこで何かが見つからなかったということだったのだが、再起動したらエラーそのものがなくなった。
結局、このような構造になった:

ステップ3:ゲームのロジックを書く

大変だから、段階的に始めよう:

全体として、良い答えだ。興味がある人がいたら、猫の下に置いておこう。
ファイルを作っているときに、VS Codeが別の拡張子を付けるように勧めてきたので、それについて質問してみた:

延長はしていない。
そして、私は正当な質問をする:

そして、おおむね普通の反応が返ってくる:

彼はGameBoardクラスのコードを書いてくれたので、他の2つのクラスのコードを書くように頼んだ。彼のコメントのおかげで、このコードが何をするものかは大体わかったが、構文そのものは僕にはよくわからない。
ところで、chgptが「クラス」という言葉を使っていることに今気がつきました。プログラマーである私は知っていますが、プログラマーでない人には理解されそうもないので、もう少し明確な質問が必要かもしれません(要するに、データの集合とそれを扱うためのメソッドを格納するオブジェクトです)。
プログラマーとして、私は構文に少し潜ることに興味があったので、彼にコードを一行ずつ解析して、それが何であるかを教えてくれるように頼んだ:

続き

それに対して、彼はまたもやアウトラインをスケッチするだけだ(どうやら私たちが代わりに全部書いてくれることを期待しているようだが、そんな幸運はない)。

繰り返すが、コードは一行もない。続けよう:

オーケー、素晴らしい。指示に従ってファイルを追加する。
すると(これはいいことだが)、次のステップを促すプロンプトが表示され、ロジックをリンクする必要があると言う。明確にしてくれ:

次にファイルのコードが来るが、ここでは追加しない。
しかし、そのコードを追加するときにいくつかのエラーがあるので、それを見つけることから始めましょう:



次に彼は「じゃあ、このコンポーネントを使えばいい」と言うのだが、使い方がわからないので聞いている:


メソッドを定義することができる、と彼は言う。第一に、メソッドを定義しなければエラーが発生するので、絶対に定義する必要がある。第二に、プログラマーとして、私たちが話していることは理解できるが、もし私がプログラマーでなかったら、何をすべきかを理解できるかどうかは定かではない。
次に、存在しないクラス・メソッドを呼び出そうとしていることに関連したエラーがいくつかある。

つ目のエラーも似たようなもので、存在しないResetGameメソッドを呼び出そうとしているのですが、そこからすぐに解決することができませんでした。なぜなら、この問題を読むのは気の弱い人には向かないからだ。私は答えを得るために汗をかかなければならなかったし、何度か、プログラミングのバックグラウンドが役に立っていて、どのような方向に向けるべきか一般的に理解しているのだと自分自身を捕らえた。おそらく、ノン・プログラマーはこの段階で多くの汗をかくだろう。
実はこの問題は、彼がもともと変なみたいなコードを書いていて、GameBoardクラスとGameLogicクラスでロジックを分けたために、必要な変数が一方のクラスにあり、必要な変数がもう一方のクラスにあったために発生した。しかし、プログラマーでない私には到底理解できないことで、この点からも、実装はそのままに何とか問題を解決するように口うるさく言い続けた。
注意深く見ていると、ある時点で彼は配列のあるボード変数をGameLogicクラスに移動させようとしたが、彼はすべてのロジックをあるクラスから別のクラスに移動させる方法を示さなかった。
とにかく、現在のステージを修正して、依頼をしよう。言っておくが、まだコードを動かしてみたわけでもないので、どの程度動くかはわからない。しかし、少なくともエラーはすべて修正したし、構文的にはすべて問題ない。実際の開発では、私はもちろんすでにプロジェクトを立ち上げて、最終的にどうなるかを見ているはずだが、ノンプログラマーには順序がわからないという事実から、chgptが投げかけた計画通りに進めていることは注目に値する。
ステップ3.1. 次に何をすべきかを考える
次に起こったのは、何か奇妙な段階のコミュニケーションだった。次に何をすべきか尋ねると、彼はこう言った:

後でわかったことだが、我々はすでに彼の提案を実行に移した。彼がコミュニケーションの文脈を失ったように感じる(それはありえない、チャットは同じだ)、あるいはこれは彼の通常の行動であり、彼は基本的に「空間に自分を見失う」ことがある。一般的には、このようなことが起こりうることを認識し、注意する必要があることを認識することが重要であり、安全に次のステップに進むことができる。
ステップ4:プロジェクトの立ち上げ
前回の不親切なコミュニケーションの後、直接プロジェクトの立ち上げを提案した:

すべてが論理的に見えるが、3点目には疑問が残る:

プログラムを取り違えて、間違った命令を与えてしまったのだ。ターミナルにコマンドを入力すると、プログラムが実行される。

一方では、これは成功であり、他方では、標準的なプラグインがここに開き、我々の機能は存在しない。もちろん、私たちのファイルをプログラムのメイン・ウィンドウに接続していないからである。しかし、私はプログラマーとしてこのことを理解しているので、まず問題を彼に伝え、彼が何を提案するか見てみることにした。

指示はまったく明確ではない。何かをチェックし、何かを確認する必要があるが、具体的なことは書かれていない。

その後、コードを調べ、すべてが正しいことを確認するというかなり長い指示があるのですが、問題は、この段階では、理由はまったくそうではなく、私たちのファイルをプロジェクトに接続していないだけで、まるでファイルがないかのようなのです。そして、私は彼からその答えを得ることができなかった。私は彼に現在のコードを送った:


そして、彼は私にこう言った:

つまり、彼は私を正しい答えからどんどん遠ざけ、私たちが書いた論理を掘り下げるよう勧めてきたのだ。私はもう何もせず、コネクションについて彼に直接質問した。プログラマーでない人は、何が問題なのかを正確に理解することは難しいだろう。


難しかった。再びプロジェクトを開始させます:


一般的に、ここでのエラーは、私のコンポーネントをメイン・ウィンドウで使用しているにもかかわらず、何らかの理由でそれがプルアップされないということだった。この問題に関しては、彼は熱心に私に間違った選択肢を提案し、しかもある時点でVisual StudioとVisual Studio Codeを混同して、VS Codeでは実装できないような推奨をした。
とにかく、何でもないことを長々と話した後、彼はようやく賢明なことを言った:

第2ステップでは、突然、私のファイルをインポートする必要があることが判明した。
彼に現在のコードを送ると、必要な行を直接組み込めるようにしてくれた:

回答としてOK

編集し、さらに実行すると、次のようなエラーが出た:



ユーモアを聞き取れなかった人のために:彼は、私のGameBoardViewコンポーネントがWindow型であること、つまり、トップレベルのウィンドウであること、他のウィンドウの中に置くことができないこと、それ自体でしか存在できないことがエラーであると言っている。そして、解決策として、私のコンポーネントを<Grid>で包むことを提案している。)


その後、別の方法で、コンポーネントがトップレベルのWindowである実装を残そうとしたが、30分ほどいろいろと変更した後、あきらめてこのステップに戻ることにした。結局、いくつかのバグ修正の後、すべてがうまくいった:





どういうわけか、2番目のケースでは、彼は(Window)this.VisualRoot;の代わりにthis.VisualRoot as Window;と書いた。
その後、また小さなエラーが出たが、彼はすぐに解決してくれた:

再度実行すると...

ジャーン!プロジェクトが開始され、いくつかのビューがレンダリングされました(リクエスト)。しかし、今のところ何も機能せず、ボタンを押しても処理されない。
しかし、この記事はすでに少し長いので、アプリケーションのデバッグは後編に書くことにしました。
ここまでの結論
私の個人的な感覚によれば、ノンプログラマーが何らかのアプリケーションを書くのは(少なくとも立ち上げの段階までは)非常に難しいだろう。私は自分のプログラミング経験を検証に持ち込まないように努めたが、それでもところどころでchgptに正しい方向を指示しなければならなかった。しかし、まだ本格的な結論は出していない。彼が我々のロジックをすべて修正することにどう対処するか、見てみよう。
もしこの検証をやってみようと決めた人がいたら(特にプログラマーでない場合)、ぜひ結果をシェアしてほしい。
Comments