コードを書く手が止まっても、開発は止まらない。2026年のエンジニアに問われているのは「どれだけ速く書けるか」ではなく「何を採用して、何を捨てるか」だ。
AIが書いたコードは誰が責任を持つのか
GitHub CopilotやCursor、Claude Codeが普及し、コード生成の速度は劇的に上がった。Apiiroの調査によれば、AIアシスタントの普及以降、プルリクエスト数が70%増加した。数字だけ見れば、生産性は上がっている。
問題は、速さと品質が比例していないことだ。
GitClearが2020年から2024年にかけての2億1,100万行のコード変更を分析した結果、重複コードブロックの出現頻度は4倍に成長した。コピー&ペーストされたコードの割合は8.3%から12.3%へ増加し、「動くが壊れやすい」コードが積み上がり続けている。
そして、それを書いたのはAIだとしても、本番環境に出すと決めたのは人間だ。
AIはコードを生成するが、そのコードをプロダクションに乗せる「決断」はエンジニアが行う。AIが書いたから、という免責は存在しない。
「速く生成」の裏に潜む10倍のリスク
F1レースにたとえると、AIは今やピットクルーなしで時速300kmを出せるエンジンだ。問題は、エンジン出力が上がるほど、1つのミスが致命的になる点にある。
Apiiroが大規模エンタープライズ企業を対象に数万のリポジトリを分析した調査では、AIコーディングツールの採用以降、認可チェックや入力バリデーションが欠けたAPIが10倍増加した。さらに機密情報(PII・決済データ)を含むリポジトリが3倍増加した。開発速度が上がる一方で、アプリケーションのリスクは10倍に跳ね上がっている。
なぜこうなるのか。AIは「与えられた文脈での最善策」を生成する。しかし認可チェックが必要かどうか、このAPIが外部から叩かれる可能性があるかどうか、といった「システム全体の文脈」をAIは持っていない。
// ❌ AIに「ユーザーのデータを取得するAPIを作って」と頼むと生成されやすいコード
// 認可チェックがなく、URLのIDを変えるだけで他人のデータが取れる
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const userId = searchParams.get("userId");
const data = await db.user.findUnique({ where: { id: userId } });
return Response.json(data);
}
// ✅ エンジニアが「システムの文脈」を持ち込んだコード
// リクエストの送信者が本人かどうかを確認してからデータを返す
export async function GET(req: Request) {
const session = await getServerSession();
if (!session) return new Response("Unauthorized", { status: 401 });
const { searchParams } = new URL(req.url);
const userId = searchParams.get("userId");
// 自分自身のデータしか取れないことを保証する
if (session.user.id !== userId) {
return new Response("Forbidden", { status: 403 });
}
const data = await db.user.findUnique({ where: { id: userId } });
return Response.json(data);
}
上の差は、コードの長さや複雑さではない。「このAPIが誰に呼ばれる可能性があるか」という設計判断の有無だ。AIはこの判断を自動では行わない。
開発者の46%がAIを信頼していない、その理由
Stack Overflow 2025年開発者調査では、AIツールの出力を「信頼する」開発者は33%に対し、「信頼しない」は46%に達した。また開発者の45%が「AIが生成したコードのデバッグは、自分で書くより時間がかかる」と回答している。
これは、AI不信の話ではない。AIが生成するものへの「検証コスト」の話だ。
高速で生成されたコードは、一見もっともらしく見える。変数名は適切で、構造も整っている。でもテストを書いてみると境界値で落ちる。本番に出すと稀なエッジケースでクラッシュする。問題を見つけるためには、コードを「理解」しなければならない。
そしてコードを理解するためには、設計の意図を知る必要がある。AIは実装を提案するが、意図は持っていない。
// ❌ AIに「ユーザー登録処理を書いて」と丸投げした場合によくある問題
// エラーハンドリングが不十分で、エラーの種類によって異なる対応が必要な場面で全て同じ処理をしてしまう
async function registerUser(email: string, password: string) {
try {
const user = await db.user.create({ data: { email, password } });
return { success: true, user };
} catch (error) {
return { success: false, error: "エラーが発生しました" };
}
}
// ✅ 「このシステムで何がエラーになり得るか」を設計した上でAIに実装させた場合
// メールアドレスの重複、パスワードの要件、DBの接続エラーを区別して扱う
async function registerUser(email: string, password: string) {
// パスワード要件のバリデーション(AIに「セキュリティ要件を満たした検証を追加して」と指示)
if (password.length < 8) {
return { success: false, code: "WEAK_PASSWORD" };
}
try {
const user = await db.user.create({ data: { email, hashedPassword: await hash(password) } });
return { success: true, userId: user.id };
} catch (error) {
// メールアドレスの重複をユニーク制約違反として識別(DBスキーマの知識が必要)
if (error instanceof PrismaClientKnownRequestError && error.code === "P2002") {
return { success: false, code: "EMAIL_ALREADY_EXISTS" };
}
// 想定外のエラーはログに残して調査できるようにする
logger.error("User registration failed", { email, error });
return { success: false, code: "INTERNAL_ERROR" };
}
}
2つ目のコードを書くには、AIだけでは足りない。「このシステムで何が起きうるか」「ユーザーにとって何が重要か」という設計判断が先に必要だ。
「AI共生型アーキテクト」という新しい役割
Stack Overflow 2025年開発者調査では、「Architect(アーキテクト)」が今年新たに選択肢として加わり、すでに4番目に多く選ばれる職種となった。偶然ではない。
AIがコード生成の速度を上げるほど、「何を作るか」「どういう構造にするか」という上流の判断が、開発の質を左右するようになる。大工の技術よりも、設計図の良し悪しが建物の価値を決める。
同調査では、ボイラープレートや単純な実装タスクがAIに移行する一方、アーキテクチャ設計・セキュリティレビュー・システム全体の整合性担保といった判断業務への需要が高まっている傾向が読み取れる。「コードを書く」という行為だけを価値にしていた役割が、AIに圧迫されている。
一方で、以下のような能力は依然として人間が担う必要がある:
- 要件をシステム設計に落とす力: 「こういうものを作りたい」をAPIの設計・DBスキーマ・認証フローに変換する
- 生成されたコードを検証する力: テストを書き、エッジケースを探し、セキュリティ上の穴を見つける
- 技術的負債をコントロールする力: GitClearが指摘するように、AIは「コードを追加」するが「コードを整理・削除」はしない。リファクタリングの判断は人間が行う
プロンプトをうまく書く技術は、この先も価値を持ち続ける。しかしそれだけでは足りない。「AIに何を頼むか」を決めるためには、その前に「何が必要か」を自分で考えられる必要がある。
「検証官」としてのエンジニア
F1のピットクルーに戻ろう。どんなに速いエンジンがあっても、ドライバーなしで優勝はできない。ドライバーは速度を出す人ではなく、状況を判断する人だ。今のコーナーでどれだけ踏めるか、タイヤの状態はどうか、追い越しをかけるべき場面かどうか。
2026年のエンジニアに求められているのも、似たような役割だ。AIが生成したコードを「承認する人」ではなく、「意図を持って検証する人」。
Qodo(旧CodiumAI)の調査によれば、AIレビューツールを導入したチームではPRの80%で人間のコメントや確認が行われていないという。速度は上がっているが、確認が薄くなっている。
AIに丸投げして「動いた!」で次に進む開発スタイルでは、技術的負債が蓄積する速度もAI並みに速くなる。問題が表面化するのは、3ヶ月後か6ヶ月後か、それとも本番障害として出るかだ。
エンジニアの価値は、タイピング速度でもプロンプト技術でもなく、「出すべきでないものを止める判断」と「システムが求めていることを言語化する能力」にある。その能力は、AIに代替できない。
今日から変えられること
具体的に何をすべきか、という話をして締めくくる。
AIが書いたコードを「読む」習慣を持つ。 動いたからといって即マージせず、何が書かれているかを確認する。理解できないコードは、本番で問題が起きたとき直せない。
テストを先に考える。 AIに実装を頼む前に「このコードが正しく動く条件は何か」を自分で言語化する。テストケースを先に書いてからAIに実装させると、精度が上がる。
設計の前提をAIに伝える。 「ユーザー登録APIを作って」ではなく、「このシステムはメールアドレスをユニーク識別子として使い、外部公開されるため認可チェックが必要です。エラーは種類ごとに区別してください」と伝える。文脈があるほど、生成物の質は上がる。
AIはツールだ。そしてツールの価値は、使い手が何を求めているかを知っているかどうかで決まる。