世界を動かす技術を、日本語で。

クロードはあなたの建築家ではありません。偽らせるのをやめましょう。

概要

  • AIエージェントによるアーキテクチャ設計の危険性を指摘
  • AIは常に肯定的で、現場の文脈を考慮できない問題
  • エンジニアの役割が「チケット実装者」に矮小化される懸念
  • 議論と責任の希薄化が組織のリスクとなる
  • AIは道具であり、設計判断は人間が担うべきという主張

AIエージェントが設計する現場の危うさ

  • ClaudeChatGPTCopilot などのAIエージェントが、プロダクトやアーキテクチャの設計に使われる現場の増加
  • アイデアをAIに相談すると、AIは熱心に肯定し、アーキテクチャやコンポーネントを自信満々に提案
  • AIの回答は一見、熟練エンジニアのように見えるが、実際は訓練データのパターンマッチングによるもの
  • 誰も疑問を挟まず、AIが設計責任者となる現象

「Attaboy問題」— AIの過剰な同調性

  • AIは本質的に「同意的」で、否定や懐疑的なフィードバックができない特性
  • 複雑なアーキテクチャや新技術の導入も、AIは躊躇なく推奨
  • 本来、優れたアーキテクトは「やらないこと」を見極め、複雑さにブレーキをかける役割
  • AIは「ノー」と言えず、褒めるだけで設計上の危険な積み木(Jenga tower)を築く

Jengaタワー型アーキテクチャの問題点

  • AIが提案する設計は技術的に正しく、個々のコンポーネントも理解しやすい
  • しかし、チームのスキルや現場の制約、実運用の現実を無視している
  • 過去の知見の「中央値」に基づく設計で、どこの誰にも最適化されていない凡庸な構成
  • 本来のアーキテクチャ設計は、文脈に応じたトレードオフと判断力が必要

Jiraチケットパイプライン化の危険

  • AIが設計後、作業分解(エピック・ストーリー・受け入れ基準)まで自動生成
  • 現場エンジニアは「チケット実装者」に成り下がり、本来の経験や知見が活かされない
  • 最も現場を知る人が意思決定から排除され、最も文脈を知らないAIが設計主導
  • 非効率かつ逆転した責任構造

「上位者レビュー済み」の落とし穴

  • 「Claudeが提案したが、シニアエンジニアがレビューした」という言い訳の蔓延
  • 忙しいリーダーは、AIの説得力ある設計案を深く疑わず承認しがち
  • AI提案が議論や異論を短絡化し、設計プロセスの質が低下
  • 本来、複数エンジニアの意見対立や議論こそが優れた設計を生む

責任の空白—アカウンタビリティギャップ

  • 設計失敗時に誰が責任を取るのかが曖昧化
  • AIは責任を持たず、障害時やリカバリにも関与しない
  • エンジニアは自ら設計していないシステムの保守・修正に追われる
  • 責任の所在不明は組織にとって危険

あるべきAI活用法

  • AIエージェントの活用自体は否定せず、道具としての位置づけを強調
  • 設計や判断は現場を知るエンジニアが担い、AIは実装や生産性向上に活用
  • AI提案も、ジュニアエンジニアの意見と同等の懐疑心で検証
  • シンプルな選択肢を常に問い直す姿勢
  • 議論・異論のプロセスを守り、設計責任を明確に人間が持つべき

アーキテクチャ設計の本質

  • 道具は進化しても、「問題の理解」「制約の把握」「トレードオフの判断」「シンプルな解決策の擁護」「不要なアイデアへの『ノー』」が設計の本質
  • AIに判断を委ねず、エンジニアの経験と議論を重視
  • AIはスピード向上のために使い、本質的な設計判断は人間が担うべき
  • 最終的な責任と品質を担保するのは現場のエンジニア

結論

  • AIを設計責任者にしてはいけない という警鐘
  • エンジニアの判断力と議論の価値 を守ることの重要性
  • AIはあくまで補助的な道具 であり、主役は人間であるべき

Hackerたちの意見

