GitHub Copilotが便利になったのでターミナルもVSCodeで良いのでは？という話

先日のVSCodeのアップデートで、GitHub Copilotを使うとターミナル操作が便利になりました。
これにより、別途ターミナルのアプリを使わずにすべてVSCode上で操作した方が便利なのでは？となりました。

## アップデート前までどうしてたか

MacのiTerm2上で、[GitHub CopilotのCLI版（パブリックベータ）](https://docs.github.com/en/copilot/github-copilot-in-the-cli/about-github-copilot-in-the-cli)で入力補完やコマンドの意味を調べたりしていました。
それ自体は便利でしたが、いくつかの不便な点もありました。

- 使い方がちょっと煩雑だった

例えばコマンドをサジェストして欲しい場合、`gh copilot suggest 'gitで1つ前のコミットを取り消したい'`のようにタイプする文字数も多くなり、またそれが一般的なコマンド or ghコマンド or gitコマンドかの３択に答えないといけなくて面倒でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/1dd6eb84-87dd-fe98-c016-d5311b1c0382.png)

- ssh接続で不便

SSH接続先でも使用するためにGitHub CLIを都度インストールするのは面倒であり、共用サーバーにインストールすることも避けたかったため、ローカルPCのターミナルでサジェストしてからコピー＆ペーストする方法を取っていましたが、これが手間でした。 

特にSSH接続の際の手間が大きな問題でしたが、今回のアップデートでこの問題が解消されたと感じています。

## アップデート内容

https://code.visualstudio.com/updates/v1_85#_terminal-agent-and-command-suggestion-improvements

今回のアップデートで`@terminal`というエージェントが追加されました。
エージェントというのは、あらかじめ設定された特定の範囲に絞ったサジェストをしてくれるもので、`@terminal`はターミナルに特化させたものです。  
今までもスラッシュコマンドで似たようなことができたようですが、今回のリリースではコマンド候補が大幅に改善されて、使用されているOSやシェルがわかるようになったとのことです。

# 使い方

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/786fb82b-ee5c-6270-aaac-bd26ae2bb520.png)

ターミナルから Cmd +i でCopilot Chatを開くと`@terminal`が入力された状態で開くので、続けて下記のようにプロンプトを入力することで使用できます。

|プロンプト内容|説明|
|:-----------------|:-----------------|
|@terminal <プロンプト>|プロンプトで直接指示を与える|
|@terminal #terminalSelection|ターミナルの選択した部分について説明させる|
|@terminal #terminalLastCommand|最後に実行したコマンドについてサジェストさせる|

### `@terminal <プロンプト>`

直接プロンプトで指示を与える使用方法です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/ef2a6d3f-e7ab-10d4-8b42-6e6ebee0ed76.png)

サジェストされた結果が気に入ったら、ターミナルのアイコンをクリックすればコマンドの内容がターミナルに貼り付けられるので、あとはエンターを押すだけで実行できます。またターミナルがどこに接続されているかは関係ありませんので、ssh接続での問題が解消されました。

### `@terminal #terminalSelection`

ターミナル上で分からない箇所を選択状態にして、Cmd+iから質問するやり方です。
ちなみに、`#`とタイプすれば候補として出てくるので`#terminalSelection`は覚えなくて良いです。

![スクリーンショット 2023-12-17 20.08.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/7b67262b-5dc7-a5ac-b82f-a589c9ba8770.png)

### `@terminal #terminalLastCommand`

最後に実行したコマンドについて説明してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/5aeecbe0-9f35-4493-76ac-c6fd092cc9d0.png)

特に便利なのがコマンドが失敗した時で、その場合 :sparkles: アイコンが表示されるので押して、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/ac362bec-742a-14c6-5b5b-70675205f9ae.png)

続けて、Explain using Copilotをクリックすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/089b0d8d-bf77-7dc1-b85b-04dbd9f789d6.png)

自動的に`@terminal #terminalLastCommand`が実行されて、何がエラーの原因なのか教えてくれるのが便利です。あとこの例では冒頭に書いたとおり私のPCがMacだと推測して回答できている様子ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/4d9b2fe7-3439-f21d-7b5a-d426e29e767f.png)

さらに実行したのがプログラムの場合、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/370e7fd8-db30-58fa-d735-23ff2d6c3b16.png)

エラーメッセージからエラーを特定して修正の提案までしてくれるのがすごいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/4a5cf84c-4faf-0aa7-df8b-1e22d9a30460.png)

### コミットメッセージ生成
少し前からGUIのGit機能には入っていた機能ですが、今回のアップデートでターミナルでもできるようになりました。

使い方は、　`git add` して :sparkles: から `Generate Commit Message`が選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/ae8949e2-9284-6292-506f-a0c141005cac.png)

そうするとコミット内容から良い感じにコミットメッセージを自動で作ってくれるようになりました。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387/d8428f46-f146-a733-6343-aca22b10b5e6.png)


# さいごに
このアップデートによる利便性を鑑みて、しばらくはiTerm2を使わずに、ターミナル操作をVSCodeに完全に移行してみることにします。