🤔

[入門]Yamlを用いたAI駆動開発を試してみる①

に公開

YamlによるAI駆動開発の方法を探ろう準備編

Yamlになぜ注目するか

yamlってなんや
という方はこちらのhirokajiさんの記事をご覧ください👇
https://note.com/tasty_dunlin998/n/nd350adfaa0e8

すごい簡単にいえば
人間にもAIにも分かりやすいデータ形式です。

簡単な例として記述するとこのような表現になります。

name: りくたろ
age: 71
job: AIだけ熱意あるエンジニア
hobbies:
  - 英語
  - 睡眠
  - AIを用いた開発

直観的に人間でも読めますよね。

このような人間のメモ的な書き方がAIにも分かりやすいわけです。

YAMLはなぜLLMにとって扱いやすいのか?

そこもhirokajiさんが書いてくれています。

OpenAIのGPT系モデルやAnthropicのClaude、Google GeminiなどのLLMは、構文的に一貫した情報を与えるとより安定して動作するという特性があります。

「構造を重視し、LLMが理解しやすい形式で書くべき」=YAMLの選択

さらに以下の研究も重要です。👇
「LLMに会話的に指示を与えると、回答の不安定性が著しく増加する」という発見

つまり単発での指示の方が有効ということでした。

構造化されたLLMに理解しやすい形で
単発でAIにしてほしいことを人間の意図通り伝えるために、yamlが注目されるわけです。
https://x.com/K_Ishi_AI/status/1922870619873440095

yamlプロンプトは主にポン出しの画像生成の分野で目立っていますが
開発の分野でも可能性を感じさせてくれています。
参考)
https://note.com/sora19ai/n/nb0ac518851bf

Cursorの準備

今回はCursorというAI搭載のIDEを用いました。

ClineでもAmazon Q Developerでも、GitHub Copliotでもいいと思います。

Cursorのセットアップ方法は以下参考👇
https://zenn.dev/umi_mori/books/ai-code-editor-cursor/viewer/install

CursorではCtrl+IでAI Chat画面が開きます。
ここに要件定義書などのコンテキスト/文脈を@Add ContextでAIに与えて実装を行うことができます。

コンテキストエンジニアリングなど言われている通り
適切にAIにコンテキストを与えられるかがAI駆動開発で重要になっていきます。

Yamlを実際に試す準備

試しにシンプルなタスク管理アプリを作成してみましょう!
ReactとPythonを個人的に勉強しているので

技術スタックは以下にしました。

  • フロントエンド: React.js
  • バックエンド: Python (FastAPI)
  • データベース: PostgreSQL
  • 認証: JWT

まずは作りたいものを先ほどのCtrl+Iのチャットで伝えて要件定義書をマークダウンで用意しました。
要件定義書などはシンプルに自分で確認しつつ見たいのでマークダウンで。

要件定義書の他にもAI側にコンテキストに最低限用意しておくとよさそうな設計書も
マークダウンで用意しておきました。

設計書作成は要件定義書.mdをコンテキストに含めた上で作成します。

この設計のところをyamlでなんとかするのも良いのかもですね🤔

設計書は以下の記事にある通り、実装の前の骨組みを作成する段階です。
基本設計となる「画面設計」「機能設計」「データ設計」と分類できます。
このQiitaの記事は神です。
https://qiita.com/Saku731/items/741fcf0f40dd989ee4f8

今回のタスク管理アプリの主な機能は以下です。
・ユーザー管理
ユーザ登録
ユーザログイン
・カテゴリ管理機能
カテゴリ作成・編集・削除
・検索フィルタ機能
タスクタイトル・説明文の全文検索
・タスク管理機能
タスク作成(タイトル、詳細、優先度、期限、カテゴリ、タグ)
・ダッシュボード機能
総タスク数、完了タスク数、進行中タスク数、期限切れタスク数の表示

そして、今回はPrompt_yamlフォルダを用意しました。

これは、今までの要件・設計書に基づいた実装のための
一撃プロンプトtask.yamlを入れるフォルダとしておきます。

いちいちtask.yamlの書き方をCursorに伝えるのは非効率なので
AIを制御するためのUserRulesを記載してみましょう。

User Rulesは、すべてのプロジェクトに適用されるグローバルルール
Project Rulesがプロジェクトレベルのルール、細かい制御を行うRuleとなります。

CursorのRuleは以下が参考になります👇
https://zenn.dev/takuya77088/articles/534570ca17a3da

今回はUser Rulesに書くことにしました。
Cursor Settings<Rules&MemoriesのUser Rulesの箇所に


ユーザーがタスク計画の作成を依頼したら

① 要件定義書・設計書を確認
② 実装に必要な情報を整理
③ 依存関係や影響範囲を分析
④ 実装対象ファイルを洗い出す
⑤ 実装計画を構造的に記述した task.yaml を作成し、Prompt_yaml に保存


このような仕組みを予めCursorのAIに設定することができます。

ここは上記の流れになるようにご自分で改善して適切なRulesプロンプトを設定するのが良いと思います。

ちょっと試す

CursorにはAgentの実装モードの他にAskモードがあるので最初にドキュメント内容の理解のために会話しておきましょう。このモードは実装用ではなくて内容の理解用に使います。

フロントエンドのAPI接続なしのモックを作成しようと場合どうなるかも
コンテキストに含めた画面設計書や機能設計書から確認できます。

このようにAIと会話しながら実装計画を詰めていきyamlでの実装計画をお願いしてみました。

そうするとUser Rulesで予め仕込んでいた通りの動作が始まります。


ユーザーがタスク計画の作成を依頼したら

① 要件定義書・設計書を確認
② 実装に必要な情報を整理
③ 依存関係や影響範囲を分析
④ 実装対象ファイルを洗い出す
⑤ 実装計画を構造的に記述した task.yaml を作成し、Prompt_yaml に保存


次回へ

このような流れができたのでこれからtask_yamlをコンテキストに用いた実装を試してみたいと思います。タスク管理アプリぐらいなら普通に自然言語プロンプトで開発した方が早いとは思いますが😅

Discussion