4.2K Views
July 11, 23
スライド概要
次のイベントで発表した資料です。
【オンライン】Build 後! C# Tokyo イベント - connpass
https://csharp-tokyo.connpass.com/event/287899/
GitHub Copilotが IntelliSenseの進化形すぎて 手放せなくなりそう 2023/7/11 須藤(suusanex)
自己紹介 ID:suusanex( connpass・Twitter・GitHub共通) 名前:須藤圭太 サイエンスパーク株式会社という独立系ソフトウェアベンダーに所属 4年ほど受託開発で、上流から下流まで全部を回す ここ8年ほどは、自社製品開発も担当 Windowsアプリ開発のネタが多い 勉強会もやってます。 https://sciencepark.connpass.com
概要 GitHub Copilotを使ってみたら、思った以上に即効性のある便利さだった 使ってみないと分かりづらいので、実例を紹介してみます 注意点: 生成系AIにつきまとう、著作権の問題、学習・セキュリティの問題などには触 れません 単純に、新技術として使ってみてどう便利だったかを紹介します
そもそも、GitHub Copilotって何? コードの文脈を考慮して、次のコメントやコードを提案してくれる つまりIntelliSenseに文脈理解・予測・生成などが加わった進化形 いわゆる生成系AIだが、開発IDE(VisualStudio等)に最適化 コーディング補佐としては、ChatGPTなどよりもかなり効率よく使える 有償(個人プラン 月額$10) ※私見で超訳した紹介なので、正確なところはオフィシャル情報を見てくださ い https://docs.github.com/ja/copilot/getting-started-with-github-copilot
ChatGPTに聞けば良くない? ChatGPTなどは、前提条件や文脈などを伝えた後に、問題を問う必要がある (プラグイン次第かもだが)回答をコードへコピペする必要がある つまり、手間が多い GitHub Copilotは、IDEで開いているファイルから、前提条件や文脈を勝手に読 み取ってくれる(らしい) IDEと連携(VisualStudioではIntellisense)するので、回答がそのままコードに 書かれる つまり、手軽 プログラマが常用する場合、この差は結構大きい
いくつかの実例を・・・ コーディング中にちょっとずつ助かるタイプの動きなので、プレゼンで紹介し づらい・・・ 当たり障りのないコードに置き換えて、説明を試みます
例えば その1
bool result = Deserialize(paramData);
if(!result)
と書いたら次の生成
If(!result){
m_Trace.Write(Warn, "paramData Deserialize Fail");
}
前後のコードと似た感じで、トレースログを入れてきた
例えば その2
//dbへテスト用のレコードを10個追加する
と書いたら次の生成
for (int i = 0; i < 10; i++)
{
db.AddOrUpdate(new Record
{
Item = $"Item{i}",
});
}
コメントだけからちょっとしたコードを生成してきた
例えば その3(C++) KeyKeyValue g_Data[100]; LPCWSTR FindOrDefault(LPCWSTR key1, LPCWSTR key2) と書いたところで次の生成 for (int i = 0; ; ++i){ auto k1 = g_Data[I].key1; auto k2= g_Data[I].key2; if(k1== NULL || k2== NULL) break; if (strcmp(key1, k1) == 0 && strcmp(key2, k2) == 0) return g_Data[i].value; } 関数名と前のグローバル変数から、なんとなく意図を汲んできた
実例について 小規模な例ばかりになってしまったが、おそらく与えるコメントなどの工夫で もっと仕事をしてくれる 小規模な例でも、こまかい定型コードを書かなくて済むのでけっこう助かる ChatGPT等と同じく、レビューして訂正してあげる必要はある
欠点 IntelliSenseと操作系が同じなので、両方のサジェストが出て選びづらい Resharperが入ってるともっと大変 片方のサジェストを抜けるまでタイプしたり、Esc、Tab、Enterなどの駆使が必要 IntelliSenseと連携しておらず、GitHub Copilotのサジェストを採用した場合は、 タイプミスや大小文字の違いなどを補完してくれない
他の機能は? GitHub Copilot Labs拡張の追加で、さらにAsk Copilotメニューなど色々使える らしい まだ理解が浅いので、今日は省略して1点だけ紹介
Ask Copilotメニュー Ask Copilotメニューをコード上で開き、文章で質問を書ける 「この関数の機能は?」と聞いてみたら、割とまとも GitHubに置いてある適当なコードのRequestWaitAsyncメソッド
まとめ GitHub Copilotは、ちょっと触るだけでも割と便利 生成系AIなので、おそらく要求の与え方に慣れるともっと力を発揮する GitHub Copilot Labs拡張はさらに楽しそう 月額$10だが、コーディングのスピードに直接効いてくるので、意外と費用対 効果は高いのでは? 引き続き使ってみるつもり