こんにちは、FURUです。
ネット上では、「ぶひっ!生成AIがプログラミング出来るようになった!もうエンジニアは全員失業だ!フンガー!」という風説や論調が、昨今、世間を賑わすようになってきました。
半面、「AIのコードはセキュリティホールだらけで使い物にならない」という辛辣な意見も混在しています。
まあ、少なくとも、非エンジニアで、若干ITをかじった程度レベルの人が、
「ボクも!私たちも!初めてアプリを完成させられた!」
……という実例は存在するようです。それは私です。
そこで今回は、巷で議論が尽きない「生成AIによるプログラミング」について、お笑い系技術系ブロガー(そんな分野あるのか?)としての視点と、実際に私が開発した自律型AIマンガ生成システム「Nano Banana Pro Powered Super AI 4-koma System」を実例に、徹底的な深掘り解説を行いたいと思います。
果たして、真実はどこにあるのか?
身体は大人、頭脳は子供。 「一般論として、生成AIの作成するプログラムの完成度は高いのか?」 「プログラミング完全素人でも、本当にアプリ開発は可能なのか?」
この2点について、ワタクシの実体験と、AI自身の思考ロジックを問い詰めていった結果、そしてネット上の膨大な知見を交えながら、検証していきたいと思います。
コーヒーでも飲みながら、ゆっくりとお付き合いください。

目次
1. 結論:AIのコード品質は「驚異的」だが「嘘つき」である

まず、結論から申し上げましょう。
生成AI(特にClaude 3.5 SonnetやGemini 2.0 Flash Thinking、GPT-4o)が書くコードの品質は、部分的には「シニアエンジニアレベル」に達しています。
しかし、それはあくまで「部分最適」の話であり、全体を見ると「平気で嘘をつく(ハルシネーション)」、「古いライブラリを自信満々で勧めてくる」といった、致命的な欠陥も抱えています。
1-1. 文法エラーはほぼ皆無、しかし「論理」が破綻することも
私が開発した「Nano Banana Pro Powered Super AI 4-koma System」のソースコード(src/lib/gemini.js)を見てみましょう。
このコードは、Googleの最新AIモデル「Gemini 2.0 Flash Thinking」を使って、複数のAIモデルをリレー方式で呼び出す複雑なロジックを含んでいます。
AIに「Gemini APIを使って、エラーが出たら別のモデルで再試行するロジックを書いて」と投げたところ、以下のような洗練されたコードが一発で出力されました。……されたと思います。たぶん……きっと……(だんだん自信が無くなってきた)。
// src/lib/gemini.js より抜粋
const MODEL_IDS = [
"gemini-2.0-flash-thinking-exp-01-21",
"gemini-2.0-flash-thinking-exp",
"gemini-2.0-flash",
"gemini-1.5-flash-latest",
"gemini-1.5-flash-002"
];
// ... エラーハンドリングのロジック ...
for (const modelId of MODEL_IDS) {
try {
console.log(`Attempting connection with model: ${modelId}`);
// ... API呼び出し処理 ...
} catch (err) {
console.warn(`Model ${modelId} failed:`, err.message);
lastError = err;
// 404エラー以外なら次のモデルへフォールバックするロジック
}
}
この「 try...catch 」ブロックの使い方や、配列を使ったモデルの優先順位付け、非同期処理(async/await)の記述は完璧です。
初心者がつまずきがちな「非同期処理のエラーハンドリング」を、AIは呼吸をするようにこなします。息をするようにウソをつく、どこかの誰かとは大違いです。
一般論として、単一の関数や、特定のアルゴリズムを書かせる場合、AIの完成度は人間(特に初学者)を遥かに凌駕します。
変数名の付け方も適切で、可読性も高い。「AIのコードは汚い」というのは、もはや過去の話です(……とAIが自画自賛しています)。
1-2. 「React 19」のような最新技術への対応力
さらに驚くべきは、「最新技術への適応速度」です。 今回のプロジェクトでは、まだ一般的ではない最新のライブラリ構成を採用しました。
- React 19(何だかスゴイ、ユーザーインタフェース構築のためのJavaScriptライブラリ)
- Vite 7(何だかスゴイ、高速フロントエンドビルドツール)
- Tailwind CSS 4(何だかスゴイ、次世代CSSフレームワーク)
これらは記事執筆時点で「最先端」あるいは「ベータ版」に近い技術スタックです。ネット上にもドキュメントが少ないし、筆者も「何それ?美味しいの?」…とよく理解していない有様(←オイ)。
この構成を、AIはどう処理したか?package.json をご覧ください。
// package.json より抜粋
"dependencies": {
"react": "^19.2.0",
"react-dom": "^19.2.0",
"tailwindcss": "^4.1.18",
"@tailwindcss/postcss": "^4.1.18"
},
AIは、私が「上手い具合に何とか動かして」という指示を、お節介にも「最新のReactとTailwindを使って」と曲解(?)した上で、バージョン整合性の取れた package.json を構築しました。
特にTailwind CSS v4は設定方法がv3から大きく変わっていますが、postcss.config.js の設定も含め、正確に記述しています。
一般論としての評価: AIは、膨大な学習データだけでなく、Webブラウジング機能(Grounding)を通じて最新のドキュメントを参照できるため、人間がドキュメントを読み込んで試行錯誤する時間を大幅に短縮できます。
「新しい技術を試したい」というシーンにおいて、AIの右にも左にも前にも後ろにも出る者はいません。
2. 素人が取り組んでも「アプリ開発」はできるのか?
ここからが本題です。「コードの品質が高いなら、素人でもテキトーにアプリが作れるのでは?」
答えは 「YES」であり、同時に「NO」 でもあります。どっちやねん。
2-1. 「YES」の理由: “Hello World” の壁が消滅した
かつてプログラミング学習の最大の壁は「環境構築」でした。黒い画面(ターミナル)に謎のコマンドを打ち込み、エラーが出て挫折する。これが9割でした。
C言語の教本にあった、まず最初に紹介されるサンプルコード。これを動かすまでの前提条件を構築するまでがそもそも超大変でした。
#include <stdio.h>
main( )
{
printf("hello, world\n");
}
ちなみに筆者は見かけは17歳JKの中味はおっさんで、PC-8001のBASIC世代なので
10 PRINT A
20 A=A+1
30 GOTO 10
でした。まあ、それはともかくとして、
現在はAIに「ViteでReactのプロジェクトを作って。コマンド全部教えて」と言えば、OSごとのコマンドを提示してくれます。
さらに、「Nano Banana Pro Powered Super AI 4-koma System」のような、一見複雑なUI(src/App.jsx を参照)も、AIに「左側に画像アップロードエリア、右側にプレビュー画面、全体はダークモードでGlassmorphismデザインにして」とテキトーに言葉で伝えるだけで、Tailwind CSSを駆使した美しいコードを出力してくれます。
// src/App.jsx より抜粋
<div className="bg-[#111] border border-blue-500/30 p-8 rounded-[2rem] ... shadow-2xl relative">
<div className="absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-blue-500 to-purple-500" />
{/* ... 洗練されたUIコンポーネント ... */}
</div>
このような「見た目」を作る作業において、素人がAIを使うメリットは計り知れません。
HTML/CSSの知識がゼロでも、プロ級のデザインが一瞬で手に入ります。
2-2. 「NO」の理由: AIは「全体像」を理解できない

