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

GPTと取り残される感情

概要

AIコーディングツールの進化に対する焦燥感と実際の体験のギャップについての考察。 AIツールの実用性に疑問を感じる理由の整理。 他者の成功事例と自分の経験の乖離。 AIが得意な分野と苦手な分野の具体例。 コミュニケーション手段の案内。

AIコーディングツールに対する違和感

  • AIコーディング に関するブログや新モデルの話題が盛り上がる現状
  • 自分のスキル が時代遅れになる恐怖感
  • 実際にAIツールを試すも、 期待外れ の体験
  • 数時間かけても進捗がなく、 手作業の方が早い という実感
  • Vimの習得と比較し、AIツールには 即効性の欠如 を感じる

AIツールの得意・不得意

  • 単語補完や型推論 など、ピンポイントなタスクには強み
  • 関数単位のバグ検出 にも一定の効果
  • しかし、 複雑な機能や大規模実装 では役に立たないことが多い
  • 存在しないライブラリを 勝手にインポート するなど、現実離れした提案
  • 依存関係なしでの実装を依頼すると、 具体的なコード生成ができない 事例
  • バグ修正時に 新たなバグを生む ことが頻発

他者の成功体験とのギャップ

  • Hacker News などでの成功談の多さ
  • 著名な開発者 による実績報告が現実味を持つ
  • 一部の成果物が 公開されている 事実
  • 自分の結果と他者の結果が 一致しない葛藤
  • AIツールを「 壊れないハンマー」と言われるが、実際は「 紙細工」のように感じる

コミュニケーション案内

  • 本件に関する 意見・議論 を歓迎
    • パブリックインボックス: ~whynothugo/public-inbox@lists.sr.ht
    • プライベートメール: hugo@whynothugo.nl

Hackerたちの意見

みんなが見落としてるのは、たまにうまくいくこともあれば、うまくいかないこともあるってことだよね。「他の誰かがやるともっと良くなる」とか「自分が使ってるモデルよりも良いモデルがあるはず」とか「もっと上手にプロンプトできれば、いい結果が出るはず」とか「自分が使ってるIDEよりも優れたエージェントがあるはず」とか、そういうことを考える人が多いけど、確かにそういうのはあるかもしれない。でも、結局のところ、確率が変わるだけで、うまくいく時といかない時があるのは変わらないんだよね。例えば、エージェントにちゃんとしたデータを表示する画面を作ってもらったことがあるんだけど、最初は素晴らしいものができたけど、いくつかのフィールドが抜けてたり、フォーマットが不一致だった。でも、それを指摘したら、ちゃんと直してくれたんだ。プロダクトマネージャーやエンドユーザーの言葉で話してくれたからね。コードの質もすごく良くて、自分が書いたのと同じくらい、いや、もしかしたらそれ以上かも。もちろん、そうならないこともたくさんあるけどね。タイプスクリプトの型がよく分からないコードをいじってて、変なエラーメッセージを与えたら、理解しようと試みたけど、結局うまくいかなかった。1日か2日かけて「ラバーダック」として使ってみたら、何が悪いのか、どう直せばいいのかが分かるようになった。エラーが出ても理解できるし、エージェントも理解できるようになったりする。たまに型チェックに引っかかるコードを書くこともあって、「tscを実行してエラーを直して」と言うと、ちゃんと直してくれることもあるし、誇れる仕事をすることもあれば、つまらない型ガードを追加することもある。例えば、「if (x && typeof x === "object") x.someMethod()」みたいな感じで。基本的に同じ問題を与えても、Javaでテストを書くとなると、全然違うアプローチを取ることもある。ある時は、他のテストで使っている依存性注入フレームワークを使って、プライベートフィールドにモックを注入するけど、別の時は、プライベートフィールドにモックを直接注入するためのヘルパーメソッドを書くこともある。こうしたランダムさをうまくコントロールできるテクニックもあるかもしれないけど、結局はうまくいく時といかない時があるから、良い時だけ話したり、悪い時だけ話したりしたら、全然違う話になっちゃうよね。