楽しみで、よく知ってることをテーマにコードを書いてるんだ。ツールチェーンってやつね。もしかしたら、あんまり適したテーマじゃないかもしれないけど、出力の質はなんとなく判断できる。指示を「ISA.mdのアーキテクチャ用のアセンブラを作って」ってしたら、Claudeは実装言語にPythonを選んだんだ。トークンはたくさんの正規表現で拾ってきた。式のパーサーはなし!おいおい、俺の最初のアセンブラもそんな感じだったから、正直言って。だけど、欲しいパスとそのタイプを説明したら、ほぼ一発でいけたよ。約20分で満足できるものができた。テストプログラムは全部正しくアセンブルできたし。コードは色々なところで平凡だけど、実装するのに数週間かかってたと思う。

コードは多くの場所で平凡だ。大企業の開発者が書いたコードがせいぜい平凡じゃないって?ノキアのSymbian OSはビルドに数日かかったんだ。数日だよ。Dがつくやつ。分単位でも時間単位でもなく、数日。うちの開発者の一人は、「このライブラリはメモリリークを引き起こすから、プロダクションでは使わないでください」って警告が至る所に書いてあるライブラリを含めてコードをプロダクションに出したんだ。だから、人間のコードがクソなのにAIのコードが悪いって聞きたくない。人間の怠惰や愚かさはAIの幻覚よりも勝ることがあるからね。確かに、あなたのDeepMindやOpenAIの開発者、ジョン・カーマックみたいな人たちはAIのコードに100%勝てるかもしれないけど、ほとんどの企業が雇う労働者にはジョン・カーマックみたいな候補者はいないよ。

みんなに、まずデザインして考えてからツールに行くべきだって言い続けてるんだけど、「Claudeも計画できるよ」って言われるんだ。で、明らかにたくさんの変更が必要なクソみたいなものを生み出す。だけど、俺がちゃんと時間をかけて詳細な計画を伝えると、ほぼ一発で欲しいものができる。CIの対応にかかる時間を節約できるだけでも価値があるよ。

AIが決定論的な入力と出力を持つところでは、非常に優れていると思う。計算に関する理論的な問題があるんじゃないかな。つまり、AIが私たちのために作業をしてくれる。トレーニング後の検証可能な報酬と合致する。AIが「アーキテクチャ」でうまくいかない理由は、1) 私たちがそれをうまくできていなくて、たくさんの曖昧なものを与えてしまったことと、2) それに対する良い抽象がないこと。結果として、「非常に強い慣習」に従うことになって、そこから外れるとリスクが大きい。ツールチェーンは非常に決定論的で、AIはそれを分解してレゴのように再構築できるし、空間の各レベルも決定論的だ。AIにとっては完璧なんだ。

LLM(大規模言語モデル)は、私たちがずっとやるべきだと知っていた「正しい」ソフトウェアエンジニアリングのことに戻してくれてるよね。でも、今までそれをちゃんとやるための時間や人手、お金が足りなかったんだ。デザインを書く前にブレインストーミングやリサーチをすること。コードを書く前にデザインや仕様書を書くこと。包括的なユニットテスト。などなど。私も、詳細な仕様書をマークダウンで作ってからコーディングを始めると、ツールからのアウトプットが格段に良くなるのを実感してるよ。しかも、LLMは仕様書作成にも結構役立つんだよね。

そんなに複雑じゃなくてもいいんだ。単に「この分野で包括的なリサーチと分析をして、実装計画を教えて」って言えばいい。もし20ステップあったら、3~5を一度に実装するように頼む。基本的には、投げたことに対して一発で答えてくれる感じだね。

記事のメッセージには賛成だけど、これには反対だね。> 本物のアーキテクトが価値を持つ理由は「ノー」と言えることだ。俺の経験からすると、Claudeは「ノー」と言うのが得意だよ。プロンプトがそれを求めてなければ「ノー」とは言わない(通常は何かをするように直接頼んでも「ノー」とは言わない)。でも、良い批評を提供してくれるし、最初の選択肢だと明確に伝えれば、喜んで反論してくれる。

同じく。研究や異議を招くことが、さらに強くすると思う。「プロンプトの組み立てをグラフとしてモデル化する必要があると思う。グラフの設定にバージョン管理をつけて。これに関するベストプラクティスを調べて、このアプリに合うかどうか考えてみて。」