しかし、素人が本格的なアプリを作ろうとすると、必ず「コンテキストの壁」にぶつかります。
AI(LLM)は、一度に扱える情報量(トークン数)に限界があります。 例えば、App.jsx を修正している最中に、AIは gemini.js の中身を忘れてしまったり、index.css のスタイル定義と矛盾するコードを提案したりします。
ここで発生するのが「素人殺し」のエラーです。
- 「AIの言う通りにコピペしたのに動かない」
- 「修正してもらったら、別の場所が壊れた」
- 「エラーメッセージをAIに投げたら、無限ループに入った」
私の開発中も、eslint.config.js の設定において、AIが新旧の書き方を混同し、ビルドエラーが発生してどハマりする事態がありました。
eslint.config.js は最近flat configという、何だか良く分からないが超スゲー新しい形式に移行しましたが、AIはネット上の古い記事(旧形式)と公式ドキュメント(新形式)の情報を、混ぜ混ぜして出力することがあります。
結構、新旧情報を取り違えて発狂してしまうのは、AIコーディングの十八番です。
// eslint.config.js
// ここでは正しくフラットコンフィグが記述されているが、これに辿り着くまでには
// AIとの「対話(プロンプトエンジニアリング)」による修正が必要だった。
import js from '@eslint/js'
// ...
export default defineConfig([
// ...
])
素人がここで詰まると、「何が間違っているのか間違っていることすら分からない」状態に陥ります。
AIは「コードを書く」ことはできますが、「デバッグ(不具合の原因特定)」の能力はまだ人間に劣ります。
特に、複数のファイルにまたがるエラーの原因特定は、ある程度の基礎知識がないと、AIへの指示出しすらできません。
あと、更に実感ですが、AIは古すぎる技術(バッチファイルやvbsなど)のコードの生成が苦手で、よく間違います。多分知見が少なすぎるからではないかと。
3. エンジニア視点:AI時代の「コーディング」とは?

