大阪電気通信大学

ChatGPTを利用した プログラム作成支援システムの提案

概要

 我が国では、IT人材の育成に力を入れている[1]。しかし、図 1を見ると人材不足の問題は解決しておらず、逆に深刻化している[2]。人材不足の対処法としてアウトソーシングの活用やITツールの導入が考案されている。ITツールの既存製品は、プログラム中に記載された関数からAIがコードを提案する製品[3]や、すでに記載されたコードを補完する製品[4]がある。しかし、既存製品では、作成に用いることのできるプラットフォームの指定や開発に利用するプログラム言語の知識がなければプログラム作成の命令を出すことが難しいといった課題がある。そこで、本研究では、プラットフォームに関わることなく、開発に利用する言語の知識がなくてもプログラム作成の支援が可能な手法を提案する。

提案手法

 本研究で提案する手法の流れを図 1に示す。提案手法は、フローチャート作成機能、命令文作成機能、プログラム結合機能で構成される。入力データは、作成したい機能のプログラムのフローチャート、出力データは、プログラムのソースコードとする。

図1 提案手法の処理フロー

命令文作成機能

 本機能では、図2の開発中のWebUIを用いて作成したフローチャートを対話型AIに入力する文章を生成し、対話型AIにプログラム生成の命令をする。開発するWebUIを用いることで、フローチャート中の処理ごとに利用したい処理方法の指定などの細かい指示を出せるようにする。対話型AIを用いるとことで、プログラム作成の支援をするAIが特定のプラットフォーム以外で利用できない課題と作成するプログラム言語と関数の知識が必要になってくる課題を解消する。

図2 開発中のWebUI

プログラム結合機能

 本機能では、命令文作成機能で生成された複数のプログラムを図 3のように対話型AIで一つのプログラムに結合する。対話型AIの利用によって手動で結合させる際におきる変数の不一致を防止する。

図3 結合機能の流れ

検証実験

実験内容

 本実験では、提案手法で利用する対話型AIがプログラム作成に利用できるかを確認する。実験に用いるフローチャートは、図4、図5、図6と図7とする。今回の実験では、開発中のWebUIは用いずdrawio[5]を用いる。

図4 mediapipeを利用して骨格の角度を表示するフローチャート
図5 入力された数値が素数かそうでないかを
判断するフローチャート
図6 素数を判別するフローチャートの判別部分
図7 入力された数値が素数かnの倍数かを判定するフローチャート

本実験では、まず、対象となるフローチャートをChatGPT[6]に入力し、プログラムの作成を命令する。そして、生成されたプログラムがフローチャートと同じ内容であるかで評価する。

結果と考察

図4のフローチャートから生成されたプログラムを図8に示す。図5のフローチャートから生成されたプログラムを図9に示す。図9のプログラムの素数を判定している箇所に図6のフローチャートの処理方法に変更する命令を基に生成されたプログラムを図10に示す。図7のフローチャートから生成されたプログラムを図11に示す。

まず、図8のプログラムは、フローチャートのプロセスと同じ様に処理が並んでいる。関数の中は表示するだけやランダムでTrueかFalseを返すだけとなっている。しかし、それは、フローチャートで処理の方法を細かく指定していなかったことが原因だと考えられる。

図8 図4のフローチャートから生成されたプログラム

次に、図9のプログラムは、フローチャートのプロセスと同じ様に処理が並んでいる。しかし、プログラムを見ていくと指定していない素数の判別をするプログラムが追加で生成されている。これは、素数を判別する手法をChatGPTがすでに学習をしていたためにプログラムが生成されたと考えられる。

図9 図5のフローチャートから生成されたプログラム

一方で、図10を確認すると、素数の判別するプログラムに大きな変わりが無くフローチャートのプロセスとは、違うプログラムが生成されている。これは、すでにChatGPTが学習している処理の方法があることでそちらが優先されたと考えられる。

図10 図6のフローチャートから生成されたプログラム

最後に、図11を確認するとChatGPTがプログラムを生成するときに倍数の指定をしているのが分かる。また、素数を判別するプログラムは生成されておらず、倍数の確認をするプログラムだけが生成されている。

図11 図7のフローチャートから生成されたプログラム

おわりに

 本研究では、ChatGPTを利用してフローチャートからプログラムを生成する手法を提案した。検証実験により、ChatGPTを利用することでフローチャートに書かれたプロセスのプログラムを生成できることを確認した。しかし、命令の方法によってはプロセスどおりのプログラムの生成ができなかった。また、現在開発しているWebUIでは、図形の生成やテキストの入力などは実装できているが、処理ごとに細かい指定をする機能が実装できていない。そのため、今後は、命令方法の改善と処理毎に細かな指定ができるWebUIの開発を目指す。

参考文献

[1]経済産業省:デジタル人材の育成,https://www.meti.go.jp/policy/it_policy/jinzai/index.html,2023.12.23.

[2]経済産業省:IT人材の最新動向と将来設計に関する調査結果,https://www.meti.go.jp/shingikai/economy/daiyoji_sangyo_skill/pdf/001_s02_00.pdf,2023.12.28.

[3]GitHub:GitHub Copilot,https://github.com/features/copilot,2023.12.23.

[4]Hugging Face Inc.:Hugging Face,https://huggingface.co/,2023.12.23.

[5]Diagrams.net:draw.io,https://app.diagrams.net/?lang=ja,2023.12.23.

[6]OpenAI:ChatGPT4,https://openai.com/gpt-4,2023.12.23.

作者プロフィール

安達 凱永

情報学科 4年生

コメント