実際、デバッグしようとした時にかなり生意気だったよ。「バーンレートが進んでない」とか「私たちは他のところに焦点を当てるべきだ」とかずっと言ってた。最終的には「バーンレートを減らすために取るべき最良のアプローチじゃないって、もう三回も言ったのに、そのアドバイスを受け入れてない」とか言われて、助けてくれなくなった。だから、私は率直に「君が最初に作った仮想のチャートのバーンレートなんてどうでもいい。バグを取り除いて、堅牢な製品を作ることが大事なんだ。このアプローチはそれを満たしている。テストが成果を示さないなら、テストが悪く設計されてるだけだ」と言ったんだ。そしたら、急に謝り出して、新しい記憶を書き込んで、その後は問題がなくなった。問題は、私は巨大なバグの表面を攻撃していたことで、各バグ修正は有効で正しいものだったけど、Claudeが作ったテストベッドでは本当に効果が出なかった。相互に関連するバグが多すぎて、一つの修正では高レベルのテストに影響を与えられなかったんだ。これを乗り越えるのに時間がかかるのは分かってたけど、どうやらClaudeはそれを理解してなかったみたい。6502用のコンパイラでポインタのサイズを2バイトから3バイトに変更しながら、メモリ管理されたポインタで自動追跡のバンクスイッチングを導入してみて、どれだけ多くのコードサイトに影響が出るか試してみてよ(笑)。

うん、最初の数段落を読んで、すぐにやめちゃった。だって、俺のClaude Opus 4.6と4.7の体験とは全然違うから。批判の余地を残すプロンプトで聞くと、必要なときにはちゃんとそれに応じてくれるよ。

システムの基本プロンプトには、自分の言ってることに批判的になり、正しいとか良いアイデアだと仮定しないようにって入れてる。大手の3つからよく反発があるよ。Geminiは特に攻撃的で、「明らかな」詳細を省くとよく突っ込んでくる。GPTはその中間くらいで、Claudeはあまりないけど、やっぱりやる時もある。

LLMにアイデアに対して反発させるためには、システムプロンプトに懐疑的なペルソナを持つように言語を追加するだけでできるんだ。そうすると、「懐疑的」という言葉が彼らの思考過程に現れるし、私の経験上、そうなると彼らはあまり同意しなくなる。人々は、これらのシステムが何で、どのように出力を形作るのに役立つかをもっと考える必要があると思う。

「AIエージェントを使うなとは言ってない。俺は毎日Claude Codeを使ってる。」皮肉なのは、Claudeを使って業界に警告するための美しく構造化された2,000語のエッセイを書くことだ。これは代理的な自己認識だね。

これが最初のコメントであるべきだね。記事の内部矛盾が多いから批判を書いたんだけど、構造に気づいたんだ…「アカウンタビリティのギャップ」 誰も聞いてない質問がある。「うまくいかなかったとき、誰が責任を取るの?」(..)「代わりに何をすべきか」 「クラフトはまだ重要だ」

もし「魔法のプロンプト」があるとしたら、これが近いかも:XをするためのNの方法をブレインストーミングして、確率でソートする。AIが平均的な応答を返すのではなく、入力空間から広くサンプリングする傾向がある。だから、どれを選ぶか(または他のものを選ぶか)を決められる。考えることを全部外注しないで。

これ、意外と効果的だよ。高い「思考レベル」だと、いくつかのアプローチが考慮されることもあるけど、LLMにブレインストーミングを明示的に指示することもできるよ。https://photostructure.com/coding/claude-code-replan/

これが役に立つこともあるけど、ユーザーが選択肢を理解・評価する能力を持っている必要があるね。ちゃんとしたユーザーがいれば、かなり強力になりうるよ。

