Upgrade to Pro — share decks privately, control downloads, hide ads and more …

新規案件の立ち上げ専門チームから見たAI駆動開発の始め方

 新規案件の立ち上げ専門チームから見たAI駆動開発の始め方

【AI駆動開発フェス!】DevelopersIO2025オンライン で登壇した資料です

・セッション概要
リテールアプリ共創部「マッハチーム」では、新規案件獲得とアプリ開発の立ち上げ(1stリリースまで)を専門に行なっています。 本セッションでは、AI駆動開発を始めたいと思っても何から始めたらいいかわからない方、AIを開発に取り入れてみたが思うように生産性が上がらずに困っている方に向け、0->1の新規プロジェクトをAI駆動で高速開発するためにスプリント0でどんな準備をすべきか、開発に入った後にどんな課題が発生しどう乗り越えているのかについて、実際の開発現場の目線でお話しします。

Avatar for ShuyaKinjo

ShuyaKinjo

August 29, 2025
Tweet

More Decks by ShuyaKinjo

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 2 ⾦城秀哉(Shuya Kinjo) • 所属 ◦ リテールアプリ共創部マッハチーム • 役割

    ◦ サーバーサイドエンジニア • 興味‧関⼼ ◦ ⽣成AI、AI駆動開発 ◦ Dev tools(IaC, CI/CD) • 好きなAIコーディングエージェント ◦ Cursor Agent、 Claude Code @joe-king-sh
  2. Cursorの主要機能 18 1. Cursor Tab a. 挿⼊するコードの先読み補完だけでなく、カーソル 周辺、離れた箇所の変更‧削除についても提案 2. インライン編集(Cmd+K)

    a. 選択範囲やファイルに対して直接細かな指⽰出し 3. Cursor Chat a. ⾃然⾔語でAIと対話しながら開発‧デバッグ‧調査
  3. AI⽀援型テスト駆動開発フレームワーク「Tsumiki」 28 1. 「仕様駆動」と「TDD」の思想を Claude Codeのカスタムスラッ シュコマンドとして実装 2. Gemini CLIで動かす試みも

    DevelopersIO - AI 支援型テスト駆動開発 フレームワークの Tsumiki を Gemini CLI で動かせるようにしてみた Claude Code Gemini CLI
  4. 同期型‧⾮同期型で選ぶ 30 1. 同期型の特徴 a. 1チケットをAIエージェントとペアプロして進める b. AIエージェントの仕事を細かく管理‧制御が可能 2. ⾮同期型の特徴

    a. チケットをAIに丸投げするイメージ b. AIエージェントの成果は作業が完了するまで不明 c. 複数のタスクを並列でAIに依頼可能
  5. Claude Code GitHub Actions 32 1. GitHub Actions上でClaude Codeを動かす仕組み 2.

    任意のPull RequestやIssueで@claudeメンショ ンすると、ClaudeCodeが起動する 3. Issueを元に開発からPR作成までを⾃動化した り、PRレビュー等を⾏う 4. Claudeを利⽤していると導⼊が容易
  6. 使⽤できるモデルに合わせて選ぶ GitHub Copilot Cursor Kiro Windsurf Cline Claude Code Amazon

    Q Developer Gemini CLI Devin 34 Claudeのみ Geminiのみ 柔軟に選択可能 柔軟に選択 Claudeのみ Claudeのみ
  7. どれか⼀つに絞らなくて良い 37 タスクに応じてCursorとClaude Codeを使い分け 1. Cursor ◦ AIエージェントを細かく制御したい時 ▪ 複雑な業務ロジックの実装やリファクタリング

    ◦ ⾃然⾔語で指⽰するよりも直接直した⽅が速い時 ▪ AIエージェントが書いたコードをCursor Tabで⼿直し 2. Claude Code ◦ 少し⼤きめでも雑な指⽰で完遂してくれそうなタスク ◦ Pull RequestのAIレビュー ◦ 雑作業の効率化(GitやGitHubの操作)
  8. • .cursorignore ファイル指定した対象が以下から除外 ◦ コードベースのインデックス化 ◦ Tab‧インライン編集‧Chatの編集 ◦ @シンボル検索 •

    デフォルトで .gitignore ファイルに加え、 .cursorindexignore ファ イルで指定した対象がコードベースのインデックス化から除外 ▪ セキュリティよりもパフォーマンス⽬的 アクセス範囲の制御: Cursorの場合 48 .ignoreファイルでプロジェクト毎に制限する
  9. 実⾏可能コマンドの制御: Cursorの場合 49 • Ask Every Time ◦ 全てユーザーに確認してから実⾏ •

    Use Allowlist ◦ allowリストで許可したコマンドだけ実⾏可能 • Run Everything ◦ 基本全て実⾏可能、denyリストで実⾏禁⽌コマンドを指定 Auto-RunモードでAIが⾃動実⾏できるコマンドを指定する
  10. • settings.json ◦ Git管理推奨 ◦ 事前に設定しチームで共有 • settings.local.json ◦ Git管理外

    ◦ 個⼈で管理したい設定 Claude Codeの場合 50 allow, ask, denyリストでアクセス範囲と実⾏可能コマンドを両⽅指定 { "permissions": { "allow": [ "Bash(npm run lint) ","Bash(npm run test) ", "Read(~/.zshrc)" ], "deny": [ "Bash(rm -rf)", "Read(./.env)", "Read(./secrets/**) " ] } }
  11. AIコーディングツールの料⾦プラン 53 1. APIキー利⽤ ◦ モデルプロバイダーが払い出したAPIキーを設定して使⽤ ◦ 1⽇で簡単に数⼗ドル溶けることも 2. サブスクリプション利⽤

    ◦ 定額で使い放題になるプラン ◦ ⼀部モデル、機能は追加料⾦がかかるため注意 チーム開発で⽇常的に利⽤する場合 サブスクリプション利⽤を推奨
  12. AIにコンテキストを与えやすいディレクトリ構成 61 フィーチャーベース レイヤーベース src/ ├── features/ │ ├── products/

    │ │ ├── domain/ │ │ ├── use-cases/ │ │ ├── infrastructure/ │ │ └── presentation/ │ └── orders/ │ ├── domain/ │ ├── use-cases/ │ ├── infrastructure/ │ └── presentation/ └── shared src/ ├── domains/ │ ├── entities/ │ └── repositories/ ├── use-cases/ │ ├── products/ │ └── orders/ ├── infrastructure/ │ ├── repositories/ └── presentation/ ├── controllers/ └── middleware/ VS
  13. 65 プロジェクト全体で共有するもの、個⼈で設定するものを分けて管理する AIへ与えるルールの管理⽅法 • プロジェクト全体(Git管理対象) ◦ プロジェクト全体のルール ◦ 技術スタック‧業務知識 ◦

    ガードレール • 個⼈管理(Git管理対象外 or exampleとしてコミット) ◦ エージェントの振る舞い ◦ AIコーディングスタイル ▪ こちらは個⼈でカスタマイズして使い⽅を模索していきたい
  14. 1. Rulesで事前に以下をインプット a. プロジェクトの構成や業務知識 b. 開発の進め⽅ c. mcpを利⽤したコンテキスト収集⽅法の指⽰ 2. GitHub

    Issueを指定して開発を指⽰ a. AIがGitHub Issueをmcpで取得し仕様を理解 b. AIがGitHub Wikiを確認し設計情報を取得 c. Rulesに従って開発を進める →コンテキストの取得が不安定。⼀度に⼤きいタスクを与えて⽅向性が違うと⼿戻りが⼤きい。 68 Rulesを完璧に整備しAIに⾃律的にコーディングをさせる試みは上⼿くいかず... ⼀⽅で、ルールで全てを制御しようとしない @シンボルやチャットでコンテキスト情報の補⾜や細かい指⽰出しを併⽤する
  15. 1. GitHub Copilot a. GitHub Copilotのライセンスがあればすぐに使える b. 対応⾔語に限りあり(Dartが使えなかった) 2. BugBot

    a. Cursorが提供するPRレビューサービス b. バグの検出に特化しており、サマリーなどは弱い印象 3. Claude Code Actions a. Claude CodeをGitHub Actions上で起動しPRレビューが可能 b. 導⼊しやすさ、カスタマイズ性、レビュー内容‧精度のバランスが良い c. 1レビューあたり15~20円で運⽤中 71 いくつか試してClaude Code ActionsによるPRレビューに落ち着く AIによるPRレビューツールの⽐較
  16. AI駆動開発の理想と現実 73 1. 要件定義 a. ミーティング⽂字起こし、議事録要約(Gemini) b. 説明資料‧図表作成(Mermaid、Draw.io) c. 情報収集(Perplexity、Notebook

    LLM) 2. 設計 a. ⾃然⾔語で設計書作成 i. UML、API定義、DB設計 b. 壁打ち(AI-Starter) 1. hidden 2. hidden 3. 実装 a. エージェントでコーディング b. Tab補完で⼿直し c. ⾮同期エージェント活⽤ d. AIによるコードレビュー 4. テスト a. AIによる⾃動テスト実装 b. テスト設計、仕様書作成 c. テスト⽤スクリプト‧データ⽣成 全ての⼯程でAIを駆使して爆速開発できると嬉しい
  17. AI駆動開発の理想と現実 74 実際はそこまで上⼿くいかない • AIが最後までタスクを完遂してくれない ◦ 途中までいい感じで進むが諦める ◦ すぐにレートリミットに引っかかる ◦

    時には完了したと虚偽報告をしてくる • 動きはするが継続的に開発するのが困難な実装が出てくる ◦ 既存コードとの⼀貫性がない ◦ 同じようなコードが複数箇所で実装される ◦ どこからも使われないゴミが残る ◦ 必要以上の機能が良かれと思って沢⼭実装される ◦ 型エラーやLintエラーをとにかく黙らせている • AI⽣成の読みずらいドキュメントが蓄積される
  18. AI駆動開発の理想と現実 76 実務において、AI主体のコーディングスタイルが難しい要因 1. 複雑な業務要件 2. 多数のシステム間連携 3. ⼤規模なコードベース 4.

    蓄積された技術的負債 AIに適切にコンテキスト情報を与え、 AIの成果物を適切にハンドリングするスキルが必要
  19. 💡 予め計画して、認識を合わせてから実装を開始 78 Planモードを必ず活⽤する • Cursor‧Claude Code‧Clineなど各ツールには、AIにいきなりコードを書か せる前に実装計画を⽴てるモードがある(CursorだとAsk) • 実装すべき仕様、必要なコードベースのコンテキストなどを与えた後、「実装

    を進めるにあたり不明点はありますか?」を必ず聞き、作業者(AI)と指⽰者の 間で認識齟齬が無くなるまで繰り返す • 技術的な判断や、不明確な制約事項をAIエージェントが勝⼿に決めて⼿戻りが 発⽣することを防ぐ
  20. 💡 計画‧タスクをチャットセッションの外部にアウトプッ ト 79 Claude CodeやCursorも内部でTODOリストを管理している 外部であえて持つ理由は以下 • 別のセッション開始時にコンテキストをマニュアルで引き継げる •

    実装計画をAIと指⽰者で共同編集できる ◦ AIが出した設計やTODOを直接書き換えて細かい指⽰を出し永続化する ◦ コーディング中に後から対応したいタスクを積んでおく Planで練った計画やタスクをMarkdown形式で外部にアウトプットする
  21. 💡 頻繁に新しいチャットに切り替える 80 • ⻑いセッションでは定期的に履歴の要約が⾛るので最初に与えた重要な指⽰が薄まる • 以下のような不要なコンテキストを除外できる ◦ 機能A実装→機能B実装→失敗/削除→機能B再実装→失敗/削除→機能C実装 •

    ⼩さい変更を都度レビュー→最終的なAIコーディングレビューが楽に ◦ AIが書きがちな品質の悪いコードを⾒落としにくくなる • 前のセッションで何をしたかは、前の会話の要約と、外部に保存したMarkdownファイ ルを与えて共有する 変更を⼩さい単位に分割し、新しいチャットで⼩さく作る
  22. 💡 @シンボルをフル活⽤する 81 • 特定のファイル/ディレクトリ、ターミナルやWebサーチ、予めインデックスしておい たドキュメントなど、@シンボルを利⽤してAIに与えられるコンテキストは多岐に渡る • 複雑な業務要件を、⼤規模なコードベースに対して実装するには、⾯倒でも細かい指⽰ を出す必要がある •

    Rulesファイルを頑張って整備するよりもこちらの⽅が成果が出ている • 今後はAIにコンテキストを与えやすいプロジェクト構成を採⽤する ◦ 例)技術関⼼カットのディレクトリ構成からドメインカットのモジュラーモノリスへ @や#などのシンボルを⽤いて明⽰的なコンテキスト情報をAIに提供する
  23. • AIが気を利かせて⾊々と実装してくれる。開発者も直ぐに実装できてしまうので、⼤きめの変更 の実装判断を出しやすくなる。 ◦ 「いつか必要になるかも」で作られた機能は使われず負債になる ◦ 実装者は楽でもレビュワーの負荷が⾼まる 📚 いらない機能まで実装してくる(ついついしてしまう) 85

    📚 これの何が問題か 💡これに対してできること • YAGNI(You Aren't Gonna Need It)の原則に⽴ち戻る • 本当にコードを書いて解決するべき問題か再検討する ◦ 仕様調整などで要望は満たしつつシンプルな実装にできるかも
  24. • 型エラーやLintエラーを握りつぶしている • 既存コードの書きっぷりと⼀貫性がない • どこからも使われていないコードがゴミとして残っている • やたらと多すぎるテストケース • 想像を膨らませて要件にない機能まで実装

    📚 再掲)動きはするが継続的に開発するのが困難な実装の課題 86 AIが書くコードにありがちな問題 コンテキスト管理とRulesやLintである程度低減はできるが、 最終的にはAIが書く良くないコードの癖を認識しておく必要がある
  25. • 精密なテストデータ⽣成 ◦ 最⼤⻑、最⼩⻑などの桁数データの⽣成 ▪ 微妙に桁数が⾜りないなど要件を満たせない • 細かい数値データをInputとした、モックデータやOuput検証の実装 ◦ それ「らしい」が「らしい」だけの出鱈⽬データを⽣成

    • ライブラリの単純移⾏ ◦ jest -> vitest 移⾏でコード修正は⼀瞬だが、テストが落ちる原因を深く 探索できずに失敗 (時間があれば)📚 AIで効率化できそうで意外とできなかった分野 87
  26. • AIが書いたコードは全て読み‧理解する ◦ ここを怠るとAIが⽣成するコードのレビュー負荷を、チームメンバーにオフロード することになる • わかりやすいドキュメンテーション ◦ AIが⽣成する⽂章は基本的に冗⻑で読みづらい(情報量の割に⽂章だけが⻑い) ◦

    AIで効率化はしつつも、最終的には他の誰か読むことを意識してまとめる 💡 AI駆動のチーム開発で開発者各⾃が意識したい点 88 ⾃⾝の⽣産性向上だけでなくチーム全体の⽣産性に⽬を向ける コーディングとテクニカルライティングのスキルは 今後も変わらず重要
  27. このセッションでお話ししたこと 91 1. AI駆動開発のスプリント0でするべきこと a. 使⽤するAIコーディングツールの選定 b. ガードレールの設定 c. プロジェクトのボイラープレート作成

    d. AIによるPullRequestレビューの整備 2. AI駆動開発のつまずきポイントと回避⽅法 a. 予め計画して、認識を合わせてから実装を開始 b. 計画‧タスクをチャットセッションの外部にアウトプット c. 頻繁に新しいチャットに切り替える d. @シンボルをフル活⽤する e. AIが書く良くないコードの癖を認識しておく f. 個⼈だけではなくチームの⽣産性を考慮する
  28. 97