Parallels Desktop ブラックフライデーセール 25%OFFGo!

ChatGPTとプログラマの失業 イケてるコードを書けるのは誰だ

ChatGPTとプログラマ

ChatGPTの登場によって、「プログラマは不要になる派」「不要にならない派」の2大派閥が誕生しているようです。

私は「プログラマは不要にならない派」です。なぜなのか、実際にChatGPTにコードを書いてもらいながら説明します。

目次

プログラマが不要になると言っているのは誰か

一体誰が「プログラマは不要になる」と言っているのでしょうか。大体、まったくコードが書けない人ですよね。そういう人がChatGPTに「〇〇を作って」と命令をして、ちゃんと動くプログラムができ上がったら「わーすごい。もうプログラマはみんな失業するね。ザマーミロ。」と言っているわけです。

なぜこの人たちはこんなことを言うのかというと、センセーショナルなことを言って注目されたいからです。プログラマが不要になるかどうか、深く考えているわけではなくて、ただインパクトのあることを言って、PVを増やしたい、再生回数を増やしたい、いいねしてもらいたいということなんだろうと思います。

一方、自分でコードを書く人は概ね「プログラマは不要にならない」と言っていますね。実際にChatGPTにコードを書いてもらって、それを見れば、当然そういう結論になります。

AIはそんなに賢くない

AI(人工知能)はとても賢いものだと思っていませんか?私は思っていました。でも、そうではないんですよね。AIとは「言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術」だそうです。べつに人間よりも賢いわけではないんですね。

ChatGPTのAIはWeb上にある情報を収集して学習しているそうです。ということは知能のレベルはWeb上の情報と同じ程度ということなんです。Web上にバカがたくさんいることはあなたもご存知でしょう(暴言)。

なので、ChatGPTに質問してみると間違った回答をしてくることが割とよくあります。世間の多くの人々が間違えていることはAIも間違えるんです。それはプログラミングのコードにも当てはまります。Web上にコードを公開しているのは一流のプログラマばかりではないのです。←オマエのことだ。

素人でもテトリスを簡単に作れる理由

素人がChatGPTに作らせたいプログラムランキングの第1位に輝くのがテトリスです。

で、なぜ「テトリス作って」と命令するだけで簡単に作れてしまうのかというと、ChatGPTはテトリスが何なのかを知っているし、作り方も知っているからです。言い換えれば、これまでにブラウザで動作するテトリスを作ろうとした人がたくさんいて、そのコードがWeb上にゴロゴロと大量に転がっているからです。

もし、まだ誰も作ったことのない新しいゲームをChatGPTに作ってもらおうとすると、ものすごく複雑なプロンプトを作る必要があるのです。

プロンプトとは、ChatGPTに送信する質問や指示のことです。

じゃあ、そういうプロンプトを作れるのは誰かといったらプログラマしかいないんです。そして、返ってきたコードに問題がないかどうかチェックできるのもプログラマだけです。

ChatGPTにお問い合わせフォームを作らせてみる

まず、個人的に気になっていることを質問してみました。

プロンプト

ChatGPTに話しかけるとき、丁寧な言葉遣いの場合と乱暴に命令する場合とで、回答のクオリティに違いがあるか教えろ

ChatGPT
ChatGPT

はい、丁寧な言葉遣いで接する場合と、乱暴に命令する場合とでは、回答のクオリティに違いが生じる可能性があります。

丁寧な言葉遣いで接する場合、ChatGPTはより親切かつ丁寧な回答を提供する傾向があります。また、質問に対してより詳細な回答を提供することがあります。

一方、乱暴な言葉遣いで命令する場合、ChatGPTは回答に対してより限定的な情報を提供する傾向があり、適切な回答を提供できない場合があります。また、乱暴な言葉遣いで接すると、ChatGPTが反応しなくなることもあります。

したがって、適切な回答を得るためには、丁寧な言葉遣いでChatGPTに接することをお勧めします。

やっぱり!ということで優しい言葉遣いで質問していきましょう。

