テクノロジー

学生必見!GitHub Copilotに指示して始める快適コーディングライフ

松原 太一

今回は、GitHub Copilotがまじで便利なので紹介します。Tensorflowやpytorchのような深層学習ライブラリのことをあまりよく知らなくても、約10秒で深層学習デモのサンプルを生成できます。

筆者は普段、研究活動でコーディングをしているので日常的に使っています。

GitHub Copilotとは

GitHub Copilotは、最近話題のAI プログラマーアシスタントです。自然言語を使って、コードを生成したり、コードの意味を考えたり、使用者が書いているコードの先を予測して、コード候補を提示してくれたりします。

GitHub Copilot Chatは、ChatGPTをVSCodeに追加して使用できるみたいな、会話形式のインターフェースです。

月額制だが、学生は無料で使える!!

まず、これがやばすぎです。学生には、無料のGitHub Educationプログラムがあり、学生としての身分を証明すれば、VSCode上の拡張機能が使えます。研究に携わる大学院生や社会人学生など、みんな使えます。筆者は社会人大学院生なので、ばりばり使っています。

本当に便利なので、登録していない人は今すぐ登録しにいってください。また、学生でなくてもコーディングを生業にしている人ならおすすめです。

▼GitHub.com
https://GitHub.com/edu

GitHub Copilotの登録・インストール

GitHub Copilotの登録からインストールについては、すでに詳しい記事がありました。ここを参考にしてみてください。

知らないライブラリの深層学習デモを10秒で生成

著者はいつも、torchを好んで使っています。不慣れなtensorflowライブラリを使って深層学習デモを生成してみましょう。

VSCodeに拡張機能を入れ、有効にした状態とします。

VSCodeに拡張機能を入れ、GitHub Copilotに指示を出す準備完了。
VSCodeに拡張機能を入れ、GitHub Copilotに指示を出す準備完了。

指示通りCtrl + I で実装指示

Ctrl + I すると、指示用のボックスが出てくるので以下を指示しました。これで8秒です。

> tensorflowで完全な深層学習デモを生成してください。

コード生成は2秒くらいで完了

以下が提示されたのでアクセプト(同意)します。

import tensorflow as tf
from tensorflow import keras

# Load the dataset
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# Preprocess the data
x_train = x_train / 255.0
x_test = x_test / 255.0

# Define the model architecture
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

# Compile the model
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Train the model
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))

# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

とりあえず出てきました。

何も考えないまま、取りあえず適当なpythonの環境で実行します。tfを入れていない人は入れましょう。

実行

python3 test.py

実行結果

私が使っている環境ではGPUは入れていないので、CPU上で動作させました。エラーも出ず、実行されました。いいですね。

tensorflowの実行結果。
tensorflowの実行結果。

コードの意味を尋ねる

取りあえず動くのを確認したら、tensorflowの実装の仕方や実装感覚を、Copilotと会話しながら勉強していきましょう。

モデルアーキテクチャーの定義を確認。
モデルアーキテクチャーの定義を確認。

コードの中で処理内容や、モデル概要がよく分からないときは、選択しましょう。選択した状態のまま、GitHub Copilot Chatの左サイドバーのチャットボックスに行き、以下を実行します。

> #selection どのような形状の何のデータを、どのような形状のモデルに入力している?

#selection というのは、選択した範囲内容のコンテキストを前提とした上で、質問の内容を受け取り回答してくれます。便利なので使いましょう。

実際に以下の回答が返ってきました。

> このモデルは、形状が(28, 28)の2次元データを入力として受け取ります。この形状は、一般的に28×28ピクセルの画像データを表します。このデータは、最初のレイヤーである`keras.layers.Flatten`によって、784要素の1次元配列(28 * 28 = 784)に変換(平坦化)されます。

この平坦化されたデータは、次に128ノードの全結合層(`keras.layers.Dense`)に送られます。このレイヤーは、データの非線形変換を行います。

最後に、10ノードの全結合層(もう一つの`keras.layers.Dense`)に送られます。このレイヤーは、各ノードが1つのクラスを表す10クラス分類問題の出力を生成します。出力は、10要素の1次元配列で、各要素は特定のクラスにデータが属する確率を表します。これらの確率は全て合計すると1になります。

すごいですね。最高です。何か、コードリーディングのときにわけわかんない処理とか出てきたら、気軽に聞いていきましょう。自身の理解の補助になったりします。

次コード補完

インライン補完の機能が便利すぎです。

コード全体のコンテキストを加味して、coderが次に何を書きたいかを予測して、補完候補を提示してくれます。

例えば、modelオブジェクトを作った後に、モデルのパラメータ数を確認するのにprint文を出力したいとします。

私は、modelの下にコメントアウトを書きました。

import tensorflow as tf
from tensorflow import keras

# Load the dataset
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# Preprocess the data
x_train = x_train / 255.0
x_test = x_test / 255.0

# Define the model architecture
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

# print the number of parameters in the model (made by coder)

# Compile the model
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Train the model
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))

# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

その次の行で待っていると、勝手にCopilotがコードを構築してくれます。

printを待機するコードも自動で構築。
printを待機するコードも自動で構築。

受け入れるときは、Tabキーを押してアクセプトしておしまいです。実行により、次のようなログが出ました。

モデル sequential の要約を示す実行結果のログ。
モデル sequential の要約を示す実行結果のログ。

GitHub Copilotを頼れる相棒にするには?

GitHub Copilotを使う上で大事なのは、AIが理解しやすいようなコンテキスト(文脈)でコードを展開することです。何をしてほしいかをコメントアウトで先に書いて、次の実装の方向性を示してあげるわけです。Tab待ち職人とも言えますが、実はこれがやってみると難しいです。

イメージとしては、「使用者がAIを導き、方向づけして上手く操る」みたいな感覚です。ポケモントレーナーがポケモンに技指示を出す感覚、野球の監督やコーチが選手にサインを出す感覚と例えてもいいかもしれません。

GitHub Copilotが理解しやすいようにコードをきれいに読みやすく書いていくことで、結果としてCopilot自身もより有益なコード補完を出しやすくなります。ごくまれに、テキストが補完されなくなる時がありますが、再起動すれば元に戻ります。使い倒しては結果を見ながら、いろいろ工夫をしていくことで、どんどん効率が上がっていく実感があります。

学生の皆さんはぜひ、今の自分の社会的な立場を最大限に利用して、新しいコーディングの世界を肌で感じてみてください。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
松原 太一
松原 太一
研究員(専門分野:バイオインフォマティクス・深層学習・量子コンピューティング)
2021年から株式会社BlueMemeで量子コンピューティングやゲノム情報解析の研究開発を担当。専門分野は、量子AIの生命医科学への応用。BlueMemeに在籍する傍ら、2023年度より社会人学生として、九州大学大学院システム生命科学府へ進学し博士号取得を目指す。
松原 太一の記事一覧

記事URLをコピーしました