イチから全部作ってみよう(18)生成AIと協力してプログラミングする時代がきた:山浦恒央の“くみこみ”な話(187)(3/3 ページ)
ソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」。第18回は、ちょっとした寄り道として、うるう年判定プログラムをテーマに、生成AIを活用したプログラミングのやり方を紹介する。
4.4 プログラムの生成
お題が分かったのでプログラムを生成します。「C言語でうるう年を判定するプログラムを作って」と入力すると、以下のリスト1を出力しました。
#include <stdio.h> int isLeapYear(int year) { if (year % 400 == 0) { return 1; // うるう年 } else if (year % 100 == 0) { return 0; // 平年 } else if (year % 4 == 0) { return 1; // うるう年 } else { return 0; // 平年 } } int main() { int year; // ユーザーに年を入力させる printf("西暦を入力してください: "); scanf("%d", &year); // うるう年かどうかを判定 if (isLeapYear(year)) { printf("%d年はうるう年です。\n", year); } else { printf("%d年は平年です。\n", year); } return 0; }
このように、実現したいことを適切に伝達できれば、AIがプログラムを瞬時に出力します。これは、プログラミングを学んだことがある人にとっては、驚くべきことですね。
4.5 分からないときは解説してもらう
もし、出てきたプログラムの内容が理解できなかった場合は、それもChatGPTに詳しく聞けばいいのです(図5)。
例えば、scanfの部分が分からなかったとすると、コードをコピペして、何をやっているか確認しましょう。図5の通り、ユーザーからの入力処理であることが分かります。ここまでで、うるう年を判定するプログラムは簡単に作成できましたね。
5.生成AIを使用する注意点
非常に便利な生成AIですが、注意することが幾つもあります。例えば、「生成AIの出力は唯一無二のものではなく、一つの例にすぎない」「ソースコードを作らせると、中にマルウェア(ウイルス)を埋め込むことがある」「間違っているのに、『これは正しい』と自信たっぷりに言い切る」などといったことが挙げられます。また、個人の好き/嫌いが重要な芸術系や、駆け引きが重要なギャンブルでは能力を発揮しづらいようです。
生成AIの出力結果が本当に正しいかは自分で判断する必要があります。先ほどのコードの場合、「西暦がマイナスだったら」「100万年だったらどうするか」という出力結果の評価をする必要があります。
開発プロジェクトでの設計会議で、新人エンジニアに「なぜ、このアルゴリズムを使い、このようにコーディングしたのか?」と質問すると、「生成AIに言われたから……」と答えた場合があったそうです。そんなことでは、プログラマーの存在意義がありません。そんな態度では、「生成AIに使われている」のであって、「生成AIを使っている」のではありません。そんな設計では、不測の事態の時に困ってしまいますね。「なぜこのコードを採用したか」「想定していない問題は何か」「これで顧客の要求を満足できるか」といった本質的なことを理解した上で、うまく活用する必要があります。
また、生成AIを活用するには、実現したいことを的確に伝える能力が不可欠です。あいまいな指示では期待通りの結果を得られません。うるう年の例ならば、「ただし、負の数や極端に大きな値も考慮すること」と適切なプロンプトを考えると、より精度の高い回答を引き出せます。ぜひ、いろいろなプロンプトを入れてみて、最適な結果を生成してみてください。
6.おわりに
皆さんが社会に出てからの40年間で、数多くの技術革新が起こるでしょう。技術は常に進歩し続け、一度便利と分かると元の世界に戻ることはありません。この時、新しい技術を怖がらず、積極的に活用する姿勢が重要です。今回は、最先端技術の一つである生成AIのChatGPTの簡単な使い方と注意点を説明しました。
ChatGPTを使うと、プログラミングの作成/解説などを低コストかつ短期間で行えるようになります。これからのソフトウェア開発で、圧倒的に有用なツールになります(筆者は、個人的には、ChatGPTのような生成AIの活用を中心にソフトウェア開発が進むと思っています)。もし分からないことがあっても何回でも確認できるので、学習にも適しています。ただし、常に完璧な回答を出すとは限りません。生成AIを上手に活用し、特性を理解しながら、自らの考えを基に結果を判断することが重要です。
山浦先生執筆の書籍が販売中です!
本連載で取り上げた「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
イチから全部作ってみよう(17)レビューは記録することで効率的に実施できる
ECサイトを題材にソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」がスタート。シリーズ第17回は、レビュー工程を効率的に進めるためのレビュー記録の方法を紹介する。イチから全部作ってみよう(16)レビューは要求仕様書完成に向けた最後の関門
ECサイトを題材にソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」がスタート。シリーズ第16回は、「セルフチェック」に続けて行う「開発者レビュー」「顧客レビュー」といったレビューの全体像を把握する。イチから全部作ってみよう(15)テストの第一歩「セルフチェック」が大惨事を防ぐ
ECサイトを題材にソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」がスタート。シリーズ第15回は、ここまで作成してきた要求仕様書に対するテストの第1段階となる「セルフチェック」について説明する。イチから全部作ってみよう(14)異常系を組み込んだら仕様書が膨れ上がった!
ECサイトを題材にソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」がスタート。シリーズ第14回は、第12回と第13回で検討した異常系を、第11回で作成したたこ焼き屋の模擬店の要求仕様書に組み込んでみる。イチから全部作ってみよう(13)異常系への対策は「諦める」ことも肝要
ECサイトを題材にソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」がスタート。シリーズ第13回は、たこ焼き屋模擬店の要求仕様書から洗い出した異常系にどのような対策を行うべきかを考察する。