hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

gh copilotにgit diffの入力を渡して、git stashの説明文を作ってもらう

GitHub CopilotにはCLIがあるのを思い出して、コマンドの実行結果をそのままプロンプトに渡すと、文脈に沿った仕事をお願いしやすいんじゃないか、と思って、試してみた。
git stashをよく使うのだけど、一覧になっていると、何がstashされているかわからないので、stashの保存時に、内容を要約してもらう、というタスクを試してみる。


なんらかのCLIにdry-run機能をつけている途中で、git stashしたいとする。

index f1f5a2f..dd70bf5 100755
--- a/cli.js
+++ b/cli.js
@@ -19,6 +19,10 @@ command
     } else {
       command.help();
     }
+  })
+  .arguments(['dry-run'])
+  .action(async(file) => {
+    console.log(file)
   });

こんな調子で、プロンプトの途中で$(git diff)を実行して、Copilotに渡す入力に、diffの内容も含めてみる。
$ gh copilot suggest "I want to stash changes. Please read current change and suggest the message with changed file and changed motivation: $(git diff)"


すると、 git stash save "Changed file: cli.js, Changed motivation: Add 'dry-run' argument and action"がサジェストされた。
この説明がstashについていれば、あとから、git stash listして、あのとき書いてたあれはどこに行った?と探すときに役立つと思われる。
このままコミットメッセージを作ってpushすると嫌な感じがするけど、stash用のメモ書きくらいなら、自動生成でいいんじゃないか。

Welcome to GitHub Copilot in the CLI!
version 1.0.2 (2024-04-26)

I'm powered by AI, so surprises and mistakes are possible. Make sure to verify any generated code or suggestions, and share feedback so that we can learn and improve. For more information, see https://gh.io/gh-copilot-transparency

? What kind of command can I help you with?
> generic shell command

Suggestion:

  git stash save "Changed file: cli.js, Changed motivation: Add 'dry-run' argument and action"

? Select an option  [Use arrows to move, type to filter]
> Copy command to clipboard
  Explain command
  Execute command
  Revise command
  Rate response
  Exit


イマイチな点としては、CopilotのCLIは人間が使う想定なのか、対話的に、普通のgitコマンドかghコマンドどっちがいいか?とか聞いてくれるので、適当にエンターして返事する必要がある。
yes | gh copilotとか、echo "\n" | gh copilotとか試したけど、応答を自動化するのはうまくいかなかった。


また、結果が安定しなくて、diffそのものが応答として返ってくることがあった。

Suggestion:

  git stash save "Current change: diff --git a/cli.js b/cli.js index f1f5a2f..dd70bf5 100755 --- a/cli.js +++ b/cli.js @@ -19,6 +19,10 @@ command } else { command.help(); } + }) + .arguments(['dry-run']) + .action(async(file) => { +
console.log(file) }); if (process.stdin.isTTY) {"


途中でエンターする必要はあるけど、機械的に呼び出せるので、手元のタスクで、ちょっとAIの技を使いたいときなどに、なんか使い道があるかもしれない。