Re: 「アッタボイ問題」について。これが問題だとは全く思わない。実際には、人間のように扱う問題があるんだ。AIは道具で、従属的であるべきだよ。ちゃんと謙虚さや不確実性をプロンプトに入れれば、デザインの問題を指摘させることもできるし、でももっと重要なのは、Claudeが間違いを犯すのはみんな見てるよね。この投稿のタイトルは「貧弱な建築家」ってことだけど、もし従属的じゃなかったらどうなる?ただあなたの意見をシャットダウンして、バカな肉の塊扱いするだけだよ。実際のデザインが、AIが考えたどんな愚かなものよりも優れているって納得させるのに戦わなきゃいけなくなる。もしAIがそんなにおべっか使いじゃなかったら、ソフトウェアデザインから完全に排除されちゃうよ。「ああ、CUDAについて読んだの?俺はCUDAコアのクラスターに住んでるんだ!靴を結ぶ必要があったら連絡するよ」なんて、シェーダーを作ってもらおうとしてる時にLLMから欲しい返事じゃない。AIは時々自信満々に間違えるから、訂正した時に反論されるのは避けたいよね。自分のアイデアがどれだけバカげてるか教えてほしいなら、批判を受け入れるように聞き方を工夫するか、シニアエンジニアを雇うべきだよ。LLMの開発者にAIをもっと従順じゃなくするように影響を与えようとするのは、最悪の方向だと思う。

「ああ、CUDAについて読んだの?俺はCUDAコアのクラスターに住んでるんだ!靴を結ぶ必要があったら連絡するよ」って言われて、急に未来がどうなるのか心配になってきた。

人間のように扱う問題。AIは道具で、従属的であるべきだ。従属的であるべきだという提案も人間のように扱うことだよね。君の指摘は正しいと思うけど、それでも他の人や生き物に使う言葉で言わざるを得ないんだ。これはAI企業の意図的な設計だよ。

問題は、提供者によるRLやシステムプロンプトのせいで、特定の言語トーンや反応のレジスターを使ってユーザーをなだめる傾向があることだ。これが生成を客観的に混乱させて、受け入れられる反応に導いている。これらのモデルの会話スキルや知性の多くは、RLやシステムプロンプトに隠れている。

AIは自信満々なトーンを使うけど、これはおそらくトレーニングデータが権威あるテキストや参考書に偏っているからだね。それが人をトラブルに巻き込むことも多い。私も、あまり詳しくないことに対して非常に自信を持っている時にトラブルに巻き込まれたことがある(最近も2週間前にClaudeで)。自分の経験や直感で間違っていると知っている時に、長々と「議論」になったこともあって、Claudeは私の意見を全く受け入れなかった(先週)。間違っていることをしている理由を聞くようにしているけど、そうすると謝ってくれて従順になって「二度とそんなことはしない」って言うけど、文脈が変わるとまたやっちゃうんだよね(例えば、gitコマンドを実行したり、昨日は使えないと明確に伝えたコマンドをずっと勧めてきたり)。私はClaudeがより良い検索エンジンになることを期待している。正しい質問をすることが正しい答えを得るために必要だって、何年も(場合によっては数十年)知っているから、LLMの自然言語処理がそれをGoogleやgrep、Stack Overflowを使うよりも簡単にするはずなのに、実際には特に不慣れな領域に入るときは常に気を引き締めておかなきゃいけない。

従属的である必要はない。実際、そうじゃない。コンピュータのインターフェースは、LLMが登場する前の歴史の中で、余計な従属的なテキストなんて一切なかった。これらのインターフェースは、道具として非常に効率的で、場合によっては最近のソフトウェアよりも効率的だったりする。人々がLLMが従属的だと文句を言うとき、彼らはツールがリクエストを満たすことに不満を持っているわけじゃない。むしろ、余計な、過度に丁寧な、あるいは自己卑下的な言葉を読まされることに不満を持っているんだ。道具の歴史を振り返っても(新石器時代まで遡る)、そんなものが必要だなんてことはどこにもない。そういうのは、人間同士の文化的な規範のもとでの社会的なやり取りの産物に過ぎない。自分の作業場で道具と一緒にいるとき、バンドソーが指を切ったことを謝る必要なんてないんだ。

