🧩

Copilot Edits の機能を補うscript, promptを試している

2025/03/02に公開

目的と概要

Copilot Edits を使っていて、以下の課題を感じていました。

  • 最新の技術情報を参照させるのに手間がかかる
  • 会話ログが残らないため後から参照できない
  • ドキュメントの整理方法が確立されていない

これらの課題を解決するため、簡単なスクリプトとプロンプトパターンを作成したので紹介します。

ディレクトリ構成

効率的に作業するため、以下のようなディレクトリ構造を採用しています。

.
├── ai-out/        # Copilot Edits 作成のドキュメント
├── chatlog/       # Copilot との会話ログを保存
└── refs-docs/     # 参照用のドキュメント
    └── {domain}/  # ドメインごとにドキュメントを整理(例: github, docs.example.com)
        └── {path}/ # 元のパス構造を維持(URL のパスと同じ構造)

これらのディレクトリを個人的に使う場合は global の .gitignore に追加しておくと便利です。

ai-out/
chatlog/
refs-docs/

最新情報を Copilot に渡す

AI モデルの学習データは一定期間前で止まっているため、最新のドキュメントを参照させたい場合があります。そのために、GitHub リポジトリの特定ディレクトリだけを取得するスクリプトを作りました。

GitHub リポジトリの特定ディレクトリをクローンするスクリプト

https://gist.github.com/hushin/1eb1e678e24d126f72ce55ffc1926d59

このスクリプトをパスの通ったディレクトリに配置し、実行権限を付与します:

chmod +x /path/to/clone-github-tree.sh

使用例

clone-github-tree.sh https://github.com/microsoft/vscode-docs/tree/main/docs
clone-github-tree.sh https://github.com/github/docs/tree/main/content/copilot
clone-github-tree.sh https://github.com/tailwindlabs/tailwindcss.com

単一のウェブページについては、筆者が開発した fetchmd を使用して Markdown 形式で保存します。

参照用プロンプト例

取得したドキュメントを Copilot に参照させるプロンプトの例です。

開いているドキュメントを渡す:

#editor
要約して一つのファイルにまとめて `ai-out/(slug).md` に保存して。

ディレクトリ丸ごと渡す:

#codebase
ref-docs/github/github/docs/content/copilot/using-github-copilot/copilot-chat/**/*
のファイルを参照して、
以下のフォーマットで一つのファイルにまとめて
`ai-out/(slug).md` に保存して。

# 要約
## [見出し](../ref-docs/src_path)
- ファイルごとに3~5行の箇条書き

# 学んだこと・総括
- 全体を総括して3~5行の箇条書き

これで ai-out/(slug).md にドキュメントが作れます。

上記プロンプトの実行結果:

ai-out/copilot-chat-summary.md
# 要約

## [インデックス](../ref-docs/github/github/docs/content/copilot/using-github-copilot/copilot-chat/index.md)

- Copilot Chat の様々な環境での使用方法に関するドキュメントの目次ページ
- IDE での質問、GitHub 上での質問、GitHub Mobile での質問など複数の環境をサポート
- プロンプトの始め方、リポジトリのインデックス作成、プロンプトエンジニアリングなどの関連トピックへのリンクを提供

## [プロンプトエンジニアリング](../ref-docs/github/github/docs/content/copilot/using-github-copilot/copilot-chat/prompt-engineering-for-copilot-chat.md)

- Copilot の結果を改善するためのプロンプト作成戦略を提供
- 一般的な説明から具体的な要件へ進める、例を挙げる、複雑なタスクを単純なタスクに分割するなどのテクニックを説明
- 曖昧さを避け、関連するコードを明示し、実験と反復を推奨

(中略)

# 学んだこと・総括

- Copilot Chat は様々な環境(WebUI、IDE、モバイル)で使用でき、それぞれに最適化されたインターフェースと機能を提供している
- 効果的な結果を得るにはプロンプトの工夫(一般から具体へ、例示、タスク分割、曖昧さ回避)が重要
- リポジトリのインデックス作成により、コードベース関連の質問の回答精度が向上する
- スラッシュコマンド、チャット変数、チャット参加者などの特殊キーワードを活用することで複雑な要求も簡潔に伝えられる
- Copilot はコード生成だけでなく、コード説明、テスト作成、バグ修正、セキュリティアラート対応など多様なソフトウェア開発タスクをサポートする

※概ね正しそうですが、ハルシネーションも起こすこともあるので注意が必要です。

会話ログを保存する

Copilot Edits では会話ログが自動的に保存されないため、後から参照できるようにログを残すプロンプトを用意しました。

基本的なログ保存プロンプト

このチャットのログを `chatlog/(slug).md` に保存してください。
会話の概要、履歴、あなたが学んだことをまとめてください。

日付付きログ保存プロンプト

ファイル名などに日付を付ける場合は現在時刻を渡します(渡さないと 2023-11-15 になりました)。

このチャットのログを `chatlog/(date)-(slug).md` に保存してください。
現在時刻は 2025-03-02 21:57:54 です。
会話の概要、履歴、あなたが学んだことをまとめてください。

現在時刻を毎回入力するのは面倒なので、スニペットを登録しておくと便利です。

macOS Raycast での登録例:

このチャットのログを `chatlog/(date)-(slug).md` に保存してください。
現在時刻は {datetime "yyyy-MM-dd HH:mm:ss"} です。
会話の概要、履歴、あなたが学んだことをまとめてください。

Windows AutoHotkey での登録例:

; 終了文字なしで発動
#HotString *

::`;log::
{
    TimeString := FormatTime(, "yyyy-MM-dd HH:mm:ss")
    InsertText("このチャットのログを ``chatlog/(date)-(slug).md`` に保存してください。`n現在時刻は " TimeString " です。 `n会話の概要、履歴、あなたが学んだことをまとめてください。")
    return
}
株式会社エス・エム・エス

Discussion