【ChatGPT】生成AIと一緒にC言語で簡単なアプリを作ってみた(前編)

生成AI×プログラミング

「生成AIと一緒にプログラミングでいろいろ作ってみた」シリーズ

記念すべき第1弾は、【C言語】で「アラーム機能付き時計」を作ってみます。

まずは、一番慣れているプログラミング言語であるC言語で、次のようなことを掴んでいきたいと思います。

  • 生成AIとペアプログラミングするときの流れ
  • どのように生成AIに命令をしていけば良いか
  • 生成AIとのペアプログラミングは学習効率が良いか

今回は生成AIとしてChatGPTを使用していきます。

前編となる本記事では、作るアプリの要件定義について紹介した後、アプリを作るための環境構築についてChatGPTと一緒に進めていきたいと思います。

後編では、ChatGPTと実際にペアプログラミングを行い、簡単なアプリの実装をしていきます。作成したアプリの実際の画面やソースコード等も載せているので是非ご覧ください。

最初に後編を読みたい方はこちら

それではさっそく始めていきます。

※注意※
生成AIから提供される情報は毎回同じ内容が提供されるとは限りません。また、本記事内でも生成AIからの回答内容は極力事実確認をするよう努めておりますが、ご自身の環境で得た生成AIからの回答についても内容に誤りが含まれる可能性があるため、確認しながら進めてください。

要件定義

今回想定しているアプリケーションは、「アラーム機能付きの時計」です。

要件定義は以下の通りとします。

要件定義

<環境>

  • OSにはWindowsを用いる
  • 作成するアプリはGUIアプリケーションである
  • 使用するプログラミング言語はC言語

<基本構成>

  • アラーム画面と時計画面があること。
  • それぞれの画面はタブで切り替えることができること。

<アラーム画面>

  • アラーム画面には、アラームを登録する「+」ボタンと、削除する「-」ボタンがあること。
  • アラームは5件まで登録可能であること。
  • アラームは1分刻みで登録可能であること。
  • アラーム時刻になるとポップアップメッセージでアラームを通知すること。

<時計画面>

  • 12時間表示と、24時間表示の切り替えができること。
  • 日付をYYYY/MM/DDの形式で記載すること。(ただし、Yは年、Mは月、Dは日を表す。)

なお、要件定義をする際、自分で一通り考えた後、ChatGPTに「このようなアプリを作ろうと思っています。要件定義をしてください。」といった質問をすると、ほかにどのような要件が必要か、提案してくれるので参考にしてみてください。

ChatGPTに聞いたこと

ChatGPTとのペアプログラミングが初めてだったため、自分が意図した回答が返ってくるまでに何度かプロンプトを書き換えました。

ここでは、ペアプログラミングを行う上でChatGPTに聞いていく質問の、全体的な流れについて紹介します。

具体的には以下の流れで進めていきました。

  1. ペアプログラミングをしてほしいこと(要望)を伝える
  2. 作成したいものの要件定義を伝える(今回はアラーム機能付き時計アプリ)。
  3. 使い方がわからないツール等があれば、インストール方法や使い方などについて質問する。
  4. 具体的な開発のステップについて聞く。この時も、「初心者に伝わるように」、「専門的な用語がある場合はその都度説明を加える」ことを伝える。

1~3については前編で、4については後編で、順にサンプルプロンプトとペアプログラミングの実施例を紹介していきます。

※ChatGPT等、生成AIに命令する文章のことを「プロンプト」などと言ったりします。

1.ペアプログラミングをしてほしいこと(要望)を伝える

まず、見出しの通り、ペアプログラミングをしてほしいことを伝えます。

サンプルプロンプトは以下の通りです。

あなたは、プロのC言語プログラマーです。これからC言語でアプリケーションを作成するので、初心者に教えるつもりでペアプログラミングをしてください。

このときのポイントは、

  • ChatGPTにどの目線からアドバイスしてほしいか、役割を明確にする。(ここでは、プロのC言語プログラマーとしています)
  • どのレベルで教えてほしいかを伝える。(「初心者に教えるつもりで~」や、「中学生でもわかる説明で~」など)
  • どのプログラミング言語で何をするのかを明確にする。

です。

上記のプロンプトにより、ChatGPTにC言語でアプリを作りたいことをChatGPTに教えます。

