ハク(エンジニア)
GitHub Copilotを使ってみた
ハク(エンジニア)
2023.07.10
IT技術
導入
- 参考: https://docs.github.com/ja/copilot/getting-started-with-github-copilot
- 僕はJetBrains IDEを使用
使い方
- コメントを書けばある程度は作ってくれる
- 例えば、以下のコメントを記述
1# 1から100までのリストで、2で割り切れる場合はfuga、3で割り切れる場合はhoge 2# ただし、2と3の両方で割り切れる場合はfugahogeと表示する 3# それ以外の場合は数字を表示する
- そうしたら以下のソースコードが生成される
1for i in range(1, 101): 2 if i % 2 == 0 and i % 3 == 0: 3 print('fugahoge') 4 elif i % 2 == 0: 5 print('fuga') 6 elif i % 3 == 0: 7 print('hoge') 8 else: 9 print(i)
- 例えば、以下のコメントを記述
- メソッドも生成できて、引数や返り値を指定することもできます
- 例①:引数指定なし
- コメント
1# fugahogeのメソッドを作ってください 2# メソッドの処理内容は1から100までのリストで、2で割り切れる場合はfuga、3で割り切れる場合はhoge 3# ただし、2と3の両方で割り切れる場合はfugahogeと表示する 4# それ以外の場合は数字を表示する
- 生成されるソースコード
1def fugahoge(): 2 for i in range(1, 101): 3 if i % 2 == 0 and i % 3 == 0: 4 print('fugahoge') 5 elif i % 2 == 0: 6 print('fuga') 7 elif i % 3 == 0: 8 print('hoge') 9 else: 10 print(i)
- コメント
- 例②:引数指定あり
- コメント
1# fugahogeのメソッドを作ってください 2# 引数は以下とします 3# - end: 数字の終わり 4# - divided_by_2: 2で割り切れる場合の文字列 5# - divided_by_3: 3で割り切れる場合の文字列 6# - divided_by_2_and_3: 2と3の両方で割り切れる場合の文字列 7# 処理の内容は以下とします 8# - 返り値用のフラグを初期化 9# - 1からendまでのループ内で、2で割り切れる場合はdivided_by_2、3で割り切れる場合はdivided_by_3 10# - ただし、2と3の両方で割り切れる場合はdivided_by_2_and_3と表示し、返り値用のフラグをTrueにする 11# - それ以外の場合は数字を表示する 12# - ループ内に2と3の両方で割り切れる数字が存在する場合最後はTrueを返す 13# 返り値はTrueかFalseとする
- 生成されるソースコード
1def fugahoge(end, divided_by_2, divided_by_3, divided_by_2_and_3): 2flag = False 3for i in range(1, end + 1): 4 if i % 2 == 0 and i % 3 == 0: 5 print(divided_by_2_and_3) 6 flag = True 7 elif i % 2 == 0: 8 print(divided_by_2) 9 elif i % 3 == 0: 10 print(divided_by_3) 11 else: 12 print(i) 13return flag
- コメント
- 例①:引数指定なし
注意点
- Copilotはソースコードを生成してくれますが、過信は禁物です。間違っているソースコードも生成することもある
- 例えば、以下のコメントを記述
1# fugahogeのメソッドを作ってください 2# 引数は以下とします 3# - end: 数字の終わり 4# - divided_by_2: 2で割り切れる場合の文字列 5# - divided_by_3: 3で割り切れる場合の文字列 6# - divided_by_2_and_3: 2と3の両方で割り切れる場合の文字列 7# 返り値は1からendまでのリストで2と3の両方で割り切れる数字が存在する場合はTrueを返す 8# 処理の内容は以下とします 9# - 1からendまでのリストで、2で割り切れる場合はdivided_by_2、3で割り切れる場合はdivided_by_3 10# - ただし、2と3の両方で割り切れる場合はdivided_by_2_and_3と表示し、返り値用のフラグをTrueにする 11# - それ以外の場合は数字を表示する
- そうしたら以下のソースコードが生成される
1def fugahoge(end, divided_by_2, divided_by_3, divided_by_2_and_3): 2 for i in range(1, i + 1): 3 if i % 2 == 0 and i % 3 == 0: 4 print(divided_by_2_and_3) 5 elif i % 2 == 0: 6 print(divided_by_2) 7 elif i % 3 == 0: 8 print(divided_by_3) 9 else: 10 print(i) 11 return True if end >= 6 else False
- 見ての通り、返り値の処理が間違っています。間違っている場合は、コメントに詳細を書くとより正しい処理が生成されます(↑の例②)
- 例えば、以下のコメントを記述
- インポートが必要なモジュールは自動でインポートしてくれないので、個別に命令コメントを書く必要があります
- 例えば、ソースコードを書き終わったあとに先頭に「このソースコードで必要なモジュールをインポートしてください」ってコメントを書くとか
- 日本語のコメントより英語のコメントのほうが正確な処理を書いてくれる気がします・・・
まとめ
- GitHub Copilotである程度のコーディングは自動化できるが、過信は禁物
- 複雑な処理は書けないが、変換系、出力系のコードは書ける
- 引数、返り値、処理の指定はできる
- インポートは自動でしてくれない ← ココ大事
- 英語に自身があるなら英語でコメント書いたほうがいいかもしれない
余談
- 元々、他サイトの求人情報(例:ハロワ、indeed等)のデータを使って、それをGoogle for Jobs形式に変換してくれるコードをGitHub Copilotで生成する
- 結果としてはソースコードの生成はできるが手動で修正する必要がある
- 変換前のデータは特定のファイル(csvやjson等)にまとめる想定
- 変換前のデータは形式を統一する必要があるため、データ生成はChatGPT任せる
- 結果としてはChatGPTは想定通りにデータをまとめてくれた
- 変換前のデータは形式を統一する必要があるため、データ生成はChatGPT任せる
- ・・・・・・ん?ChatGPTでGoogle for Jobs形式に変換してもらったらよくね?できるのか?
- できてしまった・・・
- 結論(言いすぎる気がするがあえてスルー):ChatGPTで他サイトの求人情報のテキストデータを貼り付けてGoogle for Jobs形式に変換してもらえる。GitHub Copilotでソースコードを生成・テキストデータを特定な形式に統一する必要は一切なし!!!
- ちなみに余談のところは別記事にまとめる予定なので、お楽しみに!
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
ハク(エンジニア)
Show more...お酒が友達のバックエンドエンジニアです。 インフラとお友達になりたい…。 最近暑いので水分補給と酔分補給を怠らないようにしましょう。