36
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新卒エンジニアが vibe coding して分かったこと

Last updated at Posted at 2025-12-10

はじめに

新卒エンジニアとして 2025 年の 4 月に入社して以来、ほとんど未経験でプロジェクトの開発に配属されたため当然のように AI に鞭を打って開発を行っていました。このやり方は後から vibe coding と呼ばれていることを知りました。vibe coding をしていく中で分かったことがあるので記事にしたいと思います。

vibe coding とは

vibe coding の言葉の生みの親である Andrej Karpathy はこう定義しています。

Vibe coding is a software development method that uses AI to generate code from natural language descriptions

改めて定義を見直すと自然言語を使って AI にコードを生成してもらうソフトウェア開発全般に言える言葉なんだと思いました。

discord とか reddit を見ているとコーダーからは vibe coding は忌み嫌われているイメージがあったので意外です。

おそらくこの嫌悪感はマニュアル車の好きな人が自動運転車に対して思っている感情と似ているはずです。自動運転車の方が当然、安全で楽ですが、自分で運転しているという体験がなくなることに抵抗があるのでしょう。

vibe coding の落とし穴

vibe coding は(特にジュニアにとって)いくつかの落とし穴があることも分かってきました。以下に提示したことは前々から言われているようなことだとは思いますが、改めて整理したいと思います。

  1. 方向性が定まらない
  2. ブラックボックス化しやすい
  3. 検索力が養われない

技術に関しての知識が乏しい段階にあたっては、「どの実装においてどの技術が優れている」といった比較ができないため、AI の提示した実装が最適ではないことがしばしば発生し、レビューの段階で指摘されることがありました。

方向性が定まらない

“If you don’t know where you are going, any road will take you there.”

不思議な国のアリスに登場するチェシャ猫が放った有名な言葉です。皮肉を含んでますが、訳としては「どこへ向かっているのか分からない状態だとどの道を選んだとしても意味がない」といったところ。

まさに私の状況に言えることです。羅針盤すら持っていないのに、いきなり AI という強力なモーターボートを手にした状況でした。どこへ向かえばいいのか定かではないため、エンジンをかけるといつの間にか座礁していることも。

ブラックボックス化しやすい

座礁することもあれば、何かしらの島にたどり着くこともあります。

うまく動いているから大丈夫だろう...

動いているからといっても見逃している観点がいくつかあることを知らされました。

  1. 最適な技術を使っていない
  2. 冗長なコードやコメント文
  3. エラーハンドリング

実装ができているからといって、AI がそのタスクにおける最適な技術を採用しているとは限りません。技術に関するアップデートが学習データに反映されるまでには時間がかかり、一昔前の「正解」が使われていることがよくありました。

加えて、リファクタリングといった作業は AI が勝手にやってくれるわけではありません。共通化できる部分をプロンプターが把握できていないと AI は独自に実装してしまいます。エラーハンドリングに関しても疎かになってしまいます。これではレビュアーの負担が増してしまいます。

曖昧なプロンプトで伝わってしまうことも問題です。

〇〇を追加して、もっとこういう風にして

といったようにニュアンス化された言葉を使ったとしても AI がコンテキストギャップを推測して、「いい感じ」に作ってくれます。

こうしたプロンプトを多用していると利用可能な技術とコードベース内の理解が追いつかなくなります。その結果待ち受けているのが、なぜ動いているのか分からないブラックボックス化です。

検索力が養われない

プログラミングにおいては「検索力」が重要

先輩からプログラミングに関しては検索する力がとても重要だと伺ってきました。しかし、AI を使っているとどうしても検索をサボりがちになってしまいます。

例えば、機能を追加する時にあたっても

こういう機能を追加して欲しい

という風に指令していると「この機能を追加するためには、どのような技術を使えばいいのだろう?」という主体的な検索をすることがなくなってしまいます。

別に実装できればそれでいいじゃないかと思うこともありましたが、AI が出しきた答えが最適ではなかったり、どうして動いているのか分からないので、このやり方は危険だと思いました。他にも、使っている AI の能力の差が激しかったり、お金がかかるといった問題もあります。

vibe coding のテクニック

vibe coding なんか甘えたこと言わずにジュニアは手でコーディングしろ。俺もそうしてきたんだ。- 架空の人物

結局この声に従うのが正しかったのでしょうか?

そういう訳ではないと思います。これほど便利なツールがある中で使用しないのは合理的な選択肢とは思えません。vibe coding にも賢いやり方があるはずです。今も模索中ですが、以下はやってみて良かったことです。

  1. 質の高いインプットを与える
  2. プランを立てさせる

