こんにちは。プロダクト開発本部の初鹿です。
この記事は、Supershipグループ Advent Calendar 2023の2日目の記事になります。
はじめに
皆さんはGitHub Copilot使いっていますでしょうか!?
ChatGPTが2022年11月末に花開き、Stable Diffusionにはじまる画像生成AIブーム。
2023年はAIの単語を聞かなかった日は無いほど世の中を席巻していました。
巷ではAIで仕事が奪われるなどの記事が目につくようになりました。
かくいう私も日々の業務で似たようなコードの生成やデザインパターンでの実装を行う度に
パターンや繰り返しなら自動生成できるんじゃないのか?としばしば思っていました。
そこで、このAIビッグウェーブを期にうまくAIと付き合っていく方法を探ることがこれからのエンジニア人生に重要なんじゃないかと思いました。
幸いにも弊社ではGitHub Copilotを使用する機会があり、気軽に試せる環境があったので、他の人のTipsなどを聞きながら自分に適した付き合い方を模索いたしました。
私なりの使い方を共有しようと思います。
今回はVSCodeにGitHub Copilot拡張を導入されている前提で話を進めます。
Prompt Craftingを意識する
GitHub Copilotも基本的には情報を渡し、如何に精度の高いレスポンス(提案)を返してもらうかが重要になってきます。
Prompt CraftingというのはGitHubの社内用語のようでしてどのような情報を渡すかCraftできるかがキーになっているようです。
その指針として以下の4つが提唱されています。
- Language Marker
- プログラミング言語情報
- 現状だと、GitHub Copilotは同じプログラミング言語のファイルを読んで提案をしてきます。ですので、このファイルはどの言語なのかなどの情報を読み込んで判断しています。rubyですと
#! /usr/bin/env ruby
などの記述のこと
- 現状だと、GitHub Copilotは同じプログラミング言語のファイルを読んで提案をしてきます。ですので、このファイルはどの言語なのかなどの情報を読み込んで判断しています。rubyですと
- プログラミング言語情報
- Path Marker
- 現在のファイルパス
- このファイルはlib配下なのかmodule配下なのかファイルがどの階層にあるかなどの情報のことです。
- 現在のファイルパス
- Neighboring Tabs
- 非アクティブなオープンしているタブ
- こちらは現在コーディングしている以外に開いているタブのことです。GitHub Copilotでは最大20ファイルの非アクティブなタブ(ファイル)を参照することができます。FIFOでファイルをアクティブにするなど順番ごとにキャッシュしてこのファイルの次はこのファイルを参照したってことは... などとファイルをアクティブにするという行為も学習の一環として利用されています。
- 非アクティブなオープンしているタブ
- Code Retrieval
- コードベースの中の他の場所のコード
- 文字の類似性でファイル内を検索しているので一貫性のある命名規則や関数名を意味のあるシンプルなものにすると精度が上がっていくそうです。
- コードベースの中の他の場所のコード
このような、裏側でのちょっとした仕組みを意識して使ってみると精度が上がるかもしれません。
宣言ファイルをなどをピン留めする
これは、TypeScriptだとわかりやすいですが、型の定義ファイルなどをVScodeのタブを右クリックしてメニューのピン留めする
を選択。するととピン留めすることができ、関数内の情報を類推して提案精度を高めることができるというTipsです。
ショートカットを駆使する
macOS のキーボード ショートカット
アクション | ショートカット |
---|---|
インライン候補を受け入れる | タブ |
インライン候補を無視する | Esc |
次のインライン候補を表示する | Option (⌥) または Alt+] |
前のインライン候補を表示する | Option (⌥) または Alt+[ |
インライン候補をトリガーする | Option (⌥)+\ |
GitHub Copilot を開く (別のペインに追加の候補) | Option (⌥) または Alt+Return |
このようにいくつかの候補の中から提案を受け入れたり次の候補に進んだりなどショートカットを駆使することによってサクサクとサイクルを回していけます。
GitHub Copilot Chatを使いこなす
私が今一番使っているのがこちらになっています。
こちらはいわいるチャット形式で質問に対してCopilotくんが返答を返してくれるもので何が便利かというとコード選択してコードの説明
を選択するだけでこの関数は何をやっているものかを説明してくれて更に追加の質問内容まで提案してくれます。
更にテストを書いてや、ドキュメントを書いてなどを依頼すると文句も言わずに回答してくれます。
これを駆使し、使用したことのない言語やライブラリなどでいろいろ質問し理解のスピードが格段に上がり大変感動しました。
しかし、局所的な知識は得られても体系的には知識は得られないので体系的に学ぶにはやはり書籍等などで保管する必要があるなと感じました。
おわりに
一部ではありますが、私なりに便利だと思った機能、Tipsを紹介させていただきました。
皆様のより良いプログラミング体験の参考になれば幸いです。
参考:
最後に宣伝です。
Supershipではプロダクト開発やサービス開発に関わる人を絶賛募集しております。
ご興味がある方は以下リンクよりご確認ください。
Supership 採用サイト
是非ともよろしくお願いします。