ジュニアエンジニアなら“AI駆動開発は設計が9割” ─ 出戻りゼロの実践手法
はじめに
こんにちは、スペースマーケットでインターン中のジュニアエンジニア、akipaint です。
「AIでコードを書く」ことが当たり前になりつつある今日この頃。特に生成AIを使った開発手法
──いわゆるAI駆動開発は、個人開発や実務問わず急速に広がっています。
僕自身、インターンや個人開発を通してAIと一緒にコードを書いています。
しかし、そんな中でこんな疑問にぶつかります。
- 「このコード、本当に使って大丈夫?」
- 「どこまでAIに任せていいんだろう?」
- 「AIで爆速開発!…のはずが、出戻りばかりしてる…」
そこで今回は、僕が実践している「ジュニアエンジニアにこそ必要なAIの正しい向き合い方」についてご紹介します。
結論から言うと、一番重要なことはAIにコーディングを頼む前に“設計で壁打ち”することです!
なぜAIコードは「出戻り」するのか?
AIは新規コードの生成には非常に強力です。
(一瞬でコード完成!キラキラ〜)
しかし、ジュニアエンジニアがこのパワーをそのまま使おうとすると、以下のような課題にぶつかりがちです。
🔄 出戻りパターンあるある
- 思った通りに動かない
- 依存関係が壊れてる
- 返ってくるデータの形式が違う
- 内部構造がわからずデバッグが地獄
こうなってしまう原因はシンプルです。
- 前提条件の共有不足
- 一度に作らせすぎ(設計の粒度が粗い)
エンジニアにとって、AIは「なんでもやってくれる魔法のツール」ではありません。
適切な設計・分解・指示を渡すことで、やっと求めるコーディングを行ってくれる、いわば同僚のような存在なのです!
AI駆動開発は“運転”である
AI駆動開発を使うと、まるで特急電車に乗っているような感覚になります。
(どこまで行くかだけ言えば連れてくよ〜!)
けれど、ジュニアエンジニアがAIを電車や新幹線のように「お任せで目的地に連れていってくれるもの」と考えていると、あらぬ方向に突き進んで迷子になってしまいます。
(...え?ここどこ??😨)
実際には、AIは自動車のようなものです。
ハンドルを握って操作しなければ、目的地には辿り着けません。
正しい“運転方法”──つまり設計と指示を適切に渡すことで、初めてAIの力を最大限に活用できるのです。
AI駆動設計:5つのステップ
1. 要件を明文化する
まず、実装したい機能のゴールと要件をAIチャットと相談します。
- なんのための機能だろう?
- どんな出力にするのがベスト?
- ユースケースはどんな感じだろう?
実装する機能に求められている役割や要件を共有しながら詰めていきます!
2. ディレクトリ構成と依存関係を決める
ファイルを作成する場所や処理を切り出したファイル名をどうするかなど、
ディレクトリ構成に関する設計をAIと相談しながら考えます。
- この処理のファイル名どうすればいいかな?
- このファイルどこに配置したらいい?
ここでは、処理の実装先となるディレクトリの構造をAIに共有すると良いでしょう!
VSCodeの拡張機能であるAscii Tree Generatorなどを利用し、ディレクトリ構成を共有することをお勧めします!
3. 入出力仕様(I/O)を定義
入力情報としてどのようなデータが引数として必要なのか、どのような出力(返り値)が必要なのか。
処理の役割から逆算して必要となるデータはなんなのかAIと確認しておきましょう!
- ここでの処理にはどんなデータが必要?
- 出力結果としてこれは必要ないんじゃない?など
入力と出力が決まることによって、実装すべき処理が具体的に見えてきます。
4. 処理フローをテキストで組み立てておく
処理の流れをテキストで書き出し、AIに共有してベストプラクティスになっているか評価してもらいましょう!
- 以下の処理フローは適切ですか?
- 冗長な設計になっていないか評価してください!など
1. 画像URLを取得
2. 外部APIでメタ情報を取得(サイズ・色など)
3. 整形してJSONで返す
リファクタリングなどを後日行うよりも、設計の段階でベストプラクティスを考えておくことが、技術的負債を最小限の抑えるためにはとても重要です!
コードの品質は設計の段階で決まるのです!
5. 一度に生成するコードは「2ファイルまで」
ありがちなミスとして、一気に大量のコードを生成させてしまう人がいますが、
一度に大量のコードを生成すると、それらすべての内容に対して適切に実装されているのかを確認する必要があり、修正点があればそれらすべてのコードをチェックして修正しなければいけません。
一回で生成させるのは以下の2つだけに絞るのがベストです。
- メインとなるロジック(例:
metadata_fetcher.rb
) - それを呼び出す側のコード or 使用例
これを守ることで、単一責任の原則を守り、生成された処理の内容を把握し切れるボリュームに収めることができます。
また、そうすることで生成コードのブラックボックス化を防ぐことができます。
AIに渡す“設計テンプレート”
上記までで設計した項目を基に、以下のようなテンプレートをベースに依頼することで、
内容の認識ズレや依存関係の不一致といった出戻りを大幅に減らすことができます。
<参考例>
## 前提条件
プログラミング言語・FW:Ruby 3.3 / Rails 7.1
使用ライブラリ:gem "devise"
など
## 目的
画像メタ情報を取得し、整形して返すサービスクラスを実装したい。
## ディレクトリ構成(予定)
app/
└ services/
└ image/
└ metadata_fetcher.rb
## 入出力仕様
- input: image_url:String
- output: JSON (width, height, colors)
## 処理フロー
1. 外部APIからサイズ取得
2. カラーデータを5色抽出
3. 整形して返却
## 呼び出し例
result = Image::MetadataFetcher.new.call(image_url: "https://〜")
puts result[:colors]
裏技:チャットを“2窓”に分けると最強
僕が実践しているテクニックの1つが、AIチャットを以下のように2つに分ける方法です。
チャット名 | 役割 |
---|---|
🧑💻 設計・ペアプロ窓 | 実装の相談相手。処理の流れを詰める用。コーディング担当。 |
👨🏫 メンター窓 | 疑問点を気軽に投げる雑談用。構文や依存関係、ベストプラクティスなど |
「これってこう設計しても大丈夫?」
「この構文Railsで動く?」
といった“軽めの相談”をメンター窓に集約することで、設計窓がノイズなく機能します。
出戻りを防ぐコツ:3つの観点
観点 | やること |
---|---|
🧩 単一責任 | 1ファイル1責任に細分化。責務を明示。 |
📦 初期条件 | 言語・FW・ディレクトリ構造・I/O・参考資料をセットで渡す。 |
🔁 テスト設計 | コード生成時点で、テスト観点も一緒にAIに伝えると精度が上がる。 |
これらを意識することで、エンジニアとしても一段階高いレベルのものを作れるようになります!
まとめ
ジュニアエンジニアがAI駆動開発を行う上で、もっとも重要なのは「いきなりコードを生成しないこと」です。
- コーディングを行う前に前提条件の確認や処理内容、使用ライブラリなどの設計を行なっておくこと。
- AIとの“壁打ち”通して、ベストプラクティスでの設計になっているかを確認すること。
ディレクトリ設計から処理の流れなど、コーディング前に相談しておくことでAIはペアプロのように働いてくれます。
“AIに任せる”のではなく、”AIと一緒に開発を行う”こと。
これが、ジュニアエンジニアがAIと共に成長するための第一歩だと、僕は考えています!
おわりに
最後まで読んでくださりありがとうございます!
今回は僕がインターンや個人開発を通して身につけたAI開発について書かせていただきました!
今回紹介したワークフローやテンプレートは、あくまで僕自身の経験に基づいた方法です。
他にも効果的な使い方、うまくいったパターンなどあれば、ぜひ教えてください!

スペースを簡単に貸し借りできるサービス「スペースマーケット」のエンジニアによる公式ブログです。 弊社採用技術スタックはこちら -> whatweuse.dev/company/spacemarket
Discussion