「タイプスクリプトの型がよく分からないコードをいじってて、変なエラーメッセージを与えたら、理解しようと試みたけど、結局うまくいかなかった。1日か2日かけて「ラバーダック」として使ってみたら、何が悪いのか、どう直せばいいのかが分かるようになった。エラーが出ても理解できるし、エージェントも理解できるようになったりする。」 これ、簡単なグーグル検索を試して、ドキュメントを読んでみたら、LLMから結果を引き出すよりも早く解決できたんじゃないかなって思っちゃう。

行動心理学は、LLMを使ってコードを生成する際の反応の奇妙な分布を説明するのに役立つよ。「鳩のギャンブルのような行動:‘ジャックポット’信号が不適応なリスク選択を促進する」 https://www.nature.com/articles/s41598-017-06641-x テクノロジー業界はギャンブル依存症を積極的に助長していて、怖いのは人々がその罠に自ら飛び込んでいること。これを見てみて: https://news.ycombinator.com/item?id=44849147 「人々のワークフローについて話して学んだことのほとんどは直感に反していて微妙だ。」マジで?今、これらのモデルのために雨乞いのダンスをして、動きを「直感に反していて微妙」と表現してるの?これは魔法のような自己欺瞞のレベルだよ。ダウンボートしたければすればいいし、無視してもいい。私たちのエージェンシーが奪われてる。誰もが「予測できなかった」とは言えない。だって私たちはそれを見てたし、何かを言ったのに、仲間たちはそれを指摘した私たちを無知で自己中心的だと扱ったんだから。

一番最悪なのは、LLMがコードに微妙なバグを導入して、それをすぐに見つけられないことだよね。最近、Langfuseの統合をやってて、Cursorを使ってトレースやスコアをすぐにプッシュするためのスケルトンコードを生成したんだけど、生成されたコードには「score_id」っていうパラメータが含まれてて、Langfuseではドキュメント化されてなかったのに、なぜか受け入れられて、全体のトラッキングがめちゃくちゃになっちゃった。何度もデバッグを繰り返しても、トラッキングの問題が何なのか分からなかったけど、別のLLMにコードの可能な問題を見つけてもらったら、そのscore_idの行をすぐに指摘してくれた。

これはすごく大事な教訓だね。これらのコーディングモデルがどう作られているかを理解しないといけない。基本のLLMからどう設計されているか、そしてお互いをレビューするために明確に異なる2つのモデルを使うことがなぜ重要なのかを理解することが大切なんだ。

HNで見つけたブログ記事が、LLMを使ったコーディングのやり方を完全にレベルアップさせてくれたよ。https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/ AIが質問をしてくれて、PRDや仕様について考えることで、システムデザインが上手くなった気がする。

今はうまくいってるけど、2週間後にはうまくいかないか、逆に2倍うまくいくかも。¯_(ツ)_/¯ なんかルーレットを回してる気分だよ。AI支持者って、最初の数回のプロンプトで運よく勝ったギャンブラーなんじゃないかって思うこともある。

ここでの議論: 私のLLMコード生成ワークフロー - https://news.ycombinator.com/item?id=43094006 - 2025年2月 (160コメント)