AI に質の高いインプットを与える

Garbage in Garbage out と言われたりしますが、インプットの質が低ければ、どれだけ優秀な AI を使っても質の低い答えが出てきます。

コンテキストエンジニアリング

ここで登場するのがコンテキストエンジニアリングと言われるテクニックです。また Andrej さんの quote ですが、コンテキストエンジニアリングを以下のように形容しています。

"Context engineering is the delicate art and science of filling the context window with just the right information for the next step."

コンテキストエンジニアリングは、状況や意図を精密に編み上げていく、繊細な技と理論の営みと述べています。

コンテキストエンジニアリングでは AI が参照できる設定ファイルを用意することで、今やろうとしていることが全体像のどこに位置しているのかを特定し、何を目印にして進めば良いか教えることになります。無駄のない的確なコンテキストと指示を与えることはまさに芸術と言えるでしょう。

自分もネットの記事などを参考にして、設定ファイルを作ってみました。用意した参照ファイルは荒削りのものでしたが、それでも回答が良くなっていたので多くのポテンシャルがある思います。

プロンプトエンジニアリング

プロンプトエンジニアリングはその名の通り、AI が綺麗に着地できるようプロンプトを工夫しましょうねという考え方だと理解しています。

AI 駆動の開発をする中で良いプロンプトの基準というのは的確な指示ができているかどうかにあることがわかってきました。情報量が少なすぎては当然 AI が足りていない情報(コンテキストギャップ)を推測するしかなくなるため、成果物が期待通りになりづらくなります。

一方で、情報量が多すぎる場合はどうでしょうか?これも良く陥る落とし穴なのですが、そのタスクをこなすにあたって不必要な情報はノイズにしかなりません。そうした成果物はノイズに引っ張られて変な方向に行ってしまっていることもあります。

コンテキスト vs プロンプトエンジニアリング

コンテキストエンジニアリング プロンプトエンジニアリング
範囲 広い 狭い
手段 設定ファイルなど プロンプト
関心 設計や方針、ガイドライン 次のタスク
効果 常時性 一回性

コンテキストとプロンプトエンジニアリングの違いはアイテムの効果に例えるとわかりやすいです。コンテキストエンジニアリングで使用する設定ファイルは構築するだけで回答の質が +50% する永続バフのようなものです。一方で、プロンプトエンジニアリングはそのターン中にしか発動しない単発バフに例えられます。

AI 駆動開発の攻略において、コンテキストエンジニアリングは強力なアイテムとなることが分かります。構築には時間がかかりますが、一度設定してしまえば常時回答の質が高まるので設定することをお勧めします。設定の仕方などはたくさん記事が出ているのでそれを参考にするだけで十分だと思います。

AI にプランを立てさせる

一方で AI にプランを立てさせることも強力なツールとなることが分かってきました。

自分は今、cursor というエディターを使ってコーディングしていますが、AI がネイティブで搭載されています。この AI には、Agent/Plan/Ask という 3 つのモードがあります。こちらの Plan のモードを使用すると、AI に対してプランを立てさせることができます。

プランを立てさせることの良さとしては、AI が今からどのように実装しようとしているのか一覧できることにあります。そのプランで「ここは違うな」という部分があれば実装する前の段階で時間やトークンを抑えながらプランを立て直させることができ、build を押すとその通りに実装します。

(cursor を使っていない方でも「〇〇の実装をしたいと思っています。まずは計画を立ててください。」といった風にプロンプトをすれば計画を立ててくれるはずです。)

当たり前のように聞こえるかもしれないですが、AI がどのように実装するか可視化するのは重要なことでした。それ以前はよく実装途中で「そうじゃない、そうじゃない!」と言いながら止めたりしていました。

プランを精査するにしても技術の知識をある程度持っている必要があることもプランを立てさせる良い点です。自分の分からない用語が出てきたら、その度に web で調べるという良い癖もつきます。

以上が現段階で意識している AI の使い方です。これが完璧なソリューションだとは到底思っていません。今でこそ改善しましたが、プランを立てずに雑なプロンプトで実装させてしまうこともあります。自分で意識しないといけないことなので強制力はありません

終わりに

この記事は、新卒エンジニアとして AI を使った開発、いわゆる vibe coding にまつわる落とし穴とそれに陥らない方法を議論しました。変わりゆく時代なので、ここに書いてあるやり方も来年とかには既に時代遅れになっている可能性もあるので、常に知識をアップデートして、それを元に考えることが重要です。

その場にとどまるためには、全力で走り続けなければならない

36
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?