私自身、今回の「Nano Banana Pro Powered Super AI 4-koma System」開発において、手動で書いたコードは全体の 5%以下 です。
残りの95%は、AI(Gemini 2.0 Thinking と Claude 3.5 Sonnet)に書かせました。
では、私は楽をしていたのか? いいえ、「コードを書く」時間は減りましたが、「コードをデバッグ(間違い探しと修正)・レビューする(読む)」時間が激増しました。
3-1. プログラミングから「ディレクション」へ
これからのエンジニア(そしてAIを使って開発したい素人)に必要なスキルは、構文を暗記することではありません。
「AIという、特定方面には異常に優秀だが、多方面ではドジっ娘な部下」に、「的確な指示」を出し、「上がってきた成果物を検品する能力」です。
例えば、src/lib/imagen.js の実装を見てください。
// src/lib/imagen.js
export const generateImageWithImagen = async (prompt) => {
// ...
// AIは当初、エラーハンドリングなしの単純なfetchしか書いてこなかった。
// 私は「APIがタイムアウトした場合や、404エラーが出た場合の再試行ロジックを追加して」と指示した。
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 20000); // 20秒タイムアウト
// ...
}
素人が「画像生成機能を作って」と頼むと、AIはその場しのぎで、「動けばいい」レベルのコード(Happy Path)しか書きません。
しかし、実運用ではネットワークエラーやAPI制限が必ず発生します。
「ここでエラーが起きたらどうなる?」「タイムアウトの設定は必要ないか?」 「ホントにホントにその程度のエラーチェックでいいの?お母さんが泣いているよ!」「こんなバグだすな!ふざけんな!」という「設計のツッコミ」を入れられるかどうかが、完成度を分けます。
この辺が、全くのド素人には、AIを詰めて詰めて詰めまくる、ことがまだ難しいであろう所以です。
3-2. セキュリティ意識の欠如という罠
また、AIはセキュリティに対して無頓着な場合があります。
今回、APIキーの取り扱いについて、AIは当初、その場しのぎで「コードに直接書き込む」方法や「.envファイルのみ」を提案してきました。 しかし、Webアプリとして公開する場合、APIキーの管理は非常にデリケートです。
私はAIに対し、「APIキーはブラウザのメモリ上のみに保持し、リロードしたら消えるセキュアな設計にして。かつ、ユーザーが自分のキーを入力できるUIを作って」と指示しました。
その結果が、App.jsx にある ApiKeyModal コンポーネントの実装です。
// src/App.jsx
const ApiKeyModal = ({ isOpen, onSave }) => {
// ... APIキー入力モーダルの実装 ...
<p className="text-[10px] text-slate-500 mb-6 flex items-center gap-1">
<span className="text-yellow-500">⚠</span> APIキーはブラウザ内にのみ保存され...
</p>
// ...
};
一般論として、AIは、取りあえず生、というか、とりあえず「動くもの」は作れますが、「安全なもの」を作るには人間の明示的な指示(セキュリティ要件定義)が不可欠です。
素人がそのまま公開したアプリが、APIキー流出やXSS(クロスサイトスクリプティング)の温床になるリスクは、現状かなり高いと言わざるを得ません。
AIはコード生成中、たまに最重要データをポロッとモロだししてしまうことがあるのです。これは怖い。
4. 総括:AI開発は「冒険」だ

まとめます。
Q. 生成AIのプログラム完成度は高いの?
A. 高いです。 特に関数単位、コンポーネント単位では、熟練エンジニア並みの綺麗なコードを書きます。最新技術へのキャッチアップも速く、React 19 や Tailwind v4 などのモダンな構成も難なくこなします。
Q. 素人が取り組んでもできるの?
A. 「できます」が、「完成」まで辿り着くには根性が必要です。 「Hello World」から「プロトタイプ」までは爆速です。しかし、そこから「実用アプリ」にするまでの残り20%の詰め(バグ修正、整合性、セキュリティ)で、AIは嘘をついたり、無限ループしたりするので、それを見抜く能力がまだ必要です。まあ将来は不要になるのかもしれませんが。今の所は、って話です。
ともあれ、作ったものが上手く動かなくても、そこで挫折せずに、「AIが出したエラーを、またAIに投げて解決策を聞く」、「うまくいかない時は、一度コードを全部消して、AIに最初から考え直させる」「おかしいな、と思ったらロールバックする」といった、「AI使いとしての泥臭いノウハウ」を身につければ、素人でも驚くようなアプリを作り上げることが可能です。
4-1. これから始める人へのアドバイス
もしあなたがプログラミング未経験で、これからAIを使って何か作りたいなら、以下の3つを心に留めてください。
- 「コードは読めなくてもいいが、エラーメッセージは読め」: AIはエラーログを渡せば、きちんと解決策をくれます。英語のエラー文を怖がらず、そのままAIにコピペして「これ、どういうこと?教えて教えて!」と聞きまくってください。
- 「小さく作って、繋げる」: いきなりまとめて一気に「最強のアプリ」を作らせようとせず、「ボタンを表示する」「クリックしたら動くようにする」と、機能をステップバイステップで、最小単位でAIに依頼してください。
- 「AIを信じるな、AIの可能性を信じろ」: AIのコードは間違っている前提で接してください。でも、諦めずに指示を変えれば、必ず答えに辿り着けます。
私が作った「Nano Banana Pro Powered Super AI 4-koma System」も、最初はエラーの山でした。
しかし、粘り強くAIと対話し、修正を繰り返すことで、最終的には、自分自身のプログラミング能力を大きく超える、複雑なマンガ生成エンジンが完成しました。
プログラミングは今、一部の特権階級のスキルから、万人のための「魔法の杖」になりつつあります。 さあ、あなたも恐れずに、AIと共にコードの海へ飛び込んでみませんか?溺れても命までは取られないから大丈夫(!?)かもね!