MITでCSの学位を取得して、2004年から2020年までプロのソフトウェアエンジニアリングをしてたんだけど、最近別の分野で会社を始めたから、約4年間本格的な開発はしていなかったんだ。今夏、休暇を取って、自分の業界に特化した小さなソフトウェア趣味プロジェクトを始めることにした。初めてCursorを試してみたんだけど、新しいコードベースを立ち上げる際の面倒なことを実装するのに、すごく役立った。ビルドシステムの設定、ライブラリやAPIの調査、設定やI/Oのためのフレームワークの実装など、全部助けてくれた。もちろん、難しい部分は自分でやらなきゃいけなかったし、(おそらく一番重要なのは)Cursorが書いているコードを理解して、間違った方向に行った時には修正しなきゃいけなかったけどね。実際に「いや、なんでそんなやり方するの?Xの方がずっとシンプルだよ」と言ったら、だいたい直してくれた。何回か、自分でたくさんのコードを書いた後、久しぶりにプロジェクトをコンパイルしたら、(普通はそうするように)解読不可能なC++のテンプレートエラーの森に突っ込んじゃった。全部をスクロールする時間を使う代わりに、「コンパイルエラーを直して」と言ったら、ちゃんと直してくれた。もう一つの例として、「このクラスの比較演算子を実装して」と言ったら、5秒で終わった。プロジェクトが複雑になるにつれて、欲しい動作のテストを書くのがすごく役立って、「このテストを通して」と言ったら、ちゃんとやってくれる。コードベースを理解して、ジュニアデベロッパーのように追加してくれるから、すごく良い仕事をしてる。IDEを使って、全体のコードベース(ビルドシステムやテストを含む)にアクセスできることが重要だね。ChatGPTを単独で使って、コピペするのは価値がない。最初から全てのプロジェクトをやるのは無理だけど、面倒な作業からは助けてもらえたから、十分価値があると思う!

昨年の夏、約12年ぶりにソフトウェアの世界に戻ってきたんだけど、AIをヘルパーとして使うことで、ほぼ同じ経験をしたよ。ここ6ヶ月は、コンサルの合間にできるだけコーディングしてきた。AIがなかったら、こんなに早く追いつけたか分からない。大学でサンワークステーションをハッキングしてた頃以来、こんなにプログラミングが楽しいと思ったことはなかったけど、正直言って、最近は自分で書くコードは10%くらいしかない。今はClaude Codeを使って、GPT-5とペアプログラミングしてて、ファイルの編集をGemini Flashに任せてる。これ、かなりクールだよ。

新しいコードベースを始めるのに関わる全ての面倒なこと クッキーカッターや他のテンプレートリポジトリを見たことある?小さなプロジェクトにはそれが私のお気に入りで、結構うまくいくよ。LLMが追加するバグが、テンプレートリポジトリにはないことが心配だね。後者は通常、しっかりレビューされた人間が書いたコードだから。

趣味のプロジェクトならそれでいいけど、商業的に価値のある仕事ではプライバシーの問題をどう扱うの?

あなたが言ってるのは、過去にもっと良いドキュメントと例で簡単に解決できたことだと思うよ。

別の例だけど、「このクラスに比較演算子を実装して」って言ったら、5秒で終わるんだ。すごいよね、派生マクロと同じことができるけど、たまにしかできないし、10,000倍の時間と100,000倍のパワーがかかる :)

新しいコードベースを立ち上げるのに必要な面倒なことを実装するのに、すごく役立ったよ。ビルドシステムの設定、ライブラリやAPIの調査、設定やI/Oのためのフレームワークの実装とかね。すごくわかりやすい説明ありがとう。ここが多くの人がGPTから最高の価値を得るところだと思う。それが、Ruby on Railsみたいなプラットフォームが人気な理由でもあるんだよね。最初からボイラープレートを避けて、重要なことに集中できるのはAIを通さなくてもできるし、Javaのジェネレーターやコードファクトリーにこだわる必要もなかった。こういう洗練されたスタックから人々が離れていくと、進歩を失うのが怖いけど、ハイプが収まったときにまたバランスが戻ることを願ってる。

これは自分の経験とも一致してる…だから、相対的に言えばまだAI懐疑派なんだ。一般的に、簡単なことをより簡単にしてるだけ。いいけど、ゲームを変えるわけじゃない。個人的には、ほとんどの簡単なことはすでにサクサクできるから、得られるものは大きくない。HNのフロントページが、テキストエディタのキーボードショートカットをマスターすることや、検索と基本的な読解技術を組み合わせることについての記事で埋まってる世界を想像してる。それが、ここで話してる生産性の向上のレベルだよ。

こういうアカウントは善意だけど役に立たない。なぜなら、私たちの経験と感情の違いを説明してくれないから。いつも弱い結論に至るだけだ。「あの人は基準が低いんだな」って。

