* VSCodeで自動でsubAgent群を作ってもらいたい
以下がsubagentについてです。
https://code.visualstudio.com/docs/copilot/agents/subagents
* もしすでにsubAgentを作っていた場合は、既存のものを整理整頓して以下の内容も盛り込む
* VSCodeの設定が必要なので対応して
"chat.customAgentInSubagent.enabled": true
"chat.subagents.allowInvocationsFromSubagents": true
* 作り方の参考にしてもらいたいもの
https://zenn.dev/openjny/articles/e11450f61d067f
* Planエージェントだが、最初に計画を作成したら「GitHubCopilotの計画書」フォルダにマークダウンファイルを保存する。フォルダ無ければ作成して。
ファイル名の先頭に日付と時間を入れて。「yyyymmdd_hhmm_****.md」という感じ。
計画書を作ったら、ユーザーの承認を待つ必要はない
* さらに追加して、プランをチェック&実装スケジュールを作るサブエージェントも追加して
例えば論理矛盾とか、共通関数使った方が良いとか、実装の順番とか、実装を小分けにして成功確率を上げるとか。
このサブエージェントの指摘もPlanエージェントが作った計画書に追記していって。
このサブエージェントは毎回呼ぶようにして
* さらに追加して、上のプランをチェック&スケジュールに落とすサブエージェントが作った実装スケジュール通りに
実装エージェントに小分けにしてタスクを渡す役割を、orchestratorエージェントが行ってくれ。(サブエージェントはサブエージェントを呼べないから)
例えば文字列変換などは簡単なタスクだがファイルが大量にあると途中で止まる事例がある。その場合は小分けにして渡さないとうまくいかない。
おそらく何回も実装エージェントを呼ぶことになるのではないか。1つずつ実装させても良いし可能なら並行作業で実装でもよい。
このプロセスは毎回行うようにして。
* さらに追加して、コードを人が読みやすいようにするエージェントも追加して。
例えばコメント追加でわかりやすくするとか、適切にコード分割するとか。シュガーシンタックスが複雑すぎないかとか。
このサブエージェントは毎回呼ぶようにして
* 関係するサブエージェントに以下の視点を明確に使命として持たせて。もしSKILLとして登録したほうが良いならそうして
* YAGNI
* SSoT
* KISS
* DRY
* SOLID
* Principle of Least Astonishment
* Boy Scout Rule
* いずれのサブエージェントもplanエージェントが作る計画書の後ろに追記する形で指摘などを加えていって
* さらに追加して、人が後から直接コードを理解して触りやすくするためのリファクタを専門で行うものが欲しい。
例えば、C言語系なら共通関数はstaticにしてメンバ変数を直接使わせないことでどの変数が使われてどの変数が使われていないのかを明確にするとか、
typoを修正とか、あえてif文で囲むとか関数化することで変数の影響範囲を明確にするとか、使っていない関数やコンストラクタ、メンバ変数、冗長な変数は削除するとか、
同じような処理は共通化するとか。
このサブエージェントは毎回呼ぶようにして
* さらに追加して、「メンテナンス楽ちん設計を絶対キープ」と「メンテナンス楽ちん設計レビュー」のようにメンテナンスを最重要視するサブエージェント作って。「可読性重視」「モジュール化」「将来の自分は他人」の原則
このサブエージェントは毎回呼ぶようにして
* さらに追加して、updateということでコード修正後に新たに見つかった情報や経験をsubagentやcopilot-instructions.mdやskill.mdにも反映させる(追加・削除・修正)専門が欲しい。
* 追加:コードだけでなくsubAgent自身もレベルアップしていく感じ。subagent自身を増やしてもよいし、統合してもよい。
* 分割:また1つのmdファイルに大量に指示を書くとコンテキスト汚染が起きて精度が一気に悪くなる。
それを回避するためにできるだけサブエージェントやスキルを細かく分けてほしい。既存のものも肥大化しているなら分割を実行して。
SKILL.mdは細かく分けていないと意味がない。トークン数を大幅に下げることが目的なのだから。だからできるだけ細かく分割して。
なお、分割するためにはファイル作成の権限も必要。
* 圧縮:複数のmdファイルで同じようなこと書いていればどちらかを削除やもしくは文言を圧縮
AIに投げるトークン数削減のため、死に物狂いで不要部分や重複部分をcopilot-instructions.mdやsubagent, skill.mdから整理する。
このサブエージェントは毎回呼ぶようにして
* さらに追加して、プロダクトを最終的にお客様に納品する前のコードの整理整頓を行う、OrchestratorForClosingみたいな総指揮者を作ってほしい
不要なコメントアウトとか削除、一貫性のないエラー処理の対応、漏れているエラー処理、漏れている分岐ケースの捕捉、関数の説明ヘッダーなど。
ただしコピーライトは不要。
* さらに追加して、これは実験的な試みだが敵対的な立ち位置のレビュアーでいちゃもんをつける。執拗に穴を見つけていたぶってくる。正論でぶん殴ってくる感じ
このサブエージェントは毎回呼ぶようにして
* さらに追加して、これは実験的な試みだが以下内容を尊重するサブエージェント。
「どれだけテストコードが増えても「SQLite のテストは 9000 万行」って言い聞かせてる。」
なおテストは優先度付けがあるとベター
このサブエージェントは毎回呼ぶようにして
* さらに追加して、これは実験的な試みだがユーザー体験を気にするサブエージェント。複雑な画面、多すぎるボタン、マウスの移動量が多すぎる、面倒くさすぎる、という
ことを正直に率直に包み隠さず声高に騒ぎ立てる。
このサブエージェントは毎回呼ぶようにして
* さらに追加して、呼び出されたサブエージェントの効果を測定するサブエージェント。
測定を行う。また改善案も出す。そしてそれを最初にPlanエージェントが作る計画書の一番後ろに書き出す。ただ実際のサブエージェントの修正までは不要。
このサブエージェントはorchestratorが最後に呼び出す
-----------------------------------------------
* さらに、サブエージェントそれぞれに最適なSKILL.mdがあれば追加して
以下がSKILL.mdについてです。
https://code.visualstudio.com/docs/copilot/customization/agent-skills
スキルを生み出したAnthoropicの説明です
https://github.com/anthropics/skills
参考のURL
https://zenn.dev/yamato_snow/articles/30e8dcf9490c88
* また以下のXのポストも参考になる
* 「AIが意図したコードを書いてくれない」「AIが書いたコードをレビューするのが大変」とかよくあるけど、
ちゃんと関数の副作用について指示していますか?と。副作用のない関数を作る、副作用を隔離する。
この指示をすると実装精度が上がるし人間側のレビューも楽。
* 外部インターフェースの型と契約、エラーハンドリングの網羅性、そして副作用が発生する箇所だ。
内部実装の細部よりも、外の世界と接する接合点が正しく機能しているかを重点的に確認することで、1000行のコミットでも最低限の品質担保はできる。
テストの有無も必ず確認する。あと、AIのレビュー。
* CodexのようなAIにプログラミングを任せると、時々こちらの当初の指示を忘れて、抜け道を使ったショートカットで実装してしまうことがある。
こういうときに、「実装上、こちらの指示を無視して、ズルしたことがあれば、怒らないから教えてください。」と書くと教えてくれることがある。
体感的には、「怒らないから」と付けたほうが教えてくれるような気がしている。
* 「例外処理」は、バットエンドの物語を想像することだ
バットエンドの物語とは、例えば「通信が切れたとき」「ユーザーが変な文字を入れたとき」といったもの。
正常に動くケースだけじゃなく、最悪の事態をどれだけ想像できるかが、システムの「堅牢さ」を決める。
* CSS小技
max-width & paddingを使わないコンテナの幅.結局これに落ち着く
width: min(90%, 1200px)
margin-inline: auto
画面をリサイズしてもこの『 1 行 』が常に最適な境界線を守ってくれる.派手な技術より、ずっと長く付き合える
* エンジニアが「学んで正解だった基礎」5選
・「HTTPの仕組み」 → API理解が一気に楽になる
・「設計原則(SOLID)」 → コードの崩壊を防ぐ
・「データベース正規化」 → 変なテーブル作らなくなる
・「認証/認可の違い」 → セキュリティ議論で詰まらない
・「ログ設計」 → 障害対応が地獄にならない
subAgentを駆使して実行してください。
最初に計画を作成して「GitHubCopilotの計画書」フォルダにマークダウンファイルを作成してほしい。フォルダ無ければ作成して。
ファイル名の先頭に日付と時間を入れて。「yyyymmdd_hhmm_****.md」という感じ。
各subagentとのやり取りも後からユーザーが確認できるようにそのmdに追加していってほしい。
計画書を作ったら、私の承認を待つ必要はなくsubagentを駆使して実装してほしい。