LoginSignup
4
10

github copilot事始め

Posted at

まずは登録をしよう

このページに全て書いてあるので割愛。
海外の住所入力フォームに戸惑ったので参考ページを貼っておきます。

vscodeのプラグインを入れよう 

vscodeを起動して Extensions から GitHub Colilot をインストール。

image.png

しばらくすると右下にこのようなポップアップが表示されるので、Sign in to GitHubボタンをクリックしてサインイン。
ポップアップが出ない時は左下の人マークからSign in with GitHub ....をクリックでもサインイン出来ます。

image.png

image.png

vscode左下にgithub copilotのアイコンが表示されていれば準備完了です。

image.png

実際に使ってみよう

コメントして自動でコードを生成してもらう

サンプルとして、k-meansアルゴリズムでクラスタリングしてみた。
k-means.pyファイルを作成し、冒頭にコメントを記載。
その後はtabを押してcopilotの提案を受け入れる。

image.png

生成されたコードがこちら。

# 2次元空間上の点をk-meansアルゴリズムでクラスタリングするプログラム
# 結果は色分けして表示する

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 乱数を固定値で初期化
np.random.seed(0)

# 2次元空間上にランダムに点を生成
X = np.random.randn(100, 2)

# k-meansアルゴリズムでクラスタリング
km = KMeans(n_clusters=3, init='random', n_init=10, max_iter=300, tol=1e-04, random_state=0)
y_km = km.fit_predict(X)

# クラスタリング結果を表示
plt.scatter(X[y_km==0, 0], X[y_km==0, 1], s=50, c='lightgreen', marker='s', label='cluster 1')
plt.scatter(X[y_km==1, 0], X[y_km==1, 1], s=50, c='orange', marker='o', label='cluster 2')
plt.scatter(X[y_km==2, 0], X[y_km==2, 1], s=50, c='lightblue', marker='v', label='cluster 3')
plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], s=250, marker='*', c='red', label='centroids')
plt.legend()
plt.grid()
plt.show()

結果はこちら。
完璧!

image.png

補足: copilot君が考え中は右下のcopilotのアイコンがくるくる回る

image.png

コードのドキュメントを書いてもらう

このコードの説明を書いてもらう。

def fizzbuzz(num):
    if num % 3 == 0 and num % 5 == 0:
        return "FizzBuzz"
    elif num % 3 == 0:
        return "Fizz"
    elif num % 5 == 0:
        return "Buzz"
    else:
        return num

ドキュメントを書いてほしい関数を選択して、/doc を入力すると、いい感じに描いてくれる!

image.png

テストを書いてもらう

テストを書いてほしい関数を選択して /testを入力すると、別ファイルにテストコードを書いてくれる。

# BEGIN: 8f7e6d5c7b3a
import unittest
from fizzbuzz import fizzbuzz

class TestFizzBuzz(unittest.TestCase):
    def test_fizz(self):
        self.assertEqual(fizzbuzz(3), "Fizz")
        self.assertEqual(fizzbuzz(6), "Fizz")
        self.assertEqual(fizzbuzz(9), "Fizz")
    
    def test_buzz(self):
        self.assertEqual(fizzbuzz(5), "Buzz")
        self.assertEqual(fizzbuzz(10), "Buzz")
        self.assertEqual(fizzbuzz(20), "Buzz")
    
    def test_fizzbuzz(self):
        self.assertEqual(fizzbuzz(15), "FizzBuzz")
        self.assertEqual(fizzbuzz(30), "FizzBuzz")
        self.assertEqual(fizzbuzz(45), "FizzBuzz")
    
    def test_number(self):
        self.assertEqual(fizzbuzz(1), 1)
        self.assertEqual(fizzbuzz(7), 7)
        self.assertEqual(fizzbuzz(13), 13)

if __name__ == '__main__':
    unittest.main()
# END: 8f7e6d5c7b3a

ちゃんとできてる。

まとめ

  • コード生成力は高い印象を受けた
  • 日本語は弱め?
  • ただコードが書ける人は淘汰されて行くのだろう。。。
4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10