
はじめに
こんにちは。クラウド事業部の山田です。
元々経験のあった PowerShellスクリプトの作成を通して GitHub Copilot の使い勝手を確かめてみました。
推奨:Copilot と Copilot Chat を使用する流れを大雑把に知りたい人向け。PowerShell の内容についてはここでは記載しません。
参考)
GitHub Copilotとは?使い方や料金、Agentについて解説
GitHub Copilot Chatとは?使い方や料金体系を解説!
目次
概要
前提
・PowerShellスクリプトの経験
PowerShellスクリプトについては、構築案件での納品、運用自動化、勉強を兼ねた私用での作成まで経験があります。
今回は、私用で作成したこともあるHyper-V仮想マシンをコピーするスクリプトの作成をCopilotを用いて通してみます。
・開発ツールの経験
Copilotを用いるまでもなく、開発ツールならではの有用な機能に触れるのは初めてとなります。
PowerShellはWindows付属のPowerShell ISEを用いて作成してきており、また業務で少し触れたことのあるPythonについても開発ツールの高度なツールを用いていません。 そのため今回使用する Visual Studio Code の使い勝手に慣れるところから始まっています。
・作業環境
Hyper-Vの有効化、テンプレートとなる仮想マシンの作成、Visual Studio Codeのインストールなどは実施済みです。
作成するスクリプト
・機能
JSONファイルを読み取って1つ以上の新仮想マシンを作成します。
JSONファイルには1レコードごとにコピー元とするテンプレートマシンのパス、新仮想マシンの仮想マシン名と作成先パスを指定します。
・スクリプトの構成
今回は本来あるべきログ出力機能、セーフガード機能、例外処理は省き、必要最小限の機能の実装を通します。
JSONファイルの読み取り
↓
1レコードごとに
仮想マシン作成先のフォルダを作成
テンプレートマシンをコピー
テンプレートマシンと同名のマシンが作成されるため名前を変更
スクリプト作成
作業開始
VS Code の拡張機能
下記の拡張機能を入れました。GitHubのものはアカウント登録が必要です。
・Japanese Language Pack for VS Code:日本語化
・PowerShell:PowerShell編集用の拡張機能
・GitHub Copilot (Free プラン):コード補完
・GitHub Copilot Chat (Free プラン):対話型AI



VS Code の画面に慣れる
VS Code の画面構成として、左ペインにフォルダ構成、中央にソースが表示されます。さらに拡張機能により、下部ペインには PowerShell の出力結果、右ペインには Copilot Chat とのやりとりが表示されます。

問題の警告
PowerShell 拡張機能を入れることで PowerShell ISE と同様の機能と見た目となり、さらに PowerShell のソースがベストプラクティスに沿っているかチェックしてくれます。
以前手作業で作成した仮想マシンコピースクリプトのフォルダを読み込ませたところ、瞬時にベストプラクティスに沿っていない事項を警告し、表示されるリンクをたどると警告文に関するMicrosoft公式のページが表示されます。これまでベストプラクティスに沿っていたのか常に自信が無かったため非常に頼もしい機能だと感じます。


コード補完
PowerShell拡張機能とCopilot によるコード補完が行われます。
下記の例では、PowerShell拡張機能ではコマンドオプションの候補が列挙されるのみですが、Copilot ではコマンドオプションとそれに対応する変数を同時に提示しており、ユーザー操作の先回りをしていることがよくわかります。

![]()
コードの自動生成
仮想マシンコピーの最低限の機能を定義して Copilot Chat に入力しました。

手作業ではログ出力機能などを除いても手間取っていた機能でしたが、要望を入力して5秒程度でコードが生成され驚きました。またJSONファイルのサンプルも用意されます。


さらに README ファイルも生成されており、このまま他の人に引き渡すこともできるのではないかと期待が膨らみます。

スクリプト実行
問題だらけ
実行したところエラーで動作が止まりました。30行にも満たないコードですが、検証や変数の確認を進めていくとAIらしい初歩的で致命的な問題がいくつも見つかりました。
以降は今回見つかった間違いの例です。

・定義した内容が漏れている
JSONファイルのパスや盛り込む機能を指定しましたが生成結果から抜けていました。より明確に定義した方がよかったのかと思います。
・JSONファイルのデータの階層
JSONファイルから取り出すデータの階層が誤っており、それ以降で定義される変数に値がセットされませんでした。
・使われないフォルダ
仮想マシン作成に先立ちフォルダが作成されますが、仮想マシン作成の際にはそのフォルダをデータ保存先に指定しておらず使われませんでした。
未使用の変数とは異なり使われないオブジェクトがあっても通知してくれないため、気づかなければ不用意なフォルダに20GBのファイルが作成されるところでした。
・存在しないコマンドオプション
最も致命的だったのは、Copilot Chat が実際に存在しないコマンドオプションを使用していたことでした。コマンドの公式ページ、Copilot や PowerShell ISE に表示される対象コマンドのオプション一覧には無いものを、何回質問しても提示してきました。早々に自力で情報を確認すべきでした。
デバッグ
・スクリプトの実行
スクリプトの実行、ステップインやその時々の変数の確認については VS Code では動作が重く、結局 PowerShell ISE の方で実行することが多かったです。しかし VS Code と PowerShell ISE で同じファイルを同時編集できるため、使い分けに全く手間がかかりません。

・機能追加や修正
機能追加や修正は、Copilot によるコード補完や Copilot Chat による説明(信用できない場合もあるが)を得られる VS Code の方が適しています。Copilot Chat では範囲を指定して質問を投げることもでき便利です。


スクリプト完成
適宜 Copilot Chat に質問を投げかけることでエラー修正や機能の追加を行うことができ、想定通りのスクリプトが完成しました。
反省点
作成の流れ
前述の通り VS Code の基本機能、Copilot のコード補完、 PowerShell拡張機能によるベストプラクティスのチェックは非常に便利なものでした。一方で Copilot Chat により生成された機能に問題があったもののそれも使い方次第と思います。
Copilot Chat では小さく簡易的な機能の作成は確実に行うことができたため、疎結合なモジュールごとに慎重に生成するとよいかと考えています。今回は運用に即した本来あるべき構成を分割して、メイン2モジュールの作成フェーズをイメージしましたが、それもより分割して作成するということです。したがって、Copilot Chat による多機能の一括作成に頼りがちになるかもしれませんが、それは避けるべきかと思います。
・本来あるべき構成
関数の定義 ( ログ出力、選択肢表示、終了 )
ファイル読み取り + 例外処理、問題があれば終了、ログ出力
前提条件の確認 + 問題があれば終了、ログ出力
操作開始の選択肢表示 + 開始しなければ終了、ログ出力
仮想マシン作成 + 例外処理、セーフガード機能、問題があれば終了、ログ出力
終了、ログ出力
・今回の構成
ファイル読み取り
仮想マシン作成
※ 後で他機能も追加していくイメージ
・今回の構成をより慎重に作成
ファイル読み取り + 想定通りにデータが取り込まれているか。( 今回はここで失敗していました )
それが機能すれば仮想マシン作成モジュールの作成に移る。
ツール
コードの自動生成以前に開発ツールを用いるのが初めてでした。
Copilot や Copilot Chat のフリープランにも他の機能がありますが、まずは基本的な VS Code の機能を知ることが先ではないかと考え、調査を続けるつもりです。