こんにちは。ブログの内容に一貫性がないことでお馴染みの木本です。 今回はGitHub Copilotについて書きますね。
本日、当社からGitHub Copilotの導入支援サービスの開始に関してリリースさせていただきました。
このリリースにあわせて・・・と狙ったわけではないのですが、たまたま前日にGitHub Copilotのサポートを受けながら、業務で使うPowerShellスクリプトを作成し、その能力の高さをまざまざと見せつけられたので、緊急でこのブログを書くことにしました。
GitHub Copilotとは、開発者がコードを書き始めたり、自然言語でコメントを書くと、それらの入力に合わせて最適なコード補完や修正案を提供するAIサービスです。 「とはいえ、そもそもGitHub Copilotを使い始めること自体がちょっと難しかったりするんじゃないの~?」という疑いは、すでに弊社松村と馬場が払拭しておりますので、こちらの記事をご覧ください。
「とはいえ、何か使い方にクセがあったりするんじゃないの~?」という疑いはあると思います(あってほしい)ので、今回はそれを払拭したいと思います。
さて、本題に入る前に今回の前提です。 僕個人のスペックはこんな感じです。
エンジニア歴22年。 現在は日常の業務においてプログラムの実装を行うことはほとんどない。 PowerShellの利用頻度もそれほど高くない。 PowerShellスクリプト(ps1ファイル)は作ったことがない。 batファイルでデータ移行スクリプトなどを作った経験はある。(ただし10年前)
というわけで、現在保持している実装能力はかなり弱っちいということがお分かりいただけると思います。
そんな激よわプログラマーが、今回GitHub Copilotに100%頼り切って作るPowerShellスクリプトはこんな感じです。
Azure PowerShellを使って、指定したAzureサブスクリプションのリソースを取得する。
実際に業務用に作成したスクリプトはもう少し複雑な処理をしています。内容的にお見せできない部分もありますのでブログ用に簡略化しましたが、僕のGitHub Copilot初体験を可能な限り再現したいと思います。
今回のPowerShellスクリプトはVisual Studio Codeで作成します。 そのため、あらかじめVisual Studio Codeには以下の拡張機能をインストールしています。
- GitHub Copiot
- GitHub Copiot Chat
それではスタート!!
まず、Visual Studio Codeのアクティビティーバーにチャットのボタンが表示されているのでクリックします。
これで、GitHub Copilotとチャットできる状態になりましたので、いきなり丸投げしたいと思います!!
Azure PowerShellを使って特定のAzureサブスクリプションのリソースを取得するスクリプトファイルを作りたい。
ド直球の丸投げに対して、わずか3秒ほどでソースコードの提案をしてくれました。 ちゃんと日本語のリクエストに対して日本語で答えてくれています。
しかし、激よわプログラマーはこれでは満足しません。 次のリクエストを投げます。
教えてくれたソースコードをVisual Studio Codeを使ってスクリプトファイルにしたい。
「それくらいググれ!」とお叱りを受けそうな質問を投げても、Visual Studio Codeでのファイルの作り方からスクリプトの実行方法まで丁寧に答えてくれます。
それでは、GitHub Copilotが教えてくれた通りにファイルを作ります。
そして、このスクリプトをGitHub Copilotが教えてくれた通りにVisual Studio Codeのターミナルから実行してみます。
実行後にブラウザ認証を完了させると、Azureサブスクリプション内のリソースが取得されました。 なんと、ここまで10分もかかっていません。激よわプログラマーもビックリです。
しかし、この激よわプログラマー、実装力はなくともやりたいことはあります。 続けてこんなリクエストを投げてみます。
取得したリソースの内容をテキストファイルに出力したい。 ファイルの出力先はこのスクリプトファイルがあるフォルダで、相対パスで指定したい。
こんなリクエストにもしっかり答えてくれます。
スクリプトファイルの中身をGitHub Copilotが提示してくれたソースコードに置き換えます。 もはや、どちらがCopilotなのかわからなくなってきました。
ソースコードを変更したスクリプトを実行すると、Visual Studio Codeのエクスプローラーに「resources.txt」が現れました。 これは、スクリプトファイルと同じ場所にテキストファイルを出力するようにソースコードが書かれているからですね。 resources.txtを開くと、しっかりと取得されたリソースの情報が出力されていました。
激よわプログラマー、ぐうの音も出ません。
上記の例ではブログ用にかなり簡略化していますが、実際にはさらにリクエストを重ねて以下のような処理を実装しました。
- AzureサブスクリプションIDを外部ファイルに定義し、スクリプトファイルから読み込んで利用する。
- 外部ファイルが見つからない場合は処理を終了する。
- 外部ファイルから読み込んだAzureサブスクリプションIDを表示し、再度確認した上で後続の処理を実行するようユーザーに促す。
細かいツッコミどころはあると思いますが、かなりの短時間で機能の実装が終わるので、強者エンジニアのレビューを受ける時間も十分に取れると思います。
さらに、GitHub Copilotはプログラムの実装だけでなく、トラブルシューティングについてもしっかりサポートしてくれます。 たとえばプログラムを実行した時にエラーが発生した場合、エラーメッセージをチャットに貼り付けるとエラーの原因と解決案を提示してくれます。
業務用に作成したスクリプトでは、ターミナル上に日本語でメッセージを表示すると文字化けするという問題がありましたが、これもGitHub Copilotが解消してくれました。 その時のやりとりはキャプチャーできていないのですが、おおよそ以下の通りのやりとりでした。
僕「Write-Hostで出力する日本語が文字化けする」 GitHub Copilot「管理者モードで文字コード変えて」 僕「まだ化ける」 GitHub Copilot「管理者モードでフォント変えて」 僕「ダメだね」 GitHub Copilot「もしかして、あんたのPowerShellのバージョン古いんじゃないの?」 僕「あ・・・」(ビンゴ) ※Windows PowerShell 5.1を起動して実行してました・・・
GitHub Copilotの答えはかなり記憶に頼った雑なものになっていますが、僕からのリクエストはほぼそのままで、「まだ化ける」みたいな雑な書き方でもちゃんと答えてくれました。(良い子は正しく質問しましょう)
いかがだったでしょうか。 こんな風に、プログラムの実装にブランクがあるエンジニアでも、適切にリクエストすればGitHub Copilotが十分にサポートしてくれて戦力を回復することができます。 当然、現役バリバリのエンジニアにとってはさらに強力な右腕として機能してくれるはずです。 もしこのブログで「GitHub Copilotを導入してみたい!」と思っていただけましたら、GitHubの正規代理店でもある弊社にぜひご連絡ください。
最後までお読みいただきありがとうございました。