ChatGPT使ってみました




■ChatGPT使ってみました~
皆さんこんにちは、プロクラスの野間です。
今回、プロクラスのコンテストでAIの活用が課題となりました。
私も使ってみましたが、いやぁ~凄いことになっていますねぇ。
AIの発達により色々な職業がなくなり、また、新たな職業が生まれると言われています。
プログラマも消えない論と消える論があるようですが、少なくとも、必要とされる技能が変わってくることは間違いなさそうだなと思いました。
今回はそのあたりを書いてみたいと思います。

■AIの仕組みから推測
AIはこの先どんどん発達していくことは間違いないことはお分かりかと思います。
特に、量子コンピュータが現実味を帯びてきており、
AIと量子コンピュータの組み合わせは鬼に金棒ではないかと思います。
将来、鉄腕アトムのような人情等もわかるようなAIに育っていってくれるのではとの期待も高まるってものです。
ですが、流石にそれはまだまだ先の話でしょうねぇ・・・先であってほしいような、早く来てほしいような・・・

さて、AIでプログラムが組めるのはまだずっと先のことだと思っていました。
ところが、どうやら数年前からかなり組めるところまで来ているようです。

他の方の記事や知人の情報によると、テトリスプログラムとか作ってくれるそうです。
ですが、これだけで直ぐに「プログラマが不要」になることはないと考えます。

多くの場合、仕事としてプログラマがやることはこの世に存在しないものを作る事でお金をいただいています。
何しろ、既に存在する場合、それを使えばよいのですから、プログラマの仕事はそこにないものを作る事になります。
AIには学習元が必要ですので、言い換えれば「既にあるもの」に限定されることになります。
ですが、これも近いうちに改善されていくと思われます。
何故なら、「新しいものを作る」と言ってもプログラムの中身は既存技術の組み換えによって作られているからです。
そうですね・・・レゴブロックのようにある程度決まったプログラムの組み合わせを変える事によって新しい結果を生み出しているだけなのです。
応用力ってところでしょうか。
ですので、AIも学習したプログラムを分割して応用すればできるようになります。
「ならやっぱりプログラマ要らないじゃん」と思われるかもしれませんが、まだ世の中はそれほど単純ではないと思います。

「車の自動運転」でも問題になっていますが「だれの責任?」問題があります。
作ったものに問題があった場合、だれの責任なのかは常に発生します。
自動運転の車が事故を起こした場合、自動運転プログラムを作った会社が悪いのか、搭載した自動車会社が悪いのか、登場していた人が悪いのか、引かれた人が悪いのか・・・
その責任を開発会社が取りにくくなります。(内部の確認をだれがするのか・・・)

そして、なにより(これは人間同士でも難しいところなのですが)新しく作る、この世にないものを人に説明するのって非常に難しいことです。
これば今現在の開発現場でも頑張っているところで、指示したものは作れるが意図したものかどうかは別なのです。
ぶっちゃけていえば「そうじゃなくって」って物が出来ちゃったりって事です。

考えてみてください。
既にあるテトリスなら伝わるでしょうが、新しいゲームを文章で説明するってどれだけの労力がいると思いますか?
図解もできるかもしれませんが、それを見ただけで相手が理解でいるほどの資料ってとんでもないと思いませんか?
今でも(人間同士でも)大量の資料を必要としていますが、それを誤認することなくAIに伝えるのは実質不可能だと思います。
それは即ちプログラムレベルの資料になります。(つまりその資料を作るならプログラム組むのと同じじゃんって事)

ここから考えられることとして、AIに作ってほしいものを「完成」してもらうのは非常に困難である点です。
考えてみてください、1つのゲームを作る場合、いったいどれほどの条件を指定する必要があると思いますか?
それら全てを間違うことなく全てを完成させることって非常に困難な話なのです。
実際、人間だけで作っている現在でも、仕様書や設計書はとんでもない量になっています。
大量の条件を忘れることなく処理するのはコンピュータの得意分野ではありますが、正しく伝わっているかわからないものを作らせるためには更に詳細な資料が必要になると思われます。

となると、同時に逆の事も見えてきます。
「要素が少なければAIが作れる」って事です。

