Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Copilot Agentを普段使いしてわかった、バックエンド開発で使えるTips
Search
ykagano
June 17, 2025
Technology
1
1.5k
Copilot Agentを普段使いしてわかった、バックエンド開発で使えるTips
2025/06/13 BASE株式会社 AI勉強会 発表資料
ykagano
June 17, 2025
Tweet
Share
More Decks by ykagano
See All by ykagano
プレイングマネージャーになったときの話
ykagano
2
1.4k
WEBエンジニアが知っておきたい決済の仕組み
ykagano
2
3.6k
プロジェクトにおけるリーダブルコードの考え方
ykagano
2
2.1k
GWにスマートスピーカーアプリを作ってみた
ykagano
1
1.2k
開発効率を上げるSwaggerの話
ykagano
0
1.4k
Other Decks in Technology
See All in Technology
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
380
マネジメントって難しい、けどおもしろい / Management is tough, but fun! #em_findy
ar_tama
7
1.1k
敢えて生成AIを使わないマネジメント業務
kzkmaeda
2
450
Delegating the chores of authenticating users to Keycloak
ahus1
0
140
Beyond Kaniko: Navigating Unprivileged Container Image Creation
f30
0
130
Enhancing SaaS Product Reliability and Release Velocity through Optimized Testing Approach
ropqa
1
230
ゼロからはじめる採用広報
yutadayo
3
950
LLM時代の検索
shibuiwilliam
2
160
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
960
Core Audio tapを使ったリアルタイム音声処理のお話
yuta0306
0
190
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
160
Sansanのデータプロダクトマネジメントのアプローチ
sansantech
PRO
0
160
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Balancing Empowerment & Direction
lara
1
430
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Rails Girls Zürich Keynote
gr2m
95
14k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
It's Worth the Effort
3n
185
28k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
BBQ
matthewcrist
89
9.7k
Transcript
© 2012-2025 BASE, Inc. 2025/06/13 AI勉強会 Copilot Agentを普段使いしてわかった、 バックエンド開発で使えるTips 1
© 2012-2025 BASE, Inc. 2 氏名:加賀野 祐(ykagano) 所属:Cartチーム 業務:バックエンド エンジニア 趣味:お酒、旅行、キャンプ
BASEは2024年8月入社です 入社前は以下の決済サービスを開発してました - 2009年〜:NET CASH - 2012年〜:WebMoney - 2017年〜:Yahoo!ウォレット、PayPay ykagano 自己紹介
© 2012-2025 BASE, Inc. アジェンダ 3 • Copilotの使い方 • coding
• unittest • コード生成のおすすめ • 伝えたいこと
© 2012-2023 BASE, Inc. Copilotの使い方 4
© 2012-2025 BASE, Inc. IDEでの使い方 5 以前はPHPStormで手動コーディングしてましたが、今は以下のように使ってます ▪PHPStorm Ask Modeで質問をして、手動コーディングしてます
▪VSCode CopilotにVibe Codingしてもらった後、PHPStormで手動実装して仕上げてます PHPStormでもAgent Modeは使えますが、VSCodeほどCustom Instructionsの仕様が洗練されていないのと VSCodeだと Claude Sonnet 4 が使えるためです(PHPStormでは使えない)
© 2012-2025 BASE, Inc. Custom Instructionsで前提情報を与える 6 backendリポジトリにはCustom Instructions(前提情報)ファイルがあります -
copilot-instructions.md - 自動で読み込まれる前提情報です。プロジェクトの概要など汎用的な内容を記載しています - coding.instructions.md - ガイドラインに沿って実装します - unittest.instructions.md - Cartのガイドラインに合わせた単体テストが実装できます - codereview.instructions.md - GitHubのMCPサーバーと連携して観点に沿ったコードレビューをします 今日はこちらの coding と unittest でのCopilot Agentへの指示について話します Custom InstructionsについてはVSCodeのドキュメント参照 https://code.visualstudio.com/docs/copilot/copilot-customization
© 2012-2023 BASE, Inc. coding 7
© 2012-2025 BASE, Inc. codingのプロンプト例 8 # タスクの概要 〇〇の下記コードによる判定が、複数のクラスから使用される処理のため、共通クラスに切り出したいです ##
要件 - 関連する既存コードを確認した上で実装してください - /{パス名}/ に作成してください - まずfeatureNameを定義するenum定義のNewFeatureNameクラスを作成してください - 次に判定を行うDecideNewFeatureAvailableShopServiceクラスを作成してください - userIdとfeatureNameを受け取って判定結果を返すようにしてください ## 制約条件 - 新規クラスの作成のみで影響するコードは修正しないでください ## 関連情報 以下、該当コード # タスクの概要 ## 要件 - ## 制約条件 - ## 関連情報 テンプレート
© 2012-2025 BASE, Inc. codingのデモ動画(約2分) 9 ▪自動読み込み coding.instructions.md のヘッダには「applyTo: "**/*.php",
!**/*Test.php"」と書いて ます これがあると読み込んでく れます ▪並行作業 下のディスプレイでコード を生成している間に 上のディスプレイで他の実 装をしたり別の作業をした りしています ▪関連ファイル 今開いているファイルは自 動的に読み込まれます それ以外の関連ファイルは コンテキストから事前に与 えておくとCopilotが読みに 行かないので効率的です ▪AIにまかせる 指示した後、自分が他の作 業をしている間にAIが進め てくれるため、実装の ファーストステップはAIに まかせましょう 動画は割愛します 🙏
© 2012-2025 BASE, Inc. この後更に指示をします 10 # タスクの概要 以下の修正を行ってください ##
要件 - NewFeatureNameはcaseの定義のみにしてください、メソッドは不要です - DecideNewFeatureAvailableShopServiceはisFeatureAvailableメソッドをhandleにrenameしてください - handleメソッド以外は削除してください ## 制約条件 - 指示された修正以外は行わないでください ここまで修正したら後は自分で修正します # タスクの概要 ## 要件 - ## 制約条件 - ## 関連情報 テンプレート
© 2012-2023 BASE, Inc. unittest 11
© 2012-2025 BASE, Inc. unittestの対象クラス 12 /** * 新機能利用可能ショップの判定を行うサービスクラス */
class DecideNewFeatureAvailableShopService { public function __construct( private ShopRepositoryInterface $shopRepository, private NewFeatureAvailableShopRepositoryInterface $newFeatureAvailableShopRepository, ) { } /** * 指定されたユーザーIDと機能名で、機能利用可能か判定する */ public function handle(UserId $userId, NewFeatureAvailableShop $featureName): bool { $shop = $this->shopRepository->findOrFail($userId->toInt()); return $this->newFeatureAvailableShopRepository->haveShop($shop->getShopId()->toString(), $featureName->value); } }
© 2012-2025 BASE, Inc. unittestのデモ動画(約2分) 13 ▪LLM Claude 3.7 Sonnetを使っ
ているのは、Claude Sonnet 4の推論が強く、 テストが通らない時にどこ までも原因を調査したり、 テストをスキップする実装 をしたからです ▪テストが通らない場合 途中で止めてください 止めた後、具体的な修正内 容を指示するのも良いと思 います ▪プロンプト例 〇〇クラスを検証する 〇〇Testクラスを 作成してください、 とこれぐらいシンプルな 指示で大丈夫です ▪自動読み込み unittestはヘッダに applyToを書いても読み込ん でくれないことがあります そのため、最初に手動で指 示ファイルに追加してます 動画は割愛します 🙏
© 2012-2023 BASE, Inc. コード生成のおすすめ 14
© 2012-2025 BASE, Inc. Copilotが有料化予定です 15 1アカウントの1月あたり 300プレミアムリクエストです 右図はプレミアムリクエストの 係数です
GPT-4.5だと係数が50のため 6回しか指示できません https://docs.github.com/ja/copilot/managing-copilot/monitoring-usag e-and-entitlements/about-premium-requests
© 2012-2025 BASE, Inc. Agent Modeで1〜3ファイルずつ生成する 16 Copilotが有料化することもあってあまり無駄撃ちはできなくなりました また複数ファイルを編集してもらうと、望んでいた実装とは違う実装がされてしまった場合に 取り戻すことが難しくなります(再実装はできますが・・・)
そのため、ある程度小さい単位で1〜3ファイルずつ生成するのが良いと思います 1〜3ファイルの生成でもAgentは関連するファイルを確認した後、実装するため、 複数回のプレミアムリクエストが実行されていると思います ロケットの放物線がちょっとずれただけで 到達点が大きく変わってしまう画像
© 2012-2023 BASE, Inc. 伝えたいこと 17
© 2012-2025 BASE, Inc. ご確認 18 backendリポジトリで Custom Instructionsを使っている方 挙手お願いします
Meetの挙手ボタンを押してください
© 2012-2025 BASE, Inc. 最後に 19 Copilot Agentを スタンダードに利用できるよう Custom
Instructionsの精度向上に ご協力お願いします🙏 PRお待ちしてます!
© 2012-2023 BASE, Inc. Appendix 20
© 2012-2023 BASE, Inc. 現在のCustom Instructionsの 主な指示 21
© 2012-2025 BASE, Inc. coding.instructions.md の主な指示 22 - 基本的なガイドラインに準拠 -
PSR12準拠 - PHP CodeSnifferのルールに準拠 - 新規ファイルと既存ファイルでルールを分けています - 既存ファイルを修正する場合 - 既存のコードのトーン&マナーに合わせてください - 新規ファイルを作成する場合 - 既存のコードのトーン&マナーに合わせないでください
© 2012-2025 BASE, Inc. unittest.instructions.md の主な指示 23 - Cartのユニットテストのガイドラインに準拠 -
arrange, act, assertionを記載する - DataProviderを用意するときはケース毎にメッセージを設定する - Assert、Mockの書き方 - 基本的にはAssertSameを使用する - プライベートメソッドはMock化しない、Mockは共通化する、等 - テストコードの作成後、テストを実行する - 実行結果が失敗していれば修正する
© 2012-2025 BASE, Inc. codereview.instructions.md の主な指示 24 Ogaさんが作ってくれました コードレビューの手順 1.
まずは変更が加えられたファイルの一覧を確認してください。 2. 次に変更差分を取得して、どのような対応がされているかを解説してください。 3. 変更差分について、以下の「コードレビューの観点」の項目について◦△×で評価して表にしてください。 4. テストクラスに実装されているテストケースを列挙してください。不足しているテストがあれば指摘してくだ さい。 5. 特に解説が必要な項目について、詳細な説明と改善案を提案してください。 6. 修正を加えたファイル全体を通してリファクタリングする余地があれば、その具体実装を提案してください。
© 2012-2023 BASE, Inc. プロンプトエンジニアリング 25
© 2012-2025 BASE, Inc. プロンプトエンジニアリング 26 Anthropicの開発者ガイドにプロンプトエンジニアリングについて記載がありますので 興味がある方は一読ください https://docs.anthropic.com/ja/docs/build-with-claude/prompt-engineering/overview またプロンプトエンジニアリングのチュートリアルも公開されています
https://github.com/anthropics/prompt-eng-interactive-tutorial チュートリアルの説明はNotebookLMにも入れましたので、こちらで大枠は掴めます https://notebooklm.google.com/notebook/3f62bc0d-6323-4f36-80ea-a940a87348b0
© 2012-2025 BASE, Inc. 参考:NotebookLMでのチュートリアルの概要 27
© 2012-2025 BASE, Inc. Custom Instructionsの今後 28 以下検討中です(現在は汎用的な内容にするためやっていない部分も) - 役割を割り当てる
- 優秀なバックエンドエンジニアとか - 熟考させ、かつ思考の過程を声に出させる - 処理に時間がかかりそう - Custom Instructionsをスリム化する - 特にunittestが雑然としてきているのでスリム化したい
© 2012-2023 BASE, Inc. プロンプトジェネレータ 29
© 2012-2025 BASE, Inc. プロンプトジェネレータ 30 Anthropicがプロンプトジェネレータを公開しています(要課金) https://docs.anthropic.com/ja/docs/build-with-claude/prompt-engineering/prompt-generator やってもらいたいタスクを入力すると、効果的に指示するためのプロンプトを生成してくれます
© 2012-2025 BASE, Inc. プロンプトジェネレータ 31 ここで例に上げた指示の一部で生成してもらいました 「〇〇の下記コードによる判定が、複数のクラスから使用される処理のため、共通クラスに切り出したいです」 あなたは、〇〇 クラスのコードの一部をリファクタリングすることを課せられています。
目標は、複数のクラスで使用される共通のロジックを、再利用可能な別のクラスに抽出することです。 以下の手順に従って、タスクを完了させてください: 1.まず、〇〇 クラスの以下のコード・スニペットを調べます: <code_snippet> {{CODE_SNIPPET}} </code_snippet> 2.コードを分析し、複数のクラスで使用されていると思われるロジックを特定します。 条件文、計算、データ変換など、一般的で広く適用できそうなものには特に注意してください。 3.分析に基づいて、再利用可能なロジックをカプセル化する新しい共通クラスを設計します。 以下のことを考慮する: - 目的を反映した適切なクラス名を選択する。 - このクラスに含めるべきメソッドを決定する - これらのメソッドが受け取るべきパラメータを決める - これらのメソッドが返すべきものを考える 4.特定された共通ロジックを新しいクラスに移動して、元のコードをリファクタリングする。 新しいクラスが自己完結型で、 CreateOrderUseCase の特定の実装の詳細に依存しないことを確認します。 5.リファクタリングのプロセスについて説明してください: - コードの特定の部分を抽出することにした理由 - 新しい共通クラスがコードの再利用性をどのように向上させるか。 - この新しいクラスを使用する際の潜在的な課題や考慮事項があれば教えてください。 6.リファクタリングされたコードを提供してください: - 新しい共通クラス - 共通クラスを使用するようになった、更新された 〇〇 クラス (またはその関連部分 ) 7.他のクラスがこの新しい共通クラスをどのように使用するかの例を示し、その再利用性を示す。 以下の形式で回答してください: <analysis> コードの分析と再利用可能なロジックの特定 </analysis> <refactoring_explanation> リファクタリングプロセスの説明 </refactoring_explanation> <refactored_code> 新しい共通クラスと更新された CreateOrderUseCaseコード </refactored_code <usage_examples> 他のクラスが新しい共通クラスをどのように使うかの例 </usage_examples> リファクタリング中は、以下のコンテキストを考慮することを忘れないでください: <context> {{CONTEXT}} </context> コード修正のプロンプトもこれぐらい書くのが理想的なのかも