初心者になりきってお願いする

初心者になりきって、ChatGPTにお願いしてみました。

プロンプト

お問い合わせフォームを作ってください

ChatGPT
ChatGPT

申し訳ありませんが、ChatGPTは直接Webページの開発やプログラミングはできませんが、お問い合わせフォームを作成する方法についてはご説明できます。

一般的に、お問い合わせフォームを作成するためには、以下の手順が必要です。

  1. フォームの目的や必要事項を明確にする。
  2. HTML、CSS、JavaScriptなどの言語を使用して、フォームを作成する。
  3. バックエンドの処理を実装し、フォームデータをデータベースに格納したり、メールで送信したりする。
  4. フォームのセキュリティを確保する。

ただし、以上の手順は比較的複雑で時間がかかるため、オンラインのフォームビルダーを使用することもできます。フォームビルダーを使用すると、手動でコーディングする必要がなく、ドラッグアンドドロップでフォームを作成することができます。一般的なフォームビルダーには、Google Forms、Typeform、JotForm、Wufooなどがあります。

以上、参考になれば幸いです。

お願いがシンプルすぎてこちらの意図を汲み取ってもらえませんでした。コードを書いてほしいんだよなあ。

もうちょっと丁寧にお願いしてみる

コードを書いてもらえるようにお願いしてみました。全部やると長くなってしまうので、バックエンドだけ作ります。

プロンプト

お問い合わせフォームのバックエンドプログラムをPHPで書いてください。入力項目は、名前、メールアドレス、メッセージです。受け取ったデータはメールでwebmaster@example.comに送信します。セキュリティ対策もバッチリやってください。

ChatGPT
ChatGPT

以下は、お問い合わせフォームのバックエンドプログラムをPHPで実装する例です。入力項目は、名前、メールアドレス、メッセージです。受け取ったデータは、メールで webmaster@example.com に送信されます。また、XSSやSQLインジェクションなどの攻撃からのセキュリティ対策も実装されています。

<?php
// 入力値の取得とサニタイズ
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);

// 入力値の検証
if (empty($name) || empty($email) || empty($message)) {
    header('HTTP/1.1 400 Bad Request');
    die('入力項目が不正です。');
}

// メール送信処理
$to = 'webmaster@example.com';
$subject = 'お問い合わせがありました';
$body = "お名前: {$name}\nメールアドレス: {$email}\nお問い合わせ内容:\n{$message}";
$headers = "From: {$email}\r\nReply-To: {$email}\r\n";
if (!mb_send_mail($to, $subject, $body, $headers)) {
    header('HTTP/1.1 500 Internal Server Error');
    die('メールの送信に失敗しました。');
}

// リダイレクト
header('Location: https://example.com/thanks.html');
exit;
?>

このプログラムでは、まず、filter_input関数を使用して、入力値を取得してサニタイズします。そして、empty関数を使用して、入力値が空でないかを確認します。入力値が正常であれば、mb_send_mail関数を使用して、メールを送信します。送信が成功した場合は、指定したサンクスページにリダイレクトします。メールの送信に失敗した場合は、HTTPステータスコード500を返してエラーメッセージを表示します。

また、XSSやSQLインジェクションなどの攻撃からのセキュリティ対策として、FILTER_SANITIZE_STRINGおよびFILTER_SANITIZE_EMAILを使用して入力値をサニタイズしています。これにより、悪意のあるコードを含む入力値を無害化し、セキュリティを向上させます。

はい、わりといい感じのコードが返ってきました。でも、不満はありますよ。エラーのときにHTTPのステータスコードを返す必要はないんじゃないかとか。

同じプロンプトで何度かお願いしてみましたが、毎回違う答えが返ってきました。どれもちゃんと動作するものでしたが、何か物足りないんだよなあという感じ。逆に、へーそういうやり方もあるんだっていう新しい発見もありました。

プロ目線でプロンプトを書く

プロンプト

