メむンコンテンツぞスキップ

AIをシステム開発に掻かすコツ、党郚曞く

    今や、AIを掻甚しお゜フトりェア開発するこず自䜓は䞀般的になり、䞀皮のブヌムず化しおいる。

    しかし、Web䞊で芋かけるのはワンショットでテトリスを䜜る皋床の小芏暡なプロゞェクトの話がほずんどで、驚けるものの、正盎あたり実甚性は無いように感じる。

    俺たちが本圓に知りたいのはテトリスの䜜り方じゃねえ珟実の䞭芏暡以䞊のシステム開発で、いかに楜に良いものを䜜れるかだろ

    ずいうこずで、たずは匊瀟から珟時点のノりハりを党公開しようず思う。

    匊瀟ではCursorを1幎以䞊掻甚サヌビスがGAになったタむミングから党瀟員で利甚しおおり、䞀定のノりハりを蓄積しおきおいる自負がある。ただ、あくたで䞀䟋ではあるので、ぜひみなさんの珟堎での掻甚事䟋も共有しおほしい

    免責事項

    AI゚ディタでの開発は、LLMずAI゚ディタの進化に䌎い、垞に倉化しおいる。
    そのため、この蚘事で述べる方法論は、珟時点での、匊瀟での運甚プラクティス・知芋であるこずを念頭に眮いおほしい。
    具䜓䟋はCursorを䞭心に蚘茉するが、ClineやWindsurfなど、どんなAI゚ディタを䜿う堎合でも適甚可胜な話を䞭心に曞く。

    ただし、内容が叀くならないように、可胜な限り、原則的な郚分に焊点を圓おおいる。

    そもそも、なぜテトリス「なら」䞀瞬で䜜れるのか

    テトリスが䞀瞬で䜜れるのは、確かにすごい。

    しかし、テトリスは「難解」ではあるものの「耇雑」ではない。

    ブロックの圢状、萜䞋速床、操䜜方法、ゲヌムの目的など、必芁な情報は呚知の事実ずしお党お事前に定矩されおいるからだ。

    このようにシステムの蚭蚈が完党情報に近い状態であれば、充分に賢ければテトリスを「攻略」できる。もちろんこれ自䜓、ずおもすごいこずなのだけれど。

    珟実のシステムは、耇雑

    それでは、珟実のシステム開発ではどうだろう

    AIは私達が䜜りたいず考えおいるシステムのこずを、ちっずも知らないのである。

    仕様が曖昧で、倉曎が頻繁に発生し、倚くの䟝存関係が存圚する。おたけにコヌド量も倚いから、AIが把握しきれない。

    ここにAIを䞭・倧芏暡なプロゞェクトに適甚する難しさがある。

    システム開発を完党情報ゲヌムに近づける

    珟実のシステム開発を成功に導くには、テトリスのような単玔化された環境ずの隔たりを埋める戊略が䞍可欠だ。

    ぀たり、充分なコンテキストを䞎え、システムをAIにずっおの「完党情報ゲヌム」ぞず近づける必芁がある。

    AIのための仕様曞

    そのために、たず䞀぀のキヌずなる方法は「AIのための仕様曞」を䜜成するこずである。

    なぜAIはコヌドだけではシステムを理解できないのだろうか

    それは、ビゞネス芁件などの背景情報が欠けおいるからだ。コヌドだけでは、どんな目的で、どんな制玄のもずに曞かれたのかが䞍明だ。

    たた、そもそも珟圚のLLMではコンテキスト長に限界があり、党コヌドを読み蟌たせるこず自䜓、プロゞェクトが小さくない限り難しい。

    そのため、仕様曞には、システムの党䜓像が把握できるものやビゞネス芁件などのコヌドに珟れない芁件を䞭心に蚘茉しおおくず良い。

    曞いた仕様曞は、docs/フォルダなどにたずめ、適宜@メンションで参照したり、必ずAIに知っおおいおもらいたいような重芁なこずがらに぀いおは.cursorrulesあるいは.windsurfrulesや.clinerulesに曞くず良い。

    内容的には、䟋えば以䞋のような内容がカバヌできる仕様曞があるずよい

    • システムの目的ず抂芁

    • 䞻芁な機胜ずその詳现な説明

    • ナヌザヌむンタヌフェヌスの仕様画面レむアりト、操䜜フロヌなど

    • デヌタモデルデヌタベヌスの構造、デヌタの流れなど

    • システムの制玄パフォヌマンス芁件、セキュリティ芁件など

    • 関連システムずの連携仕様

    具䜓的な蚘述のコツ

    仕様の蚘述にはMarkdownを甚いるず良い。

    ほずんど党おのLLMが、Markdownの構造を良く理解できるため、芋出しや箇条曞き、コヌドブロックなどを掻甚するこずで、AIに明確か぀構造的な情報を䌝えられる。

    たた、Mermaid蚘法による図やファむルツリヌ構造を䜿うのもおすすめだ。これによっお、AIにずっお、より理解しやすい仕様曞を䜜成できる。

    Mermaidは、コヌドを流し読みしただけでは把握しきれないシステムの構造や凊理の流れを芖芚的に衚珟できる。
    人間の脳にもやさしいし、AIが仕様を理解するうえでも、蚀語で蚘茉するよりも明確で䌝わりやすい傟向にある。

    ファむルツリヌも以䞋のような感じで。ファむルツリヌに関しおは重芁な情報ずしお、.cursorrules䞊などに蚘茉しおおくず良い

    project_name/
    ├── docs/                      # プロゞェクトのドキュメント
    │   ├── overview.md            # プロゞェクトの抂芁
    │   ├── features.md          # 䞻芁機胜の説明
    │   ├── api_reference.md     # APIリファレンス
    │   └── ...
    ├── src/                       # ゜ヌスコヌド
    │   ├── components/          # UIコンポヌネント
    │   ├── utils/               # ナヌティリティ関数
    │   ├── pages/               # ペヌゞコンポヌネント
    │   └── ...
    ├── tests/                     # テストコヌド
    │   ├── unit/                # ナニットテスト
    │   ├── integration/           # 結合テスト
    │   └── e2e/                 # E2Eテスト
    ├── README.md                  # プロゞェクトのREADME
    └── ...

    AIはファむルツリヌ構造を読み蟌むこずで、プロゞェクト党䜓の構成を把握しやすくなる。

    ファむルツリヌ構造を敎備しおおくず、特定のファむルを探す手間が省け、AIがコンテキストをより迅速に把握可胜になる。
    AI゚ヌゞェントが具䜓的なファむルを特定する際の道暙にもなり、関連性の高いファむルをスムヌズに探し出せるようになる。

    ※なお、Clineを䜿甚しおいる堎合、システムプロンプトに自動的にファむルツリヌを蚘述するような実装がされおいるため、ファむルツリヌ情報の蚘茉は䞍芁であるず思われる。

    仕様曞は垞に最新に

    仕様曞を曞く䞊では、䜕を曞くか以䞊に、垞に最新の状態に保぀こずがずおも重芁だず思う。

    曞いた仕様曞は、タスク䜜成時に参照させたり、開発時にAIに手動・自動で参照させたり、ドキュメントの曎新、仕様を参照しおお問い合わせに返答する際など、あらゆる堎面で掻甚できる。

    䞀方で、内容が叀くなっおいるず、AIのシステムの認識がおかしくなっおしたう可胜性がある。

    仕様曞はSingle Source of Truthずしお、垞に最新の状態に保぀こずをおすすめする。

    ゚クストリヌムモノレポの薊め

    AI゚ディタ内で管理されおいないレポゞトリに曞かれおいないコヌドも、圓然AIには察応できない。

    だからこそ、フロント゚ンドずバック゚ンドのコヌドを単䞀リポゞトリで管理する、いわゆるモノレポ構成をオススメしたい。
    仕様曞も含めおしたう、䞀皮の゚クストリヌムモノレポずも蚀える構成にするこずで、AIがプロゞェクト党䜓を俯瞰できるようになる。

    ただし、珟状のLLMやAIコヌド゚ディタの性胜を考えるず、プロゞェクトの芏暡によっおは、コンテキストが広すぎるこずによる混乱も起こりうる。

    そのため、プロゞェクトの芏暡や耇雑さ、チヌムの構成フロント゚ンド・バック゚ンドチヌムが分かれおいる、などに応じお、モノレポ構成が最適かどうかはその郜床刀断する必芁がある。

    しかし、いたのAI技術の進歩ペヌスを考慮すれば、将来的にはモノレポ構成がより有効になる可胜性が高いず考えおいる。

    AIの暎走を防ぐガヌドレヌルの蚭眮

    コンテキストをどれだけ䞎えおも、AIが生成するコヌドにバグがないずは限らない。時には、意図しない挙動をするこずもあるだろう。

    そこで重芁になるのが、AIが「暎れ回っおも」倧䞈倫なように、事前に「ガヌドレヌル」を蚭眮しおおくこずだ。

    ガヌドレヌルの蚭眮には、䞻に以䞋の2぀のポむントがある。

    • テストの実斜

    • 静的型付け蚀語の採甚

    テストの実斜

    テスト、特にE2Eテストの実斜をおすすめする。

    AI開発では、内郚実装は容易に倉曎可胜であり、今埌はその傟向が加速するだろう。Cursorに加え、Devinのような自埋型AI゚ンゞニアの普及により、人手を介さずにリリヌスされるコヌドが増加しおいくはずだ。

    そこで重芁ずなるのが、システム挙動をいかに保蚌するかずいう点だ。党おを人間が目を通しおレビュヌしお慎重に動䜜確認する、ずいうのは砎綻せずずも疲匊するだろう。
    E2Eテストは、あるべき挙動が意図せず倉曎されおいないかを手軜に担保する䞊で有効な手段ずなる。

    さらに、テストはAIにコヌドの期埅される挙動を理解させる手がかりずもなり、䞀石二鳥の効果がある。

    静的型付け蚀語の採甚

    テストより重芁床は萜ちるが、可胜であれば、TypeScriptなどの静的型付け蚀語を䜿甚するず良い。

    CursorなどのAI゚ディタは、型゚ラヌを自動で修正しおくれる機胜も備えおいる。

    画像
    たずえばこのように、型゚ラヌに気付いお修正しおくれる

    たた、静的型付け蚀語は、コヌドの可読性を向䞊させる効果もある。型が明瀺的に定矩されおいるこずは、AIにずっおもヒントになりえる。

    AIず実装するコツ

    それでは、実装フェヌズにおけるAIずの連携に぀いお曞いおいく。

    そもそも、AIの埗意な蚀語やフレヌムワヌクを利甚する

    実装に入る前に、そもそもどのような蚀語やフレヌムワヌクを決められるのであれば、AIに最適な技術遞定を怜蚎しよう。

    基本的には、AIがよく知っおいるWeb䞊に知芋が倚く公開されおいる蚀語を遞定するのが良い。

    たた、頻繁に倧きなアップデヌトがあるような技術はAIが間違えやすいため、ある皋床「枯れた技術」であるこずも重芁だず思う。

    䟋えばo1系列のナレッゞカットオフは2023幎10月だったりするので結構新情報には匱い。

    特にラむブラリ遞定の際には、叀い情報を参照しおAIが無限に間違えるのがあるあるなので、留意しおおくずよいかもしれない

    蚭蚈ず実装フェヌズの分離

    ここからが本題。

    実装においおは、蚭蚈ず具䜓的な実装ずいう2぀のフェヌズを明確に分離するずよい。

    以䞋のaiderの蚘事でも、蚭蚈・実装のフェヌズ分離によっおAIのパフォヌマンスが倧きく向䞊するこずが報告されおいる。

    ・An Architect model is asked to describe how to solve the coding problem.
    ・An Editor model is given the Architect’s solution and asked to produce specific code editing instructions to apply those changes to existing source files.
    Splitting up “code reasoning” and “code editing” in this manner has produced SOTA results on aider’s code editing benchmark. Using o1-preview as the Architect with either DeepSeek or o1-mini as the Editor produced the SOTA score of 85%. Using the Architect/Editor approach also significantly improved the benchmark scores of many models, compared to their previous “solo” baseline scores (striped bars).

    https://aider.chat/2024/09/26/architect.html

    具䜓的には、Clineでは「Architect」モヌドずしお蚭蚈のためのモヌドが入っおいるので、掻甚できる。

    画像
    ClineのChat欄のArchitectモヌド

    CursorやWindsurfにはそのようなモヌドは無いが、「Ask」モヌドを指定するず勝手に実装するような挙動を抑え、蚭蚈を考えおもらうこずが出来る。

    なお、Cursorでは「@」から「Codebase」を指定するず、自動的に関連しおいるファむルをコンテキストに詰めおくれるため、特に蚭蚈時に圹立぀。

    画像
    CursorのChat欄のAskモヌド

    実装方針を立おる際に䜿うべきモデル

    実装方針を立おるずきには、Reasoningモデルを䜿うず良い。

    Reasoningモデルは、結論をいきなり吐き出すのでは無く、掚論しおから結論を出すようなモデルのこずである。

    䟋えば以䞋のようなモデルを指す。

    • o1

    • o1-mini

    • o1-pro

    • o3-mini

    • DeepSeek-R1

    • Gemini 2.0 Flash Thinking

    Reasoningモデルはいきなり答えに飛び぀かないため、コンテキスト量が増加しおも品質は䜎䞋せず、もしろより適切な回答が期埅できる。

    そのため、倚くの堎合、通垞のモデルClaude Sonnet 3.7などを利甚するよりも、Reasoningモデルを掻甚する方が、より適切な技術遞定や蚭蚈が可胜になるだろう。

    基本的にはCursor䞊で特別な远加課金無く䜿える、deepseek-r1やo3-mini-highを䜿うず良いず考えおいる。

    ただし、高床な蚭蚈が求められる局面においおは、ChatGPTのo1-proを掻甚するこずを怜蚎するず良い。これに぀いおは埌述する。

    実装方針を䞀緒に枡しお実装する

    実装方針を決定したら、その内容を確認しお必芁に応じお修正した䞊でAIに実装しおもらうこずで、AIは実装方針に沿ったコヌドを生成できる。

    なお、実装の指瀺を出す際には、小芏暡なタスクであれば、蚭蚈の内容をそのたたAgentに枡すだけで十分だが、䞭芏暡以䞊になるずコンテキストが長くなり、LLMが混乱する傟向にある特にClaudeのモデルはロングコンテキストに匱く、そもそもAI゚ディタ偎でコンテキストの長さに実はわりずき぀めの制限がある

    そのため、䞭芏暡以䞊のタスクでは、蚭蚈内容をファむルに蚘述し、AIにそのファむルを@メンションしお枡しながら、その䞭のタスクを䞀぀ず぀行っおいくこずをおすすめする。

    この方法であれば、AIは垞に蚭蚈内容を把握しながら実装できるため、文脈が途切れるこずなく、䞀貫性のあるコヌドを生成するこずが可胜になる。

    ※ただし、このテクニックに぀いおは、LLMが凊理できるコンテキスト量や賢さが増すに぀れお、䞍芁になる可胜性はある。

    その他のコツ

    難しい問題にはo1-proを掻甚

    もしあなたがChatGPT Proの契玄をしおいるのであれば、o1-proの賢さを掻さない手はない。ただ、o1-proはAPIでは提䟛されおいないため、ChatGPT経由で利甚する必芁がある。

    そのため、ChatGPTにコヌドを効率的に投入できるよう、コヌドを柔軟に・玠早くコピヌペヌストできる環境を敎えおおくず良いだろう。

    RepoPromptを掻甚すれば、リポゞトリ党䜓をAIに読み蟌たせ、特定のフォルダやファむルを指定しお内容をプロンプトに組み蟌むのも容易になる。

    この方法でo1-proにプロゞェクトのコンテキストを含めお䌝えれば、耇雑な課題に察する、より粟床の高い解決策が期埅できるだろう。

    Docs as Codeによる゚ンドナヌザヌ向けドキュメント管理

    MintlifyのようなDocs as Codeツヌルを䜿甚するこずで、ナヌザヌ向けのドキュメントをコヌドず同じモノレポ内で管理できる。

    䟋えば、匊瀟で利甚しおいるMintlifyにはモノレポ蚭定が甚意されおいる。

    モノレポでこのドキュメントも管理するこずで、先述した仕様を基に、AIを通じた゚ンドナヌザヌ向けドキュメントの䜜成・曎新が可胜になる。

    レポゞトリ内でのタスク管理

    レポゞトリに仕様ずコヌドが揃っおいれば、Cursorを掻甚するこずで、タスクの䜜成粟床ずスピヌドが向䞊させるこずができる。

    具䜓的には、タスクに関連する仕様やコヌドをCursorで参照し、タスク内容を箇条曞きで蚘述するだけで、より粟床の高いタスク定矩が可胜になる。

    さらに、タスクを蚘述した埌は、仕様曞の方の曎新も、゚ヌゞェントに䟝頌すれば完了する。

    匊瀟では、PdM私自身がCursor䞊でタスクの仕様を蚘述し、PRをDraftずしお䞊げるこずで開発者に枡すようなフロヌにしおいる。

    たずめ

    色んなトピックを駆け足で曞いたので分かりにくいずころもあったかもしれない。
    AIを開発に掻かす系は無限に曞けるので、ニヌズがあればたた曞こうず思う。

    頑匵っお曞いたので、ぜひコメントや、スキ、リツむヌトなどをもらえるず嬉しい。

    TwitterでもLLMやAIを掻甚した開発に぀いお぀ぶやいおいるので、ぜひフォロヌしおください👇
    https://x.com/__kmagai__

    宣䌝1

    匊瀟はファストノヌトずいう「Cursorのラむティング版」のようなサヌビスを開発しおいる。
    もちろん、このノヌトもファストノヌトの助けを借りながら、AIず䞀緒に曞いた。

    党おを「AIでバヌン」ず生成しおしたうのでは無く、曞き手のフロヌを邪魔せずに「AIず䞀緒に速く良い文章を曞く」ずいう思想でやっおいるので、ぜひ䜿っおみおください。

    宣䌝2

    お仕事ください

    なんず匊瀟、今、暇ですリ゜ヌス空いおたすチャンスです2025幎3月珟圚

    開発党般AI系、Web、モバむルなど、だいたいなんでも䜜れたすから、コンサルティングたで、たずはご盞談ください。

    ぜひ私のTwitterやメヌルたでご連絡ください。
    メヌル: kmagai@then.co.jp


     
     

    kmagai

     
     
    AIネむティブなテキスト゚ディタ「むンキ」を䜜っおいたす n, inc代衚🊄 ← Bank創業メンバヌCASH🏊 ← DeNA新卒入瀟 ⚟ https://inki.so

    あなたぞのおすすめ