エンジニアの業務を効率化する生成AIによる「プログラミング支援」
- 1 はじめに
- 2 どのような支援をしてもらえるのか
- 3 ChatGPT4を使ったプログラミング支援
- 3.1 (1)アルゴリズムを提案してもらう
- 3.2 (2)フローチャートを書いてもらう
- 3.3 (3)プログラミングコードを作成してもらう
- 3.4 (4)レビューしてもらう
- 3.5 (5)リファクタリングしてもらう
- 3.6 (6)コメントを追加してもらう
- 3.7 (7)バグを指摘、修正してもらう
- 3.8 (8)テストケースを作成してもらう
- 3.9 (9)テストコードを作成してもらう
- 3.10 (10)テストデータを作成してもらう
- 3.11 (11)仕様書を作成してもらう
- 4 プログラマーは生成AIに仕事を奪われる職業か
- 5 まとめ
はじめに
これまでOpenAIのChatGPTを中心に、生成AIの仕組みや活用方法について解説してきました。本連載も今回でひと区切りとします。最終回は、エンジニアなら知っておきたい生成AIによるプログラミング支援について取り上げます。
どのような支援をしてもらえるのか
第2回で「大規模言語モデル(LLC) は言語の天才」と紹介しましたが、プログラミングも言語の一種なので実はかなり得意分野と言えます。生成AIが簡単なプロンプトだけで見事にプログラミングコードを生成するさまを見て、“プログラマーの仕事を奪われる”と脅威に感じる声も多く聞かれるくらいです。その是非について論じる前に、まずは生成AIがどのような支援を行ってくれるかを見てみましょう。
プログラミングという作業は、単にコードを書いているだけではありません。コードを書く前にアルゴリズムを考えたり、コードを書いた後にテストを行ったりと、実にさまざまなステップを経てきちんと機能するプログラムが完成します。そして生成AIは、これらの作業全般を支援してくれる実力を有しています。
- a. アルゴリズムを提案してもらう
- b. フローチャートを書いてもらう
- c. プログラミングコードを書いてもらう
- d. プログラムレビューしてもらう
- e. リファクタリングしてもらう
- f. コメントを追加してもらう
- g. バグを修正してもらう
- h. テストケースを作成してもらう
- i. テストコードを作成してもらう
- j. テストデータを作成してもらう
- k. 仕様書を逆生成してもらう
ChatGPT4を使ったプログラミング支援
生成AIによるプログラミング支援ツールは続々と登場しており、これからはAIツールを使いこなしながらプログラミングを行うのが必須の時代と言えます。今回は汎用AIであるChatGPT4を使って、どのような支援を行ってくれるのか、ひと通り確認しましょう。実際には、もっと本格的なプロンプトを何回もやり取りして完成度の高いアウトプットを得ることになりますが、そのさわりということでご覧ください。
(1)アルゴリズムを提案してもらう
アルゴリズムとは、ある問題を解決するための手順や手法のことです。プログラミングを行う際のキホンのキですね。経験の浅いプログラマーに「じゃあ、この処理をフローチャートに書いて」と言うと固まってしまう場合がありますが、コピペ主体でプログラミングを書いているとアルゴリズム力が身に付いていない場合があるので注意が必要です。
・ChatGPT4にアルゴリズムを依頼
図1はChatGPT4に次のプロンプトを投げてアルゴリズムを提案してもらったものです。4行ほどの簡単なプロンプトですが、前半でアルゴリズムのステップ、後半でPythonを使った簡単な実装例を示してくれています。
請求締め処理のアルゴリズムを示してください。処理内容は次の通り。
- 締処理バッチは毎日実行される
- 処理日が顧客マスターの締日と一致する顧客のデータが対象となる
- 前月の締日翌日から本日までの売上データを集計して請求データとする
新規でプログラムを作成するためにアルゴリズムを考える際に、このように生成AIを利用するのはとても有用です。自分でイチから考える力が身に付かないという批評もありそうですが、自分では思いつかないアルゴリズムを示してくれる“お手本”として勉強になるメリットの方が大きいと思います。
(2)フローチャートを書いてもらう
図2は提案されたアルゴリズムを単純にフローチャートで示したものです。普通は書かないのですが、ここでは処理を理解しやすいようにデータベースと対比した形にしてみました。簡単な例題なのでシンプルなチャートですが、処理が複雑であればあるほど、最初にアルゴリズムを整理してからプログラミングに着手する必要があります。
・PlantUMLを使ったフローチャート生成
AIを使ってフローチャートを自動作成するツールもたくさん出まわっています。ここではテキストベースの記述からUML図を生成するオープンソースのツールPlantUMLを使ってフローチャートを生成してみましょう。
- ChatGPT4にplantumlコード作成を依頼
上記に1行処理を追加したプロンプトを用いてChatGPT4にplantumlコード作成を依頼すると、図3のようにPlantUMLコードを作成してくれます。フローチャートを作成するために、下記の締め処理をplantumlコードで示してください。
- 締処理バッチは毎日実行される
- 処理日が顧客マスターの締日と一致する顧客のデータが対象となる
- 前月の締日翌日から本日までの売上データを集計して請求データとする
- ループ処理で対象となる顧客の請求データを全て作成する
- plantuml online web serverにコードを貼り付けてSubmit
ここでは無料で使えるPlantuml Web Serverサイトを使って、フローチャートを作図してみましょう。ChatGPTが作成してくれたPlantUMLコードを「Copy Code」アイコンでコピーし、このWebページの上部コードエリアに貼り付けます。
「Submit」ボタンをクリックするとフローチャートが作成されるのですが、実は上記のPlantUMLコードにはバグがありsyntax errorが発生します。そこでChatGPTに「エラーを修正して」とプロンプトでバグ修正させる必要がありました。ChatGPTを使ったプログラミング支援では、このようにチャットのやり取りで求めるアウトプットを得るのが普通です。 - PlantUMLコードでフローチャートを作成
ChatGPT4が自分でバグ修正したPlantUMLコードを貼り付けてSubmitすると、図4のようにフローチャートが作成されます。このフローチャートで気になる点があれば、都度ChatGPT4に修正や加筆を依頼することで、より完成度の高いフローチャートを得ることができます。
(3)プログラミングコードを作成してもらう
図1ではPythonコードが生成されましたが、今度はJavaで作成してもらいましょう。下記のプロンプトでコード生成を依頼すると、図5のようなJavaのサンプルコードを作成してくれます。
下記の締め処理をJavaコードで示してください。
- 締処理バッチは毎日実行される
- 処理日が顧客マスターの締日と一致する顧客のデータが対象となる
- 前月の締日翌日から本日までの売上データを集計して請求データとする
- ループ処理で対象となる顧客の請求データを全て作成する
生成AIのすごいところは「行間を読む」ことです。オフショア開発などで具体的に仕様を記述しなかったために齟齬が生じることはよくありますが、生成AIは仕様があいまいでも、とにかく不足分を補ってコードを書いてくれるので、逆に指示を出す側にこの仕様が不足していたと気付かされることが多くあります。サンプルコードなので、これをヒントにプログラミングを完成させる必要はありますが、その作業を何度もプロンプトをやり取りして生成AIにやらせることもできます。
(4)レビューしてもらう
プログラムレビューとは、ソースコードの品質を向上させるために、他のメンバーの手を借りて問題点や疑問点、改善案などを指摘してもらう作業です。バグや不適切なコードの発見、可読性の向上、コーディングルールの遵守などをレビューで指摘してもらうなど、とても重要なのですが、誰かに時間を割いてもらう必要があるために、つい遠慮してやらないことも多いです。
そこで便利なのが生成AIにレビューをしてもらうことです。まずは単純な効果として、デバッグ用コードの消し忘れやうっかりミスなどを発見してくれます。また、仕様漏れやバグの発見、保守性の問題点指摘なども行ってくれます。さらに自分では気付かない点を指摘してもらうことで、自身のプログラムスキルの向上にも役立ちます。これからは「プログラムを書いたら生成AIにレビューしてもらう」という作業を習慣にすると良いと思います。
図5のサンプルコードに対してプログラムレビューをしてもらった結果が図6です。レビューポイントとして、クラスとメソッドの設計、エラーハンドリング、リソース管理、SQLインジェクションのリスク、コードの効率、日付の取り扱いなどを挙げてくれていますね。このように指摘してくれると自分でもチェックするポイントが明確になって、コード品質を向上させることができます。
(5)リファクタリングしてもらう
リファクタリングは、ソフトウェアの動作を変えない範囲でプログラムコードを洗練させる作業です。無駄なコードや冗長なコードを省き、まとまった処理をメソッド化したりネスト構造を浅くするなどにより、コードを分かりやすくして可読性を高め、バグが発生しにくいコードにします。文章を書いたら必ず推敲するのと同じようにプログラミングしたら必ずリファクタリングするべきですが、この作業にも生成AIを活用できます。
ChatGPT4に「上記のJavaサンプルコードをリファクタリングしてください」と伝えると図7のようにリファクタリングを行ってくれます。生成AIが自分で作成したばかりのコードにもリファクタリングさせると、だいぶ洗練されたものになることが分かりますね。部下が提出した文章を「まず、自分で推敲して」と伝えるだけでだいぶマシになるような感じですね(嫌な上司ですが)。
(6)コメントを追加してもらう
生成AIは適切なコメントを付ける作業も得意です。上記のコードに「コメントを追加して分かりやすくしてください」と依頼すると、図8のようなコメントを付けてくれます。
コメントは可読性を向上してメンテナンスを容易にする効果のほか、コードにドキュメントとしての役割を持たすこともできます。コメント付記作業も1つのノウハウなので、AIに付けてもらってそれを確認・修正する作業を繰り返すと分かりやすいコメントを付けられるようになります。
(7)バグを指摘、修正してもらう
実際にプログラムを作成する際に重宝するのは、バグの指摘や修正をしてもらうことです。最近のワープロソフトはスペルミスや言い回しのおかしなところがあると波アンダーラインなどで指摘してくれますが、プログラミングコードで似たようなことを行うイメージです。「コードを書いたら生成AIでバグチェック」という操作を習慣にすることで、ミスを早期発見できて開発に関わる時間を短縮化できます。
「リファクタリング後のコードのバグを指摘してください」と依頼すると、図9のようにバグの可能性のある箇所と改善提案を指摘してくれます。
(8)テストケースを作成してもらう
テストケースは、プログラミングが期待通りに動作するかを確認するための手順書です。テストケースを作成する目的は、主に次の2点です。
- 過不足なくテストを実施するためのパターン洗い出し
- テスト内容を理解できるようにドキュメント化する
テストケースを作成せずにいきなりテストを行うと、テスト漏れが生じたり、障害発生時などにどのようなテストを行ったかを確認できないことになります。このテストケースの作成にも生成AIを活用できます。「上記のJavaコードに対するテストケースを作成してください」と依頼すると、図10のようにJUnit 5を使用したテストケースを作成するプロセスを示してくれます。
この例では、まずテストケースの設計として正常系と異常系、そして境界値分析の3つのテストポイントを挙げ、続いてテストクラスの実装例を示してくれていることが確認できます。
(9)テストコードを作成してもらう
最近のプログラミングでは、テストコードを記述してテストを自動化することが主流になりつつあります。テストコードの作成にも生成AIを活用してみましょう。上記のJavaコードにテストコード作成を依頼すると、JUnitやMockitoなどのモッキングフレームワークを使用したユニットテストを書く方法を提案してくれます(図11)。
テストクラスの例を見ると、Javaで人気のモッキングフレームワークMockitoを使用して、次のような手順でユニットテストを行う手順を示してくれています。
- //設定
Connection、PreparedStatment、ResultSetという3つのオブジェクトをモック化する。 - //メソッドを実行
モックオブジェクトにProcessCustomerメソッドを実行する - //検証
verifyメソッドを使用して、モックされたオブジェクトに対してメソッド呼出しが期待通りに行われたかを検証する
モッキングフレームワークはテストプロセスをサポートするためのツールで、主にユニットテストにおいてコードの動作を検証するために用いられます。外部のコンポーネントやサービスとの相互作用を模倣(mock)することで外部システムへの依存を排除してテストを行えます。
JavaやJavaScript、Pythonなど、主要言語ごとにさまざまなモッキングフレームワークがありますが、主に次のような機能でテストを実行します。
- モックオブジェクトの生成
実際のオブジェクトの代わりに動作を模倣するモックオブジェクトを生成する - メソッドの振る舞いを設定
モックオブジェクトが呼び出された際の戻り値や例外を設定する - メソッドの呼出しと検証
モックオブジェクトを呼び出し、コードが期待通りの動作を行うかを検証する
(10)テストデータを作成してもらう
テストケースやテストコードだけでなく、テストデータも生成AIに作成してもらいましょう。「Javaコードをテストするためのテストデータを作成してください」と依頼すると、図12のようにテストデータ作成の考慮事項と、実際のサンプルテストデータを作るためのInsert文も提供してくれます。
テストデータの作成は根気のいる単純作業なので、生成AIとやり取りして適切なテストデータを作成するのは効率的だと思います。
(11)仕様書を作成してもらう
最近のプログラミングでは、最初にプログラミングコードを作成してから、最後にドキュメントにまとめることが少なくありません。ドキュメント化することで誰でも理解できるようにして、メンテナンス性を高める重要性は誰しも理解しています。しかし、既に動いているプログラムがあるので、ちょっと後ろ向きで面倒くさいと思うことの多い作業でもあります。そこで、この作業も生成AIにやってもらいましょう。
「Javaコードをもとに仕様書を作成してください」と依頼すると、図13のように体系的にドキュメントにまとめてくれます。この作業も何回かプロンプトをやり取りすることで完成度の高いドキュメントにブラシュアップすることが可能です。
プログラマーは生成AIに仕事を奪われる職業か
まだまだプログラミングを支援する使い方は山のようにありますが、このくらいにしておきましょう。お伝えしたいのは、プログラマーは生成AIを使いこなして、スマートで品質の高いプログラムを圧倒的なスピードで作成する時代に入ったということです。
生成AIは、プログラマーの仕事を奪う存在ではありません。むしろ、プログラマーの生産性を飛躍的に向上させる夢のような道具が出現したということです。ツールもたくさん出まわっており、それぞれが日々進化していますので、ぜひ、積極的にAI支援ツールを試して使いこなしてください。
まとめ
今回は、以下のような内容について学習しました。
- アルゴリズムを提案してもらう
- フローチャートを書いてもらう
- プログラミングコードを書いてもらう
- プログラムレビューしてもらう
- リファクタリングしてもらう
- コメントを追加してもらう
- バグを修正してもらう
- テストケースを作成してもらう
- テストコードを作成してもらう
- テストデータを作成してもらう
- 仕様書を逆生成してもらう
技術革新が激しいIT業界では、新しい技術やツールを積極的に使いこなして、個人やチーム全体でもバージョンアップを図らなければいけません。新しいことにチャレンジせずに、これまでのやり方を綿々と続けているエンジニアを見かけますが、そのスタンスだと仕事を奪われてしまうかも知れません。
生成AIを使いこなすことは、作業効率を著しく高める効果のほかに、自身のスキルアップにもつながります。ぜひ、皆さんご自身で時間を割いて、いろいろと試してみてください。