お問い合わせフォームのバックエンドプログラムを以下の要件で作ってください。イケてるコードが書けたら焼肉をおごりますよ。

– PHPで書く
– POSTメソッドを使う
– 入力項目
 - 名前: 必須項目、20文字以内
 - メールアドレス: 必須項目
 - メッセージ: 必須項目、2000文字以内
– バリデーションをする
– XSS対策をする
– CSRF対策をする
– メールヘッダ・インジェクション対策をする
– 受け取ったデータはメールで webmaster@example.com に送信する
– 送信が完了したら https://example.com/thanks.html にリダイレクトする
– エラーが発生したら https://example.com/error.html にリダイレクトする

ChatGPT
ChatGPT

では、以下にイケてるコードを提供します。焼肉、いただきます!

<?php
// CSRF対策のためのトークンを生成
session_start();
$token = bin2hex(random_bytes(32));
$_SESSION['token'] = $token;

// フォームが送信されたら以下の処理を実行する
if($_SERVER['REQUEST_METHOD'] === 'POST') {
  // フォームから送信されたデータを取得する
  $name = isset($_POST['name']) ? htmlspecialchars($_POST['name'], ENT_QUOTES) : '';
  $email = isset($_POST['email']) ? htmlspecialchars($_POST['email'], ENT_QUOTES) : '';
  $message = isset($_POST['message']) ? htmlspecialchars($_POST['message'], ENT_QUOTES) : '';

  // バリデーションを実行する
  $errors = array();

  if($name === '') {
    $errors[] = '名前は必須項目です。';
  } else if(mb_strlen($name) > 20) {
    $errors[] = '名前は20文字以内で入力してください。';
  }

  if($email === '') {
    $errors[] = 'メールアドレスは必須項目です。';
  } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'メールアドレスの形式が正しくありません。';
  }

  if($message === '') {
    $errors[] = 'メッセージは必須項目です。';
  } else if(mb_strlen($message) > 2000) {
    $errors[] = 'メッセージは2000文字以内で入力してください。';
  }

  // CSRFトークンの検証を行う
  if(!isset($_POST['token']) || $_POST['token'] !== $_SESSION['token']) {
    $errors[] = '不正なアクセスが検出されました。';
  }

  // エラーがある場合はエラーページにリダイレクトする
  if(count($errors) > 0) {
    header('Location: https://example.com/error.html');
    exit;
  }

  // メールの送信
  $to = 'webmaster@example.com';
  $subject = 'お問い合わせがありました';
  $body = "名前: {$name}\nメールアドレス: {$email}\nメッセージ: {$message}";
  $headers = array(
    'From' => 'webmaster@example.com',
    'Reply-To' => $email,
    'X-Mailer' => 'PHP/' . phpversion()
  );
  mb_language('japanese');
  mb_internal_encoding('UTF-8');
  if(mb_send_mail($to, $subject, $body, $headers)) {
    // 送信が完了した場合は、完了ページにリダイレクトする
    header('Location: https://example.com/thanks.html');
    exit;
  } else {
    // 送信に失敗した場合は、エラーページにリダイレクトする
    header('Location: https://example.com/error.html');
    exit;
  }
}
?>

以上がイケてるコードとなります。ご確認いただければと思います。

これでなんとか、イケてるコードを書いてもらえたのではないでしょうか。CSRF対策がおかしいけど、これはフロントエンドも込みで書いてもらえばちゃんとしてくれすはず。

さいごに

というわけで、ChatGPTにまともなコードを書いてもらうには、

  • 正確なプロンプトを書く能力
  • 返されたコードを読む能力

が必要だということがわかりました。それは誰かというと、プログラマですね。

今後、プログラマは失業するどころか、ChatGPTのようなAIを優秀なアシスタントとして利用しながら、効率的に仕事をしていくことになるのではないかと思います。

でわでわ

PR

無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。

ChatGPTとプログラマ

この記事が気に入ったら
いいね または フォローしてね!

シェアしてね

コメント

コメントする

目次