私がChatGPTから得た回答はこんな感じでした。

(ChatGPTからの回答)
もちろん、C言語でのアプリケーション作成をお手伝いします!まずは、どんなアプリケーションを作りたいか教えてもらえますか?簡単なものから始めると良いかもしれませんね。例えば、計算機、テキスト処理、またはゲームなどがあります。どれに興味がありますか?

2.作成したいものを伝える

次に、作成したいものについて伝えます(今回はアラーム機能付き時計アプリ)。

サンプルプロンプトは以下の通りです。

作成するアプリケーションは「アラーム機能付き時計アプリ」です。以下に要件定義を記載します。
(以下、要件定義をコピペ)

ここでのポイントは、

  • 何を作るかを明確に伝える。(今回は「アラーム機能付き時計アプリ」)
  • 要件定義はできるだけ具体的かつ詳細に伝える。

です。

ただ、要件定義は初めからカッチリ決まっていればよいですが、作ってるうちに「ここ、こうしたいな」とかが出てくると思うのであまりこだわりすぎなくても良いかと思います。

最低限、どのOSで動くのか、GUIなのかコマンドプロンプトベースなのか等は決めておきましょう。

このプロンプトに対するChatGPTからの回答について記載しますが、割としっかりと教えてくれて文章が長かったので文章そのものは割愛し、以下にまとめます。

(ChatGPTからの回答)
・開発環境の準備
・プログラムの基本構成(メインウィンドウの作成、アラーム画面の作成など)
・各機能の実装(時計機能、アラーム機能の実装で必要な処理の概要など)
・基本的なウィンドウを作成するサンプルコードなど

開発環境には、Code::Blocks, Visual Studio, Dev-C++等が提案されました。どれも統合開発環境であり、C言語の開発が可能です。

ここでは、私が一番なじみ深いVisual Studioを使用しました。

ライブラリには、Windows APIやGTK+を提案されました。

GTK+は初めて聞いたのですが、調べてみると

GTK (以前は GTK+[2]The GIMP Toolkit) は、クロスプラットフォームウィジェット・ツールキット(GUIツールキット)である。

GTK (ツールキット) – Wikipedia

とのことで、このツールも実際にGUIアプリケーションに使用することができそうでした。

ですが、ここではWindows APIを選択していきます(なんとなく)。

まとめると、開発環境は以下の通りです。

  • OS:Windows 11
  • IDE(統合開発環境) :Visual Studio Community 2022
  • ライブラリ:Windows API

3.知らないツールについて質問する

2で提案されたツールの中に、使い方がわからないツールや、初めて聞くものなどがあれば、インストール方法や使い方などについてChatGPTに質問してみましょう。

今回はChatGPTから統合開発環境として、Visual Studioを使用することを提案されたので、Visual Studioでソースコードを書くまでに必要なことについて質問しました。

サンプルプロンプトは以下の通りです。

Visual Studioのインストール方法、および、Visual Studioでソースコードを記述するまでの具体的な進め方を教えてください。

ChatGPTからの回答ですが、まとめると以下の通りでした。

(ChatGPTからの回答)
・Visual Studioの無償版であるCommunityエディションを使用すること
・C言語開発のために、「C++によるデスクトップ開発」をVisual Studioでインストールすること
・Visual Studioでプロジェクトを作成して、その中にソースコードを書く”main.c”ファイルを作成すること

Visual Studioには複数の種類があり、ちゃんと無償版のCommunityを勧めてくれました。

また、開発環境の構築についても概ね合っていそうでした。ちゃんと「C++によるデスクトップ開発」をインストールすることも教えてくれるんですね。

前編のまとめ

ここまで、作成するアプリの要件定義と、ペアプログラミングを行う上でChatGPTにする質問1~3のサンプルプロンプトを紹介してきました。

利用した感じでは、ちゃんと使えるツールを紹介してくれるなと思ったことと、質問したいことを明確にすれば結構詳しく教えてくれるなと思いました。

特に環境構築には苦戦するかと思いましたが、何に困っているのか、何を教えてほしいのかを具体的に質問することでスムーズに環境構築をすることができました。

次回、後編ではいよいよペアプログラミングを行いながらアプリの実装に取り掛かっていきます。

後編はこちら

コメント

タイトルとURLをコピーしました