「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- AIがコードを自動的に生成し、開発者の生産性を向上させるツール。
- LLMとIDEを繋ぐ、ExtensionとBridge機能から構成される。
- 殆どの重要な機能は、プロンプトのコントロールと出力の検証である。
ユースケース †
いずれも、GPTのコードやテキストの生成機能を用いている。
コード生成 †
- 生成(Chat的な生成)
- プロンプト:質疑、コメント、テストケース、コードテンプレート
- 生成内容:提案、エラー修正、リファクタリング(冗長性の削除、構造の改善、命名規則の統一)
- 自動補完で生成(IntelliSense?的な生成)
コンテキスト、型推論、APIドキュメント、カスタム
テストコード生成 †
コード生成の中でも、特殊なユースケースで、
プロンプトにテスト対象コードを入れ、テストコードをChat的に生成
- 単体テストの生成
- 統合テストの生成
- テストカバレッジの向上
翻訳(GPTの翻訳能力を活用) †
メリット †
IDE内で完結 †
高精度のコード生成 †
AIが提示するコードの精度が高く、品質向上に寄与する。
生産性向上 †
日々の開発をスムーズに進めコーディング速度をアップする。
詳細 †
機能一覧 †
コード・サジェスチョン †
- AIがコードのサジェスチョンを提供。
- 適切なコード断片を自動的に示す。
インライン・チャット †
- コードを書いているファイルの中でチャット機能を呼び出し、コードの生成や修正などを行う。
- プログラムのベースを新規作成したり、部分的な処理を追加したりする。
チャット †
- コードの生成や修正に関する指示をチャット形式で行う。
- AIとの対話を通じて、コードを効率的に作成できる。
フィルタリング †
- プロンプト・フィルタリング(ユーザーからCopilotへの指示)
- 提案フィルタリング(Copilotからユーザーへの答え)
- オフトピック・フィルタ
意図しない回答/ユースケースとになっていないかどうか
- パブリックコードとのマッチングフィルタ
- Copilotには、「Publicコードとの一致を防ぐ」という機能
- パブリックコードと一致し、この機能がON(Block)になっている場合、フィルタに引っかかる
- パブリックコードと一致していて、ユーザーがそれを許可する場合、Copilotはリファレンスを提示
- 品質、脆弱性フィルタ
- SQLインジェクションやハードコードされたシークレットなどを確認し安全なコードを提案
- このフィルタに引っかかった場合、その旨を知らせる回答をだすという挙動になっている。
- 毒性フィルタ
- ヘイトスピーチや差別、自傷などの内容
- 中にもさらに2つのフィルタがある。
- LLMとして判別するもの
- あらかじめリストアップされたキーワードとのマッチング
設定の仕方 †
アカウントに紐付ける †
GitHubのアカウントに権利を付与(個別契約や会社契約に紐付け)
IDEにExtensionをインストール †
Visual Studio CodeにGitHub Copilot系のExtensionをインストール
IDEからログイン †
プロキシ環境下での追加設定 †
Settings.jsonに以下の様な設定を追加
"http.proxyStrictSSL": false,
"http.proxy": "http://<ユーザ名>:<パスワード>@< プロキシサーバのアドレス>:<プロキシサーバのポート>",
「http.proxy」のユーザ名、パスワードはプロキシサーバの設定によっては不要。
使い方 †
ワークスペースを開く †
- VS Codeではワークスペースと呼ばれる、フォルダ単位で開く。
- GitHub Copilotではワークスペース内のソースコードを参照して候補を提案する。
- 参考になる関連ソース・ファイルは、ワークスペース内に格納しておくとよい。
IntelliSense? †
- CopilotはIDEで用意されている補完機能のように自動で候補を提案。
- 候補はグレーアウトされた状態で表示され、Tabを入力することで、反映できる。
候補を提案させる。 †
「Ctrl + I」で対話形式でのプロンプトからコードを生成させる。
複数の候補を提案させる。 †
「Ctrl + Enter」で10の提案を表示する別のパネルが開く。
雑感 †
タイタニックデータセットのデータ分類問題をGPTを使って描いた。
(当然と言えば当然だが、)同様のことが、他のGPT系Chatサービスでも可能。
GPT性能 †
- 基本的に、コードの提案は実用レベルに達している。
- ただし、あくまでサンプルコードとしての扱い(脆弱性、ライセンスなど)。
- コレは、ググったサンプルコードの扱いと同じなので、今更感。
- また、ある要件に対して、どのようか仕様をくむべきか?と言う点は、
GPTでは回答できないケースもある(タイタニックデータセット例で回答できた)。
IDE組み込み †
IDE組み込みの場合、
- IntelliSense?的な利用が最も意味が在りそう。
- IDEとGPT(Web)間の行き来が不要と言う点は、コーダー的にはメリットが大きそう(アーキテクトにはメリットは少なそう)
- また、様々なコマンドが用意されているが、これらを使いこなすのは難しいため、慣れるまではデメリットと考える。
プロンプティング †
他のGPT系Chatサービスとの差別化ポイント
- Chat的に使う場合は、他のGPT系Chatサービスとの差別化ポイントは、自動的なプロンプティングとなる。
- ただし、プロンプティングがブラックボックス化されていることは逆にデメリットになりかねない。
フィルタリング †
他のGPT系Chatサービスとの差別化ポイント
- GitHub Copilotにはフィルタリングが実装されており、他のGPT系Chatサービスとの差別化ポイントとなっている。
- ただし、フィルタリングから得られるベネフィットについては評価が難しいと考える(機能も不透明)。
- 銀行系システムなどでWeb参照なども禁止されるようなシステム開発では安心感を与える可能性がある。
参考 †
Tags: :.NET開発, :構成管理ツール, :CI, :BI/AI