検索
連載

イチから全部作ってみよう(18)生成AIと協力してプログラミングする時代がきた山浦恒央の“くみこみ”な話(187)(3/3 ページ)

ソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」。第18回は、ちょっとした寄り道として、うるう年判定プログラムをテーマに、生成AIを活用したプログラミングのやり方を紹介する。

Share
Tweet
LINE
Hatena
前のページへ |       

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;
}
リスト1 ChatGPTが生成したうるう年を判定するプログラム

 このように、実現したいことを適切に伝達できれば、AIがプログラムを瞬時に出力します。これは、プログラミングを学んだことがある人にとっては、驚くべきことですね。

4.5 分からないときは解説してもらう

 もし、出てきたプログラムの内容が理解できなかった場合は、それもChatGPTに詳しく聞けばいいのです(図5)。

図5
図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問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。

ソフトウェア技術者のためのバグ検出テキストソフトウェア技術者のためのバグ検出ドリル 画像クリックで出版社のWebサイトへ

 両書とも興味のある方は、Amazon.comや書店でチェックしてください!

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る