C# のコードを書く際に、Visual Studio と DevKit と GitHub Copilot のどれを信じて使っていけばいいのか、迷いますよね? わかります。ということで簡単に比較してみましょう。
■ 検証コード
こんなコードをそれぞれに改善してもらいます。
int[] array = new int[] { 1,2,3}; List<int> list = new List<int>(); for(int i = 0; i < array.Length; i++) { list.Add(array[i]); }
■ Visual Studio
こんな感じで提案を受け、マウス操作で受け入れていきます。
こうなりました。
using System.Linq; var list = (new int[] { 1,2,3}).ToList();
気になるところはあれど、自然ないいコードですね。C# になじみます。これを基準に考えていきましょう。
■ DevKit (Visual Studio Code)
DevKit は Visual Studio Code を C# について Visual Studio 化する拡張機能といった感じのものです。
ライセンスは Visual Studio です。Visual Studio が使える人が使えます。(仕事で使う際には Visual Studio のサブスクリプションライセンスが必要です)
こんな感じで提案を受け、マウス操作で受け入れていきます。
こうなりました。
using System.Linq; var list = (new int[] { 1,2,3}).ToList();
Visual Studio とそん色のない、いいコードです。いいですね。
普通に使えます。万が一、Visual Studio の使えないところにいても安心です。
■ GitHub Copilot
こんな感じで /fix
スラッシュコマンドで提案をしてもらいましょう。
プロンプトはこんな感じで。
C# の機能を使いこなして C# らしいコードにしてください
こうなりました。
int[] array = { 1, 2, 3 }; List<int> list = new(array);
結構違和感のあるコードが出てきましたね。微妙かもしれません。
■ GitHub Copilot (Claude 3.5 Sonnet (Preview))
モデルが変わると Preview 版のモデルに変更して /fix
してみましょう。
こうなりました。
int[] array = { 1, 2, 3 }; List<int> list = array.ToList();
まだ違和感はありますが、通常のモデルよりかなりいいですね。
■ 結果を GitHub Copilot に評価してもらう
コードの提案が 3 つ出ました。人が見ればまあ善し悪しの判断はつくでしょうが、好みもあります。そこで公平に AI に評価してもらいましょう。
■ 問い合わせプロンプト
int[] array = new int[] { 1,2,3}; List<int> list = new List<int>(); for(int i = 0; i < array.Length; i++) { list.Add(array[i]); }
という C# コードに対して、3者がそれぞれ Fix コードを提案しました。それぞれのコードを評価してください。
using System.Linq; var list = (new int[] { 1,2,3}).ToList();
int[] array = { 1, 2, 3 }; List<int> list = new(array);
int[] array = { 1, 2, 3 }; List<int> list = array.ToList();
■ 結果 GitHub Copilot
評価 提案1 長所: 簡潔で読みやすい。System.Linqを使用しているため、コードが短くなる。 短所: using System.Linq;が必要。varを使用しているため、型が明示されていない。 提案2 長所: 簡潔で読みやすい。System.Linqを使用していないため、追加のusingが不要。 短所: 特に無し。 提案3 長所: 簡潔で読みやすい。System.Linqを使用しているため、コードが短くなる。 短所: using System.Linq;が必要。 結論 提案2が最もシンプルで、追加のusingも不要なため、最も優れた提案です。
自分のコードが最適と主張してきました。
■ 結果 GitHub Copilot (Claude 3.5 Sonnet (Preview))
GitHub Copilot Let me analyze each approach step by step: Original Code (Baseline) Manual array initialization Manual list population using for-loop Most verbose approach Lower performance due to loop Approach 1 (Using LINQ): Pros: Concise one-liner Uses LINQ functionality Cons: Requires LINQ import Creates temporary array inline Approach 2 (Using constructor): Pros: Clean and modern C# syntax Efficient constructor usage Explicit types Cons: Requires C# 9.0 or later Approach 3 (Using ToList()): Pros: Clear and readable Common C# idiom Works in all C# versions Uses LINQ extension method Recommendation: Approach 3 is the best balance of: Readability Maintainability Widely understood Good performance Standard C# practice This matches your current code, so it's already optimal.
自分のコードが最適と主張してきました。
全然、評価になりませんね......。
■ 使い分けが肝心
まあ、というわけで要は使い分け、ということですね。GitHub Copilot は理由も教えてくれるので参考にとてもなります。Visual Studio の出すコードが一番なじみます。Visual Studio でも GitHub Copilot は使えますし、Visual Studio、使えるなら使っていきたい、というのが結論ですかね?