初めまして!
株式会社スペースマーケットで内定者インターンに参加させていただいている、h4luです!
最近、技術トレンドを追うためにオンラインイベントにちょこちょこ参加してまして、そこでAIエージェント、Cursorに関するイベントに参加しました。
それがすごい刺激になりAIもっと触ってみたいなぁと思ってた時に、Claude CodeがProプランで使えてしまうというニュースも飛び込んできました。
そういえば巷で噂のバイブコーディングやったことないなぁと思い簡単なAIアシスタントを作成してみましたので、その感想や得た学びを記事に起こそうと思います。
この記事では、実際にAI駆動開発を体験してみた感想や学び、そして今後のエンジニアに求められるスキルについても考察してみましたので、ぜひ最後までお付き合いしていただければと思います。
最初はもっと高度なAIエージェントを作るつもりだったのですが、完成品を振り返ってみると
「これ、精巧なプロンプトアシスタントでは?」というのが正直な感想です。
まあ、これは今後の拡張のお楽しみということで。
制作背景
一人暮らしの大学生、社会人、主婦、主夫…などなど、毎日の自炊に追われる皆さん、日々献立考えるの大変じゃないですか?
私はめちゃくちゃ大変です。
というのも、普段の献立決めって、結構複雑なプロセスなんですよね。
まず、近所のスーパーのチラシをチェックして特売情報を確認する情報収集から始まり、
予算内で栄養バランスも考えつつ飽きない献立を考案する作業。
献立に応じた買い物リストの作成、そして調理時にレシピを調べながら料理開始・・・
私自身料理は好きですし、献立を考える時間も好きなのですが、
でもこれが日常的にとなると、やっぱりしんどい時もあります。
かといって得意料理ばかり作っていると、一時的には献立の苦労からは解放されるのですが、
今度は「この前もこれ食べたな…」問題が発生して、根本的な解決にはなりません。
そこで思いついたのが、以下のAIアシスタントです。
AIアシスタント「Flavia」の仕様
開発したAIアシスタント「Flavia」は、個人に特化したお料理お助けAIパートナーです。
主な機能
- 献立作成:指定した日数分の献立を自動作成。「今週は和食中心で」「疲れた日用の簡単メニュー」といった要望にも柔軟に対応してくれます。
- レシピ提供:各料理の材料とレシピを表示。
- 買い物リスト作成:献立に基づいた買い物リストを自動生成。
これらに加えて、Flaviaはパーソナライゼーション機能を搭載しています(実際はJSONファイルで格納しているだけですが)。
Flaviaが覚えてくれる個人情報は以下の通りです。
食事の好み
- 好き嫌い・アレルギー情報
- 苦手な食材や避けたい料理
- 好みの味付けや調理法
スキルと環境
- 得意料理・挑戦したい料理
- 常備してある調味料やキッチン用品
- 料理スキルレベル
ライフスタイル
- 健康目標
- 食事制限や栄養要件
- 調理にかけられる時間
これらの情報のおかげで、苦手な食材を使った料理は一切提案されないですし、常備してある調味料は買い物リストから自動で除外されるので、従来のGPTやClaudeのチャットで相談するよりも、かなり使い勝手は良いと思います。
実際の画面はこんな感じです。
操作は簡単で、以下の例では「3日分の献立:牛肉とトマトを使った料理、洋風の鍋、鶏肉と茄子とネギを使った料理」と、かなり曖昧な注文をしてみた結果になります。
Discordに送信、というのは生成された買い物リストを送信できる機能です。
提案された料理で問題なければ、ポチッと。
外出先でもスマホから買い物リストを簡単に確認できます。
うーん、買い物リストに「ごま油適量」が混ざってたり、トマトビーフシチューの具材が一人暮らしにしてはボリューミーだったり、レシピ手順が簡素だったりと気になるところはまだまだあるのが現状です。
実装の流れ
冒頭でも話したように、なぜFlaviaがAIエージェントと呼ぶには躊躇われるのか説明します。
現在の一連の処理フローは、添付のデータフロー図に示すとおりです。
まず、UIから今の気分や消費したい食材、食べたいものを入力します。
この入力を受け取ったFlaviaは、格納されている個人データを読み込み、事前に用意されたプロンプトのテンプレートに情報を挿入。
その後、APIを通じてClaudeに送信し、データ生成を行い、結果をフロントエンドのFlavia UIに返すという流れになっています。
データフロー図
AIエージェントの定義としては色々あるようですが、Claude様が言うには、
AIエージェントとは、自律性、反応性、プロアクティブ性、社会性という4つの特徴を持つシステムのことを指します。自律性では人間の直接的な介入なしに独立して動作でき、反応性では環境の変化を感知して適切に応答できます。プロアクティブ性では目標達成のために自発的に行動を起こせ、社会性では他のエージェントや人間と相互作用できる能力を持ちます。
とのことです。
この定義に照らし合わせると、現在のFlaviaは「高度なプロンプトアシスタント」の域を出ていないと言えるでしょう。
FlaviaがAIエージェントと呼べるレベルに到達するには、例えば以下のような一連の自律的な処理が必要になります。
まず、冷蔵庫内の食材を自動で認識・監視し、在庫が減少していることを検知します。
次にユーザーのGoogleカレンダーを確認して買い物に行ける時間帯を特定し、近隣スーパーのチラシ情報を自動取得して特売商品と価格を比較分析。
そして最適な買い物スケジュールを決定し、自動的にGoogleカレンダーに買い物予定を登録、買い物リストを生成してカレンダーイベントに添付する。
といった一連の処理を人間の指示なしに実行できれば、間違いなく真のAIエージェントと呼べるでしょう。
しかし、このレベルに到達するには、IoT機器との連携、スケジューリングアルゴリズム、意思決定エンジンなどなど、現在のシステムを大幅に拡張する必要があります。
これらの技術要素の実装が、次の開発目標となります。
個人的にもIoT機器を扱うことに興味があるため、まずはそこから取り組んでみたいと考えています。
AI凄すぎる問題
曖昧なプロンプトを投げるだけで、みるみるうちにそれなりのものが生成されるため、自分いなくても良いのでは、、と思い早々にこんな状態になってました。
「良い感じにして」や「もう少しモダンなデザインでお願いします」といった漠然とした指示であっても、期待に近いものを”瞬時”に作成してくれるのは本当に驚異的だと感じました。
コード品質に関しても、適切なコメントによって可読性の高いコードを生成してくれますし、エラーハンドリングやバリデーション処理についても網羅的に実装してくれました。
しかし、「朗報:人間まだ要る」
この記事の結論としては 「朗報:俺要る」 と締めさせていただきたいと思います。
というのも、AIに「良い感じに」実装を任せても、時として大きく見当違いのアプローチを取り始めることがあったからです。
正直なところ、Vibes Codingを始めた当初は、Claude Codeが提案するコードに対して、「YESYESYESYESYESYESYES」と無心にEnterキーを押し続けるマシーンと化していました。
しかし、作業を続けているうちに「ここの処理はどのような動作をしているのだろう」と疑問を持って詳細を確認するようになり、プロジェクトへの理解が深まっていくにつれて、「Claude Codeが提案するこのアプローチは適切ではないのではないのでは?もっと良い実装方法がありそうだけど…」と自然に懐疑的な視点を持つようになりました。
ルートディレクトリにテストファイルやドキュメントが次々と生成され、似たような機能を持つディレクトリが複数作成されているという状況に気づいた時は流石にこのままではいけないと思いました。(曖昧なプロンプトを送っていたせいなのですが…)
プロジェクト開始時や機能開発時において、実装過程を先にドキュメントとして作成させ、AIが目指している実装内容と人間が認識している目標が一致しているかどうかを事前に確認することは極めて重要だと実感しました。
既存の開発手法として確立されているアプローチかもしれませんが、開発開始前に最重要ルールを設定し、AIに対するガードレールのような制約を明確に定めておくアプローチも今後は実践してみたいと思います。
今後のエンジニアに求められるスキルセットの考察
以前読んだ技術ブログにて、「これからのエンジニアには、一人ひとりにPdMやテックリードのような総合的な能力が求められる」という記述があり、AI駆動開発を実践してみて、まさにその通りだと実感しました。
マクロ と ミクロ
単にプロジェクトレベルの技術的な課題だけでなく、そもそも解決すべき根本的な問題や、関連する業界全体の動向まで視野を広げて物事を俯瞰的に捉える能力が重要になってくるのではないかと考えます。
そういったマクロな視点だけでなく、技術的な詳細に対するミクロ面での理解も依然として不可欠だと感じました。
コードレビューや品質評価においては、AIが生成するコードの品質を適切に判断し、潜在的な問題点を発見できる技術力が今以上に必須となるのではないでしょうか。
AIの出力結果をブラックボックスとして扱うのではなく、その動作原理や実装詳細を理解し、生成されたコードに対して責任を持つことが肝心です。
基礎技術の重要性
また、特定のプログラミング言語や技術スタックに依存しない、システム全体の設計原則やアーキテクチャパターンに対する理解も極めて重要だと感じました。ネットワーク、OS、データベースといった基盤技術の動作原理を理解していることで、AIが提案する実装の適切性をより正確に判断できる場面もあるかと思います。
エンジニアの学習において頻繁に言及される「基礎技術の深い理解」の重要性を、今回の開発体験を通じて改めて強く実感しました。
技術の歴史と進化の観点から考えると、現在のモダンな技術スタックも10年後には古い技術として扱われる可能性がありますが、その根底にある設計原理や思想は普遍的な価値を持ち続けています。
例えば、HTTPはWeb技術の根幹を支え続けていますし、オブジェクト指向の設計原則は新しい言語や技術が登場しても基礎的な価値を保持しています。
基礎知識とAI活用能力の相関関係
AIに関する最新情報のキャッチアップが得意な人材はもちろん重要ですが、それに加えて、アーキテクチャのベストプラクティスに精通している人や、開発手法のベストプラクティス(テスト駆動開発やドメイン駆動設計など)に深い知見を持つ人は、AIをより効果的に活用できていると感じました。
また、そういった人材は、AIで解決すべき課題と人間が介入すべき課題の判断についても、適切な使い分けができると確信しています。
最近まで、「AIを効果的に活用するスキル」と「日々の地道な技術学習」はそれほど密接な関係にないと考えていました。
AIが効率的に学習できるプロンプトの研究や、AIの効果的な活用方法の探求といった情報収集作業と、プログラミング言語の深い理解や設計思想の学習は、直接的な関連性が低いと思っていたからです。
しかし、実際のAI駆動の開発体験を通じて、実際には逆の関係性があるのではないかと考えるようになりました。
基礎的な知識が豊富であればあるほど、AIを活用すべき適切なタイミングや場面を判断できるようになると思います。
AI技術に関する知識が全くない人でも一定レベル(10)の成果物を作成できるかもしれませんが、豊富な基礎知識を持つ人であれば、より高いレベル(100)の成果物を生み出せるでしょう。
個人の能力 × AI(10倍の効率化) = 最終的な作業効率と成果物の品質
この等式は成り立つという仮定の元、自分自身の技術的な強みも継続的にアップデートしていきたいと思っています。
AI駆動開発は確かに革新的な技術ですが、人間のエンジニアを完全に置き換えるものではないと感じました。
むしろ人間の能力を拡張して、より高次の価値創造に集中できるようにする技術だと実感しました。(少なくとも2025年6月時点では)
技術の急速な進歩に適応しながらも、エンジニアとしての基礎的なスキルをしっかりと磨き続け、問題解決の本質を見極める能力を養うことが、今後ますます重要になってくると考えています。
この記事が、AI駆動開発に興味をお持ちの方々の参考になれば幸いです。同様の体験をされた方がいらっしゃいましたら、ぜひご感想やご意見をお聞かせください。
最後までお読みいただき、ありがとうございました!
Views: 0