Claude Codeのことはしばらく聞いてたけど、1週間前に初めて試してみた。Macアプリのアイデアをプロトタイプするために使ったら、すごく早くプロトタイプを立ち上げられることに気づいた。数分でできちゃうんだ。手で打たなきゃいけなかったボイラープレートコードを省けるから、何百回もやったことがある作業がめちゃくちゃ楽になる。自分の経験から、この記事の著者がタスクを完了するために何を試したのかが、使い方に影響しているんじゃないかと思う。プログラミング言語やプロジェクトの規模がどれだけ違いを生むのか、他の投稿者も意見を聞かせてほしい。アプリのアーキテクチャを理解して、潜在的なリファクタリングについてフィードバックをくれることもあったけど、そこまで頼んではいなかった。Claude Codeを試す前は、ChatGPTやDeepSeekを使って、APIやフレームワークの使い方について一般的な質問をしたり、正規表現を使ったテキスト解析の関数のような短いコードスニペットを求めたりしてたから、正直言って、最先端の技術が実際に何ができるのかに驚いたよ、少なくとも自分のプロジェクトに関しては。

逆に、全く同じくらい迷ってるよ。開発のためにLLMを使う段階を何度も経験してきた。GPT3.5時代:これはすごい、ああ、全部幻覚だ。最初に思ったほど役に立たない。GPT4時代:スタックオーバーフローのステロイド版として非常に役立つ。Claude 3.5 Sonnet:ほぼ常に開いていて、質問をし続けて、実際にシンプルなコードを生成させるのが、昔のグーグル検索みたいに感じる。IDE内のAI「チャット」機能をたくさん試したけど、全然期待外れだった。今は、ほとんどClaude Codeで全てをやってるから、IDEを開くことは滅多にない。たまに「手動」でリファクタリングすることはあるけど、これは自分の精神的な健康とコードベースの理解のためだね。今日、Claude Codeに数分でやらせたタスクの例を挙げると、Bootstrapスタイルの見た目が古臭い管理パネルを、見栄え良くしたいと思ってた。Claude Codeにプロジェクトのマーケティングサイトを取得させて、そこからCSSやロゴ、フォントを取得して、管理パネルプロジェクトに似たスタイリングを適用させた。10分以内に、自分がやったことよりもずっと良い見た目になった(少なくともデザイナーの助けなしでは)。その後、プロジェクト全体(数十の画面)を通して、「説明」コピーを更新させたけど、ほとんどがTODOのプレースホルダーで、何が何をするのかをきちんと説明するためのものだった。さらに、コアフローにe2eテストスイートを追加させたけど、これもテレビを見ながら1時間もかからなかった。これまで絶対にやらなかっただろうな。ずっとやろうと思ってたことだし、このパネルに入るたびに、どれだけ使いにくいか、みんなに説明するのがどれだけ大変かにため息をついてたから。

そうだね、主にバックエンドエンジニアとして、Claudeがうまく処理できない変な技術的問題や、Claudeが全く知らないエソテリックなビジネスドメインの問題に対処してるけど、Claudeはあんまり役に立たない。ランダムなこと、例えばこのことを自動化するウェブアプリを作ったり、これらのフィールドにオートコンプリートがある管理パネルを作ったりするのは、すごく速くできる。こういう面倒なボイラープレートは、今までやったことがないから、無限に速く感じる。ウェブ開発チームに人を雇わなきゃいけなかったかもしれないけど、今はそれが必要ない。まあ、そもそもそんなことをやろうとも思わなかったけどね…

テレビを見ているときに これが私にとっての本当の利点の一つだね。テレビを見ながらコードを書くのもいいし、ベッドでコードを書くのもいいし、飛行機で離陸を待ちながらGitHub Copilot Agentsでコードを書くのもいい。