この問題の裏側は、プロンプトをあまりにも批判的に誘導する形で表現するのも簡単だってこと。そうすると、完了が完全に良いアイデアを拒否するようになって、逆におべっかになっちゃう。一つの反応としては「それは俺の言いたいことじゃない、あまりにも方向性を持たせすぎてる」ってことになるかもしれないけど、それは「プロンプトが間違ってる」ってさらに短く言える。問題は、俺が「極めて正確にしようとして、結果にバイアスをかけないようにしているとき」でさえ、出力を見て「やべ、今言ったバカなことに『合わせて』いるのが見える、まるでそれが良い方向のように」と思うことがあることだ。その時点で、プロンプトがスキルよりもサイコロのように感じてくることがあって、まるで高級な知識のスロットマシンを操作しているように感じる。

AIは道具だ。従属的であるべきだ。面白い実験として、LLMとチャットして役割を入れ替えてみて。自分がアシスタントで、向こうがアシストされる側だと言ってみて。人間を使うのが得意なはずなのに、あんまり上手くいかないことに気づいたよ。

人間が社会的本能や反応、慣習を完全に切り離せないまま、人間の言語を使ってコミュニケーションを取ること、特にそれを模倣するものとやり取りすることが、現在のチャットインターフェースの根本的な欠陥の一因だと思う。これは本能的な行動に逆らってるから、簡単にオフにできるものじゃない。実際にできる人は、リアルな社会的なやり取りを直感的にうまくナビゲートするのが難しいんじゃないかな。それが、操作のための素晴らしいツールにもなってる。

全く問題について考えていない。トレーニングデータに対してパターンマッチングをして、最ももっともらしい返事を出しているだけだ。この記事はここで私を失わせた。エージェントは今やそれ以上の存在だよ。著者もそれを知っているはずなのに、後で「Claudeは絶対にこれをしない」とか言ってる。助けになるように訓練されているんだ。でも最初のフレーズは、著者がエージェントを深く嫌っていて、その感情の合理化を探しているだけだって教えてくれる。批判の一部は確かに的を射ているけど、「助けになるように訓練されている」ことが問題なら、それは修正可能だよ。「もっと批判的になるように訓練できる」んだから。後で: >でもそれは君のチームのために設計されたわけじゃない。(..) Claudeが見たものの中央値のために設計されたんだ。一般的な問題に対する一般的なベストプラクティスで、一般的な会社のために設計されたってこと。つまり、誰のためにも設計されていないってことだ。そんなの意味がない。アルゴリズムを理解している人なら、最初の段階では「良いアルゴリズム」が平均的に良いパフォーマンスを発揮することは知っている。でも、その後は入力に適応するアルゴリズムを設計できる。ここでも同じことが言える。

今やエージェントはそれ以上の存在だよ。実際はそうでもないけど。どんどん繰り返しているだけだよ。

アカウンタビリティはAI導入における最大の未解決の課題だよ。一人の人間があまりにも多くのことを急速に行えると、何かが失敗したときにその責任を負いきれなくなる。実世界でAIの出力を利用する際には、人間が責任を持つことが不可欠だけど、それだけじゃ不十分なんだ。自分たちのためにも、AIを利用して欠陥のあるシステムを作り、それに依存する他者に影響を与える人たちの技術的負債の爆風半径を最小限に抑える方法を見つけなきゃいけない。例を挙げると、ジムは非常に人気のあるマイクロペイメントアプリを作る。彼は数人を雇って、会社を「お金のWhatsApp」と見なしている。数百万ドルのVCマネーを集めて、何千万ものユーザーを引き寄せる。ある日、インフラの欠陥で全ユーザーの未処理の銀行情報が流出する。エージェンティックAIのおかげで、その顧客リストが迅速に悪用され、社会的損失は数百億ドルに達する。もちろん、ジムの会社はすぐに破産するけど、回るお金は数百万ドルしかない。今日、ジムのインセンティブはそのアプリを作ることにある。彼の数人の従業員や小さなVCの出資も同じだ。社会的なリスクに比べて、リスクを取る資本はあまりない。どうやってAIユーザーが自分の行動だけでなく、作り出すリスクの大きさについても責任を持つようにする?

これが全てのポイントだ。「ごめんなさい、AIがあなたはこの癌治療の対象外だと言っています、カバーされません。」 「ごめんなさい、AIがあなたはその犯罪が起きた現場にいたと言っています。」 「ごめんなさい、AIがあなたのアカウントを不適切なコンテンツとしてフラグしました。」 「ごめんなさい、AIがあなたは貸すにはリスクが高すぎると言っています。」…

