GitHub CopilotがIntelliSenseの進化形すぎて手放せなくなりそう

3K Views

July 11, 23

スライド概要

次のイベントで発表した資料です。
【オンライン】Build 後! C# Tokyo イベント - connpass
https://csharp-tokyo.connpass.com/event/287899/

profile-image

会社勤めのSE・プログラマです。個人としての情報発信も行っており、このアカウントはその用途で使用します。同一ID「suusanex」でGitHub・はてな等でも発信しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

GitHub Copilotが IntelliSenseの進化形すぎて 手放せなくなりそう 2023/7/11 須藤(suusanex)

2.

自己紹介  ID:suusanex( connpass・Twitter・GitHub共通)  名前:須藤圭太  サイエンスパーク株式会社という独立系ソフトウェアベンダーに所属  4年ほど受託開発で、上流から下流まで全部を回す  ここ8年ほどは、自社製品開発も担当  Windowsアプリ開発のネタが多い  勉強会もやってます。  https://sciencepark.connpass.com

3.

概要  GitHub Copilotを使ってみたら、思った以上に即効性のある便利さだった  使ってみないと分かりづらいので、実例を紹介してみます  注意点:  生成系AIにつきまとう、著作権の問題、学習・セキュリティの問題などには触 れません  単純に、新技術として使ってみてどう便利だったかを紹介します

4.

そもそも、GitHub Copilotって何?  コードの文脈を考慮して、次のコメントやコードを提案してくれる  つまりIntelliSenseに文脈理解・予測・生成などが加わった進化形  いわゆる生成系AIだが、開発IDE(VisualStudio等)に最適化  コーディング補佐としては、ChatGPTなどよりもかなり効率よく使える  有償(個人プラン 月額$10)  ※私見で超訳した紹介なので、正確なところはオフィシャル情報を見てくださ い https://docs.github.com/ja/copilot/getting-started-with-github-copilot

5.

ChatGPTに聞けば良くない?  ChatGPTなどは、前提条件や文脈などを伝えた後に、問題を問う必要がある  (プラグイン次第かもだが)回答をコードへコピペする必要がある  つまり、手間が多い  GitHub Copilotは、IDEで開いているファイルから、前提条件や文脈を勝手に読 み取ってくれる(らしい)  IDEと連携(VisualStudioではIntellisense)するので、回答がそのままコードに 書かれる  つまり、手軽  プログラマが常用する場合、この差は結構大きい

6.

いくつかの実例を・・・  コーディング中にちょっとずつ助かるタイプの動きなので、プレゼンで紹介し づらい・・・  当たり障りのないコードに置き換えて、説明を試みます

7.
[beta]
例えば その1



bool result = Deserialize(paramData);
if(!result)



と書いたら次の生成



If(!result){
m_Trace.Write(Warn, "paramData Deserialize Fail");
}



前後のコードと似た感じで、トレースログを入れてきた

8.
[beta]
例えば その2


//dbへテスト用のレコードを10個追加する



と書いたら次の生成



for (int i = 0; i < 10; i++)



{



db.AddOrUpdate(new Record



{
Item = $"Item{i}",



});





}
コメントだけからちょっとしたコードを生成してきた

9.

例えば その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;   }  関数名と前のグローバル変数から、なんとなく意図を汲んできた

10.

実例について  小規模な例ばかりになってしまったが、おそらく与えるコメントなどの工夫で もっと仕事をしてくれる  小規模な例でも、こまかい定型コードを書かなくて済むのでけっこう助かる  ChatGPT等と同じく、レビューして訂正してあげる必要はある

11.

欠点   IntelliSenseと操作系が同じなので、両方のサジェストが出て選びづらい  Resharperが入ってるともっと大変  片方のサジェストを抜けるまでタイプしたり、Esc、Tab、Enterなどの駆使が必要 IntelliSenseと連携しておらず、GitHub Copilotのサジェストを採用した場合は、 タイプミスや大小文字の違いなどを補完してくれない

12.

他の機能は?  GitHub Copilot Labs拡張の追加で、さらにAsk Copilotメニューなど色々使える らしい  まだ理解が浅いので、今日は省略して1点だけ紹介

13.

Ask Copilotメニュー  Ask Copilotメニューをコード上で開き、文章で質問を書ける  「この関数の機能は?」と聞いてみたら、割とまとも   GitHubに置いてある適当なコードのRequestWaitAsyncメソッド

14.

まとめ  GitHub Copilotは、ちょっと触るだけでも割と便利  生成系AIなので、おそらく要求の与え方に慣れるともっと力を発揮する  GitHub Copilot Labs拡張はさらに楽しそう  月額$10だが、コーディングのスピードに直接効いてくるので、意外と費用対 効果は高いのでは?  引き続き使ってみるつもり