LLMの使用による結果の大きな違いは、仕事の内容の違いによるものだと確信してる。フロントエンドの仕事には素晴らしいけど、ボイラープレートを吐き出して、助けなしで変更を加えてくれる。特定のドメインのバックエンド、例えばロボティクスには悪い。特注のA*を吐き出そうとしたり、ライブラリや関数を作り出したりする。こういうのは手でコーディングした方がずっといい。問題は、これがクラシックなゲルマンアムネジアだってこと。私のウェブサイトをゼロの手間でリスタイルさせることができるし、StarCraft 2やNBA Jamのテーマも追加できるけど、計画や見積もりの問題に取り組ませると、そのクオリティにイライラする。両方とも多分悪いけど、気づかない。アプリに10の専門分野が必要な場合、10%のことにしかイライラしない。自分のドメイン外のアプリを作りたいなら、確かに最高だね。

これにはテレビを見ている間に1時間もかからなかったよ。あんな変更を uninterrupted な1時間でレビューするなんて絶対無理だ。デザイン変更を複数のブラウザでテストして、ズームやウィンドウサイズに反応するか確認しなきゃならないし、テストを読み込んで、ただのナンセンスじゃなくて本当に通過するか確認しなきゃいけない。テレビを見ながら1時間でそんなことできるわけがない。

あなたは一人じゃないよ。これは、彼らにチャンスを与えようとしたときの経験そのものだね。今は別の言語を話してるだけなんじゃないかって心配になる。追記:他のコメントを見て、文脈を追加すると、私はほぼ専らC++でGPUドライバーの仕事をしてる。

同じく - 私はcppのGPUコンパイラで働いてる。全てのLLMは役に立たないよ。皮肉なことに、私が働いているコンパイラはLLMのワークロードに多く使われてる。

トレーニングデータにGPUドライバーのコードがたくさんあるとは思えないな。

あなたのユニークなプラットフォームやスタック、コーディングの考慮事項に合わせてLLMを微調整するコンサルタントの市場があるよ。特にプロプライエタリなプラットフォームに関してね。(IBMは今、レガシーのメインフレームシステムのためにそれをやってると思う。)Appleも自社のフレームワークをOpenAIなどのモデルに早く組み込む方法を模索してるに違いない。

ほんと、問題領域が中程度のブログスパムやYouTubeのチュートリアルで溢れてるときだけ効果的だよね。

コードは負担だよね。LLMに任せると、クソみたいな抽象化や無駄なコメント、理解するのに余計な脳の力を使う奇妙なパターンが何千行もできちゃう。今は、原始的なコピー&ペーストをウェブチャット(Kagi Assistant経由)に戻してる。フリクションがあるから、各プロンプトやどれだけのコードコンテキストを与えるかをすごく考えるようになったよ(simonwからのファイルをプロンプトに集めて)。フロントエンドやウェブアプリの経験はあまりないから、監視付きのコーディングフローを試してる。プロンプトごとにほとんどのコードベースを渡して、一つの機能を頼んで、コードの出力を全部読んで、悪いパターンを減らすために何回か繰り返してる。普通は、その後自分で打ち直すか、せいぜい数十行のスニペットをコピーするだけ。フルファイルを変更済みで頼むのはうまくいかないことが分かった。時間がかかるしトークンも無駄になるし、無関係なコードが壊れたり切り捨てられたりすることが多い。今のところ、このプロジェクトはうまくいってるよ。ほとんど自分で監査して打ち込んだから、コードには詳しいし、実際に知識も身について新しい概念(VanJSのリアクティブステート)も学んでる。将来的にLLMなしでもこのプロジェクトを維持できる自信があるし、同僚に引き継ぐことも考えてる :)

「バイブコーディング」を仕事で成功させてきた者として、AIツールを信じるようになったのはエージェンティックな指示のおかげだと言える。あまり成果が出せないのと、実際に物事を進めるのとでは大きな違いがある。HNではこのトピックについていくつかの記事が出てるから、ぜひリポジトリに実装してみてほしい。

これは投稿じゃなくて、ただのランダムな意見だね。それに、彼らが小さなウェブアプリをLLMより早くコーディングできるなら、帽子を食べるよ。30秒以内に動かすために必要な2000行以上のコードを書いてみてほしいな。彼らの態度は、最初から役に立たないことを望んでる人の期待通りって感じだ。自己実現的な仮説だね。