Github copilotお試し

とりあえずLaravelの環境を作ってみる。
VSCodeに導入後、CHATに以下を聞いてみた
Can you create a devcontainer environment for Laravel 11 and MySQL 8.4?
結果は以下の通り、パブリックコードが含まれているので返答がブロックされた。
途中までは生成したところで急にブロックされたような気がした。
今後、このブロックがどの程度発生するかで使いやすさはかなり変わりそう。
ブロック関連メモ
テキスト→コードの提案のような場合、テキスト部分は普通に出力され、コード部分は画像のようにブロックされた

Terminalを開くと、そこでもCHATが使え、何がしたいか聞いてくる。
試しに
start Laravel project with Sail
と打ったところ、返答は以下。
これは、Laravel公式に記載の内容と一致する。(公式で example-app
となっている箇所が {project_name}
に変わっている。
確かにすごいが、結局確認のため公式ページを見ながら進めるため、この使い方はしなさそう。
ただ、例えばDockerのコンテナ一覧を表示するコマンドってなんだっけ?といた場面でその場で検索っぽい事が出来るのはかなり時短になりそう。
提案されたコマンドを直接実行できるボタンもあるが、さすがに怖いので使うことはなさそう。

この辺りはチャットを使う上で必須になりそう
@workspace has context about the code in your workspace and can help you navigate it, finding relevant files or classes.
@vscode knows about commands and features in the VS Code editor itself, and can help you use them.
@terminal has context about the integrated terminal shell and its contents.
お試し
@workspace
me: @workspace コードを解析し、おすすめのVSCode拡張をdevcontainer.jsonに追加してください
のような質問をChatですると、 このように参照されたファイルと行数が表示される。
Laravelを使っているのを理解し、Laravel用の拡張や、PHPUnitの拡張を提案してくれた。
@workspase
を付けづに同じ質問をすると答えられなかった。
@workspace /explain #file:ファイル名
#file:ファイル名
で特定のファイルをコンテキストに含めることができる。
例えば @workspace /explain #file:docker-compose.yml
とすれば、 docker-compose.yml
の内容について説明してくれる(service毎に詳細に何をやっているか書いてくれたりかなり詳細)
@vscode
画像のように、返答の中でVSCodeのコマンドを提案してくれる場合、コマンドパレットで表示するボタンも出してくれる。
参考

便利だと思った使い方
Editor Inline
- 適当にスペース区切りされたテキストを選択してMarkdownTableに変換できる
/explain
- Dockerfileの最初に取得している各種パッケージが何のための物なのかを質問する
- DB設定の場所、バリデーションの方法など、既存コード理解の効率は圧倒的に高くなる。
Commandline
- コマンドのオプションなどを忘れたときにすぐ聞ける
- 特にDockerdesktopを利用できなくなり、コマンド操作を行う必要が出てきた中で、いちいちコマンドを調べるよりCopilotで聞く方が圧倒的に効率が良い(ただし、提案されたコマンドを即実行するのはリスクがあり、メンバー全体にリスクを浸透させる必要はある)
Chat window
@workspace
- エラーを張り付けて原因を聞いてみると、コードの中から疑わしい部分をピックアップしてくれて大変助かる。
- コード生成は割と疑わしいが、説明はかなり得意と見える
- /fix を付けるとコード修正の提案をしてくれるが、こちらはあまり精度は高くない気がする(今のところ)

IDE上で表示されているwarningなどのQuickFixでCopilotを利用できる。
選択すると勝手にコードを修正してくれる。
が、今回は対象が悪かったのか、あまりちゃんとした修正はしてくれなかった。
(エラーが出てる箇所を消そうとしたり)

言語について
日本語で質問したら結果が返ってこず、英語で同じ質問をしたら返答が来ることがある。
ただ、そのあともう一度日本語で質問したら同様の返答が来たので、謎。(返答できないエラー的なのが表示されていたが、消えてしまったので次出たときはメモっておく)
諸々あるが、基本的には英語で利用するのが良さそう。
翻訳が手間なら一旦日本語で質問等してみて、返答が不満だったら英語を試すといいかもしれない。
explain
/explain
はデフォルトでは英語が返ってくるので、これを日本語にしたい。
/explain in japanese
と打てば日本語で結果が返ってくる。 (この書き方だと今の所エラーは変な返答は来ていない)
エラーは出ていないが、日本語で
すみません、私は日本語で説明することはできません。私はソフトウェア開発に関する質問にお答えすることができます。どのようにお手伝いできますか?
といった返答が来ることはあった。
色々試した時のログ
me: /explain explain code in Japanse
copolot: すみません、私は日本語で説明することはできません。私はソフトウェア開発に関する質問にお答えすることができます。どのようにお手伝いできますか?
試しにやってみたが上記はダメだった。
ただし、 no result
のようなエラーが出たわけではないので、プロンプトによっては出来たりする・・・?要調査
(そもそも上記のプロンプトで /explain
コマンドは効いてるのかも要調査)
ちなみに、フランス語だとできた
me: /explain explain code in French
copilot: Le code que vous avez sélectionné est une instruction use en PHP.
...(以下略)...
別の個所で以下のように試したら日本語で返答がもらえた

@workspace /new で、ワークスペースの立ち上げ関連に強いBotを呼び出せる。
試しに簡単なDevcontainer環境を作ってもらおうとしたところ、以下のようにディレクトリ構成を提示し、Create Workspaceを押すとその構成通りにファイルを配置してくれる。
中々便利そうではあるが、今回だと docker-compose.yml
で image
にDockerfileを指定しているのにDockerfileが存在しないなど、割とやらかしはある。
チャットで修正して貰うことは可能だが、このあたりは不確実性を考慮するくらいなら自分でやった方が早そう
諸々のフレームワークなどはプロジェクト立ち上げ用のCLIなどを提供している事が多く基本そっちを使う事になるので出番はあまりなさそう。
試し
以下のようにphpとMySQLの環境を作ってみた
結果、なぜかDockerfileがファイルではなくディレクトリになっているが、それ以外はちゃんと生成できていた

ファイルの内容説明してもらうのに苦戦中。
Dockerfileに対して /explain #file
をしてみたが、書いてある内容ではなくDockerfileの書き方的な指南が出てくる事がある。
聞き方を変えて何回か質問すれば求める結果は得られるので一旦はそうするで良いか・・・

コーディング以外での利用
Markdown
適当なスペース区切りのデータを選択してMarkdownのテーブルに変換することができた。ドキュメント作成や、情報整理の時にとても役立ちそう

その他試したい事
バージョンアップの補佐
あえてLaravel5.6, PHP7.2 , MySQL5.7などの古い環境を作成し、EOL対応を行う事を想定してどのような補佐が出来るかを試す
UnitTestの作成
UnitTestの存在しない既存コードに対してのテスト作成。
テスト設計書をベースにしたE2Eテストとかが作れれば一番だが、果たして・・・
API定義書からのAPI作成
Swaggerで定義したAPIを実装してくれないか。
どこまでできるか調査してみる

Code completions
提案がないとき
VSCodeのOutPut(Ctrl+Shift+U)を表示し、プルダウンから「Github Copilot」を選択すると、コード補完時のリクエスト、レスポンスが確認できる。
(ここが動いていれば提案はしてくれないけれど動いてはいるなの確認ができる)

ダミーデータの作成
CSVファイルで1行目を書いた後、同様のダミーデータの追加を指示すると対応してくれた。
テスト用データで、テスト条件を満たすデータを作ってくれるかなどは要検証