お題が分かったのでプログラムを生成します。「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がプログラムを瞬時に出力します。これは、プログラミングを学んだことがある人にとっては、驚くべきことですね。
もし、出てきたプログラムの内容が理解できなかった場合は、それもChatGPTに詳しく聞けばいいのです(図5)。
例えば、scanfの部分が分からなかったとすると、コードをコピペして、何をやっているか確認しましょう。図5の通り、ユーザーからの入力処理であることが分かります。ここまでで、うるう年を判定するプログラムは簡単に作成できましたね。
非常に便利な生成AIですが、注意することが幾つもあります。例えば、「生成AIの出力は唯一無二のものではなく、一つの例にすぎない」「ソースコードを作らせると、中にマルウェア(ウイルス)を埋め込むことがある」「間違っているのに、『これは正しい』と自信たっぷりに言い切る」などといったことが挙げられます。また、個人の好き/嫌いが重要な芸術系や、駆け引きが重要なギャンブルでは能力を発揮しづらいようです。
生成AIの出力結果が本当に正しいかは自分で判断する必要があります。先ほどのコードの場合、「西暦がマイナスだったら」「100万年だったらどうするか」という出力結果の評価をする必要があります。
開発プロジェクトでの設計会議で、新人エンジニアに「なぜ、このアルゴリズムを使い、このようにコーディングしたのか?」と質問すると、「生成AIに言われたから……」と答えた場合があったそうです。そんなことでは、プログラマーの存在意義がありません。そんな態度では、「生成AIに使われている」のであって、「生成AIを使っている」のではありません。そんな設計では、不測の事態の時に困ってしまいますね。「なぜこのコードを採用したか」「想定していない問題は何か」「これで顧客の要求を満足できるか」といった本質的なことを理解した上で、うまく活用する必要があります。
また、生成AIを活用するには、実現したいことを的確に伝える能力が不可欠です。あいまいな指示では期待通りの結果を得られません。うるう年の例ならば、「ただし、負の数や極端に大きな値も考慮すること」と適切なプロンプトを考えると、より精度の高い回答を引き出せます。ぜひ、いろいろなプロンプトを入れてみて、最適な結果を生成してみてください。
皆さんが社会に出てからの40年間で、数多くの技術革新が起こるでしょう。技術は常に進歩し続け、一度便利と分かると元の世界に戻ることはありません。この時、新しい技術を怖がらず、積極的に活用する姿勢が重要です。今回は、最先端技術の一つである生成AIのChatGPTの簡単な使い方と注意点を説明しました。
ChatGPTを使うと、プログラミングの作成/解説などを低コストかつ短期間で行えるようになります。これからのソフトウェア開発で、圧倒的に有用なツールになります(筆者は、個人的には、ChatGPTのような生成AIの活用を中心にソフトウェア開発が進むと思っています)。もし分からないことがあっても何回でも確認できるので、学習にも適しています。ただし、常に完璧な回答を出すとは限りません。生成AIを上手に活用し、特性を理解しながら、自らの考えを基に結果を判断することが重要です。
本連載で取り上げた「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の書籍「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から好評発売中です。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しています。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。
前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。
両書とも興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.