■要素を少なくするとは
少しシミュレートしてみましょう。
この世にテトリスが存在していない場合、テトリスをAIに作ってもらうためには非常に多くの要素を指定する必要があります。
出来ますか?私はやりたくないです(笑

ですが、先の出来る事でお話しした通り、個別の要素をAIに作ってもらうことはできます。
例えば、まず最初に・・・
—–
HTML+Javascriptで10*10ピクセルの正方形を描くサンプルを作ってください
—–
とお願いすれば、描画する準備のプログラムを作ってくれます。

——————————————————————————–

<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<title>青い正方形</title>
</head>
<body>
<canvas id=”myCanvas” width=”100″ height=”100″></canvas>

<script>
// Canvas要素を取得
const canvas = document.getElementById(‘myCanvas’);
const context = canvas.getContext(‘2d’);

// 青い正方形を描画
context.fillStyle = ‘blue’;
context.fillRect(10, 10, 10, 10); // x=10, y=10 の位置に 10×10 ピクセルの正方形を描画
</script>
</body>
</html>

——————————————————————————–
実行結果

プログラムを理解していない方が見ても何の事かわからないと思いますが、ここでプログラマの登場になります。
プログラマであれば、ここから「必要な部分だけ」を取り出し、自分が作りたいモノ用にカスタマイズできます。
つまり、このプログラムがあれば、自力で画像を描画する土台を「コピペ+α」で作成できます。

そして、次に
—–
4つの正方形が必ず隣接するように描いた場合のパターン数を調べたいです。
条件として
・正方形4つがワンセット
・正方形の配置は必ず升目に区切った位置に描く
・4つ全てが隣接している
・回転して同じ並びになる場合は排除する
のパターンをHTML+Javascriptで描いてください
—–
な感じでお願いするとテトリスに登場する7種類のブロックを描くプログラムを作ってくれます。

——————————————————————————–
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<title>4つの隣接した正方形パターン</title>
<style>
.canvas-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
</style>
</head>
<body>
<div class=”canvas-container”>
<!– 7つのパターン分のcanvas要素 –>
<canvas id=”pattern1″ width=”50″ height=”50″></canvas>
<canvas id=”pattern2″ width=”50″ height=”50″></canvas>
<canvas id=”pattern3″ width=”50″ height=”50″></canvas>
<canvas id=”pattern4″ width=”50″ height=”50″></canvas>
<canvas id=”pattern5″ width=”50″ height=”50″></canvas>
<canvas id=”pattern6″ width=”50″ height=”50″></canvas>
<canvas id=”pattern7″ width=”50″ height=”50″></canvas>
</div>

<script>
function drawSquarePattern(context, coords) {
context.fillStyle = ‘blue’;
coords.forEach(([x, y]) => {
context.fillRect(x * 10, y * 10, 10, 10);
});
}

// 各パターンの配置座標([x, y]形式)
const patterns = [
[[0, 0], [1, 0], [2, 0], [3, 0]], // I形
[[0, 0], [1, 0], [0, 1], [1, 1]], // O形
[[0, 0], [0, 1], [0, 2], [1, 2]], // L形
[[1, 0], [1, 1], [1, 2], [0, 2]], // J形
[[1, 0], [0, 1], [1, 1], [2, 1]], // T形
[[0, 0], [1, 0], [1, 1], [2, 1]], // Z形
[[1, 0], [2, 0], [0, 1], [1, 1]], // S形
];

// 各canvasにパターンを描画
patterns.forEach((pattern, index) => {
const canvas = document.getElementById(`pattern${index + 1}`);
const context = canvas.getContext(‘2d’);
drawSquarePattern(context, pattern);
});
</script>
</body>
</html>

——————————————————————————–
実行結果

ありがたいことに、各図形を表示分けできるようにデータで定義してくれています。
このままでは自分が作りたいものには程遠いですが、こちらも「コピペ+α」で意図した図形の描画プログラムにできるレベルです。
次はどうでしょう?回転描画させる方法を尋ねてみるのも良いかもしれません。

このようにAIに土台を作ってもらい、それを上手く取り出して使う事は今でもできます。
設計・分割・応用・組み込み でしょうか。
結局、タイピングの速度が少し早くなる程度かもしれませんが、まだ暫くはプログラマが必要そうではあります。
ですが、プログラムの敷居は低くなるかもしれません。

例えば、
「win32sdkでブラウザを作る事は出来ますか?」
から始まって、各種少しずつ手順を区切ってサンプルを作ってもらい、表示できるようになるまでの調査をしてもらい、理解すればブラウザを内包するプログラムを作る事が出来ます。
「初期調査」と「まとめ」をAIにやってもらい、自分が理解できる範囲に区切って依頼を出す(ここまで作って~と依頼)理解できるまで聞く。新しいことをやる際に一番面倒な部分ですよね。
例えば「子ウィンドウでwww.google.co.jpを表示するサンプルを作って」等
もちろん、それらには嘘(誤った情報)が含まれますので実際に試してみることは大事です。
これらはプログラムに限ったことではなくAIの使い方の基本になるかと思います。
初期調査、面倒なんですよね・・・(泣

AIの得意分野を任せ、それ以外は人間が受け持つ。
AIの得意部分
・大量のデータを受け持つ
・指示に従ってまとめる

決して結果までAIに任せる事がないように気を付けましょう。
一見、AIは考えているように見えますが、あくまで大量データを処理しているにすぎません。
そのデータが本当かどうか、分析結果が正しいかどうかはAIには判断できないのです。
それを基にどうするかはあなたが決めないといけない事です。