Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GitHub Copilot Tips and Tricks
Search
Yuichi Tanaka
March 17, 2024
Programming
43
20k
GitHub Copilot Tips and Tricks
Yuichi Tanaka
March 17, 2024
Tweet
Share
More Decks by Yuichi Tanaka
See All by Yuichi Tanaka
GitHub Copilot Tips and Tricks (en)
yuichielectric
1
310
How GitHub uses Codespaces
yuichielectric
3
1.3k
30分でわかるシステム運用アンチパターン / Operations Anti Patterns in 30 minutes
yuichielectric
13
20k
オープンソースのベストプラクティスを企業内で実践/How to implement InnerSource
yuichielectric
12
18k
GitHubにおける継続的デリバリー/How GitHub builds and deploy software
yuichielectric
12
4.5k
GitHubにおける GitHub Actions利用法/How GitHub uses GitHub Actions
yuichielectric
7
810
InnerSourceのすすめ / InnerSource
yuichielectric
8
2k
GitHub Pro Tips
yuichielectric
0
250
Other Decks in Programming
See All in Programming
Windows on Ryzen and I
seosoft
0
330
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
570
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
260
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
140
How to stabilize UI tests using XCTest
akkeylab
0
130
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
0
130
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
100
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
200
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.1k
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
150
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
150
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
150
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
52k
Docker and Python
trallard
47
3.8k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
180
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
770
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
150
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
770
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
86
Transcript
GitHub Copilotで できること一挙ご紹介 2024年10月版
田中 裕一 プリンシパルソリューションズエンジニア GitHub @yuichielectric
本日のトピック GitHub Copilotに搭載されている様々な機能、使い方について 「コード補完」、「チャット」、「エディタ機能への統合」、「Copilot Enterpriseでできること」というトピックに沿ってご紹介します。 ※ Visual Studio Code 1.95(2024年10月版)を前提としています。
コード補完 いかに適切な文脈を渡すか
GitHub Copilot LLM 文脈 提案
GitHub Copilot 文脈とは? GitHub Copilot拡張によって、現在のファイルのカーソルの前後のソースコードや、 別のタブで開いているファイルの中から、関連するコードスニペット (コメント含む)を選択し、優先順位、フィルタリングを経た上でプロンプトに 追加される情報のこと。 https://github.blog/2023-05-17-how-github-copilot-is-getting-better-at-understanding-your-code/
GitHub Copilot 関連するファイルは常に開いておこう ピンどめしておくと開き忘れを防ぐことができる。 例) • TypeScriptプロジェクトで使うライブラリの 型定義ファイル(.d.tsファイル) • テストコードを書く時のテスト対象のコード、
もしくはその逆
GitHub Copilot C++/C#で自動的に追加される文脈 直接参照しているヘッダーファイルは、開いているかどうかに 関わらず文脈として自動追加 C++: Visual Studio Code: C/C++拡張
1.21以降 + GitHub Copilot拡張1.205以降 Visual Studio: 2022 17.12以降 C#: Visual Studio: 17.11以降 https://devblogs.microsoft.com/cppblog/improving-github-copilot-completions-in-vs-code-for-c-developers/
GitHub Copilot 名前は大事 関連するコード箇所を探す上で、変数や関数の名前は大きなヒントとなる。 一貫性のある命名規則を用い、同一の概念に対して異なる名前を つけないように気をつけましょう。 後述する名前の提案機能も合わせて活用しましょう。
GitHub Copilot 良い提案を得るために • 複数の提案がある場合もあるので、それを確認 してみる。 ◦ コマンドパレットで “GitHub Copilot:
Open Completions Panel” • コメントとして、欲しいコードについての 説明を自然言語で書く。 ◦ 必要に応じて例も書く ◦ 例)「引数Xに〇〇という入力を渡したら××と いう値を返す関数」 • 自分でコードを書き始めてみる。 ◦ 書き始めたコードもCopilotにとっての 文脈となる。
GitHub Copilot 特定のファイルを対象外とする GitHubの管理画面(リポジトリ、OrganizationもしくはEnterprise)で 除外するファイルを指定することが可能。 除外対象となったファイルは - コード補完機能の利用ができなくなる - コード補完機能の文脈として使われなくなる
GitHub上にリポジトリがあるかどうかに関わらず、除外の対象とする ことが可能 https://docs.github.com/en/copilot/managing-copilot/managing-github-copilot-in-your-organization/setting-policies-for-copilot-in-your-organization/excluding-content-from-github-copilot
チャット スラッシュコマンド、エージェント、コンテキスト変数 を使いこなす
Chat エディタ上のコンテキストを踏まえた、Copilotとのチャット コーディングに関する質問への回答 コードの説明 ユニットテストの生成 コードの修正提案 可読性の向上 言語変換
GitHub Copilot
GitHub Copilot 何が文脈として使われるか? [前提] 基本的には開いているファイルが文脈の候補。 ただし例外もあり(後述)。 1. エディタ上でテキストを選択している場合
→ 選択している箇所のテキストが使われる 2. 何も選択していない場合 → アクティブなエディタで表示されている範囲の テキストが使われる 3. コンテキスト変数で指定する(後述)
GitHub Copilot Notebookで自動的に追加される文脈 Jupyter Notebook内でのインライン チャットでは、カーネルの状態 (変数や利用可能なパッケージ等) が自動的に追加される。
GitHub Copilot 特定のファイルを対象外とする GitHubの管理画面(リポジトリ、OrganizationもしくはEnterprise)で 除外するファイルを指定することが可能。 除外対象となったファイルの内容はチャットの文脈として 使われなくなる GitHub上にリポジトリがあるかどうかに関わらず、除外の対象とする ことが可能 https://docs.github.com/en/copilot/managing-copilot/managing-github-copilot-in-your-organization/setting-policies-for-copilot-in-your-organization/excluding-content-from-github-copilot
言語設定 チャットの返答や コミットメッセージの自動生成 (後述)の言語を指定可能 github.copilot.chat.localeOverride
コンテキスト 変数 #で始まり、プロンプトの中に 含めることで文脈を指定する ために使われるもの。 右の例の #file:BookDatabaseImpl.java の部分がコンテキスト変数。 この例だと、指定されたファイル 全体が文脈の対象となる。
GitHub Copilot 主要なコンテキスト変数一覧 #selection アクティブなエディタで選択されている箇所 #file 特定のファイル(VS Codeのファイル選択UIが表示される) #editor アクティブなエディタで表示されている箇所
#terminalLastCommand アクティブなターミナルの最後に実行したコマンドの結果 #terminalSelection アクティブなターミナルの選択されている箇所
GitHub Copilot コンテキスト変数の利用例 VS Code内のターミナルで、git diffで差分を表示した上で以下のプロンプトを実行 以下の観点でコードをレビューして、修正が必要な箇所を指摘してください。 • コードをさらに簡潔に書くことができるかどうか? •
このコードはコンパイルエラーやランタイムエラーを引き起こさないか? • セキュリティバグを入れ込んでしまっていないかどうか? #terminalLastCommand
GitHub Copilot
GUIでの コンテキスト の指定 チャット入力欄の📎アイコンを クリックすることでコンテキスト を以下から指定することも可能。 - エディタ上の選択範囲 - 現在のエディタの表示範囲
- ターミナル上の選択範囲 - ターミナルの最後のコマンド - コードベース全体 - 特定のシンボル - 特定のファイル
GUIでの コンテキスト の指定 ドラッグ&ドロップでファイルを コンテキストとしてチャットに 追加することも可能。
カスタム インストラクション (preview) チャットで生成されるコードに 対しての指示をファイルに あらかじめ指定することが可能。 チャットはコンテキストとして使 用するファイルを参考にコードを 生成するが、明示的に指示を出し たい場合には、この機能を使う
ことができる。
GitHub Copilot
カスタム インストラクション (experimental) テスト生成時のカスタムインスト ラクションは別の設定として指定 が可能。
スラッシュ コマンド / (スラッシュ) で始まる コマンドの事。 プロンプト中に指定することで Copilotへの依頼を簡潔に記載 することが可能。 右の例では
/explain を使って コードの説明を依頼している。
GitHub Copilot 主要なスラッシュコマンド /explain 選択されたコードを説明 /tests 選択されたコードのユニットテストを生成。もし既存のテストファイルがある場 合は、その内容を参照して新たなテストケースを追加する。 /doc 選択されたコードのドキュメンテーションコメントを生成
(後述のインラインチャットのみ) /fix 選択されたコードに含まれる問題を修正 /fixTestFailure 失敗したユニットテストを修正 /new 指定されたワークスペースの雛形を生成
エージェント @で始まり、プロンプトの中に 含めることで、どこから文脈を 収集するかを指定する。 右の例の @workspace の部分がエージェントの指定。 この例だと、開いていない ファイルも文脈の対象となる。
GitHub Copilot 主要なエージェント @workspace ワークスペース全体についてのチャット @terminal ターミナルについてのチャット @vscode VS Codeについてのチャット
チャット内で提 案された コードの採用 LLMを使用してエディタ内の コードにマッチするように採用 エディタのカーソル位置に 挿入 クリップボードにコピー
使用するモデル の選択 現時点では右の5つのモデルから 選択 ※ チャットで使用するモデルが 対象です。
Edit with Copilot (preview) 修正したいファイル群を指定し、 自然言語で望む変更を指定すると それらにファイルをまたがって 変更する機能。
GitHub Copilot
エディタ機能への統合
インライン チャット チャットペインだけでなく エディタの中でチャットを 実行することが可能。 ここで提案されたコードは エディタ上に直接追記される。
インライン チャット 例)エラー処理のコードを 提案してもらう。
インライン チャット 例)インラインチャットで /doc を実行してdocstringを 提案してもらう。
ターミナル インライン チャット 例)srcディレクトリ以下で ファイルサイズで上位5つの ファイルを列挙
エラーの 修正提案 エディタ上のエラー(赤い波線) 箇所のQuick Fixメニューの中に Copilotを使うアイテムが表示。 “Fix using Copilot”を選択すると、 修正提案を適用。
エラーの 修正提案 エディタ上のエラー(赤い波線) 箇所のQuick Fixメニューの中に Copilotを使うアイテムが表示。 “Fix using Copilot”を選択すると、 修正提案を適用。
シンボルの rename コマンドパレットから“Rename Symbol”を実行すると周囲の文脈 から適切と思われる名前を提案 してくれる。
コミット メッセージの 提案 現在の変更差分から、それを 説明するコミットメッセージを 提案。 リポジトリの直近10個の コミット、コミッターの直近10個 のコミットも参照。
コードレビュー レビューして欲しい箇所を 選択、もしくは現在の変更に 対してCopilotによるコード レビューを受けることが 可能。 レビューコメントはエディタ上に 表示され、可能な場合は変更提案 も提示される。その変更提案を 採用することも可能。
GitHub Copilot
コードレビュー レビュー観点をカスタム インストラクションとして 指定することも可能。
Thank you