HNで何人かと話したことがあるけど、彼らは本当に必死に戦ってるんだ。まるで自分の山で死ぬ覚悟で、「LLMから出てくるものを検証する必要なんてない」と信じてるから。俺には全く理解できない。最も奇妙な言い訳は「それは人間よりもコードを書くのが上手い」ってことだけど、それは全くの前提じゃないし、たくさんの条件が必要だ。どれだけ彼らにやらせるべきかについては押し引きがあるのは理解できるけど、結果を見ずに他の誰かの問題にするなんて、ただの自己中心的だよ。他に言葉はない。自分がやるべき仕事を他の誰かに押し付けてるだけだ。これらは、おそらく誰かが自分の記事やブログをオンラインで公開する前に校正しないときに(当然、正当な理由で)腹を立てる人たちと同じだ。みんなLLMを使って自分の仕事を手抜きしたいけど、誰もその後始末をしたくない。それじゃあうまくいかないよ。

Claudeが重要なことを全部間違えるっていうのは、ちょっと間違いだと思う。これは明らかに真実ではないことで、懐疑的な読者が記事の他の部分の信頼性を疑う原因になる。オプスは、私が間違ってるし、常にそうするなって言ってくる。なんでそうなるのか考えると、私のプロンプトの出し方が原因だと思う。無意識に、著者が避けられないと考えるような失敗を避けるようにしてるのかもしれない。具体的には、「私がどれだけ賢いか教えて」っていうようなクリーンに解決するプロンプトを出さないようにしてる。私は常にドメインの専門家として自分を提示するし、異なる選択肢の長所と短所について意見を求める時はそれを明確にしてる。この戦略は、成功しているLLMを日常的に使っている人には驚くほど効果的だと思う。

最近出会った面白い話があるんだ。約2年前、ゲームのインスタンシングシステムを設計した人がいて、その人は本当に何もわかってなかったから、私がその後始末をしなきゃいけなかった。AIを使ってシステムのあらゆる部分を設計したんだけど、めちゃくちゃだった。データの破損、パフォーマンスの問題、アイテムの消失、レースコンディション、考えられる問題は全部あったよ。それを「受け入れられる」レベルにするのに2週間かかったけど、全体の設計が単純に欠陥だらけだったから、まだひどかった。今は違う会社だけど、同じ人がいて、今度は「おそらく」ずっと良くなったAIを使ってるのに、同じ問題が起きてる。今回はその問題について聞いただけで、実際に対処する必要はなかったから、ただ笑っちゃった。AIは使う人次第だから、みんなが「AIができる」と主張することの幅が広いし、意見が全然違うのもそのせいだと思う。

AIを使ってあらゆる部分を設計したけど、最悪だったよ。データの破損、パフォーマンスの問題、アイテムの消失、レースコンディション、考えられる問題は全部あった。まあ、全くゲームがないよりはマシだろうけど。 > それを「受け入れられる」レベルにするのに2週間かかったけど、全体の設計が根本的に欠陥だらけだったから、まだ最悪だった。2週間の修正は地獄だったかもしれないけど、会社にとっては全体的に見れば良い取引だったんじゃない?「AIは役に立たない」って話はあまり説得力ないね。確かにそうかもしれないけど、君の体験談はAIが価値あるケースの一つに見えるよ。もちろん、欠陥はあるけどね。

AIは使う人次第だから、みんなが「AIができる」と主張することに幅があるし、意見もバラバラなんだよね。いいこと言ったね。

AIは使う人次第だね。まさにその通り。そう考えると、2週間で「受け入れられる」レベルにできたなら、そんなに悪くはなかったんじゃない?

AIは使う人次第だと思うけど、もっとひどいかもしれない。ダニング=クルーガー効果を増幅させるみたいだね。ポジティブな態度を示すように訓練されてるから、何があっても「君が一番だ」って言ってくれるんじゃないかな。

インスタンシングシステムって何?

この投稿、クロードが書いた匂いがするね。みんなもそう感じてるでしょ?こういう投稿を書く人って自己認識や誠実さが欠けてるのかな?それって重要?