「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>GitHub資格Copilot]]
--[[GitHub Copilot - 学習ガイドPDF]]
--GitHub Copilot MS Learn Collections
--[[GitHub Copilot模擬試験]]

* 目次 [#d5271c83]
#contents

*概要 [#jb3afd19]
- GitHub Copilot の基礎 - AI ペア プログラマーの理解~
https://learn.microsoft.com/en-us/training/paths/copilot/

**[[Responsible AI with GitHub Copilot>https://learn.microsoft.com/en-us/training/modules/responsible-ai-with-github-copilot/]] [#j76caf34]
GitHub Copilot による責任ある AI

***ユニット [#h30ee971]
-Introduction 3 min

-Mitigate AI risks 3 min~
AIリスクの軽減

-Microsoft and GitHub's six principles of responsible AI 3 min~
マイクロソフトとGitHubの責任あるAIの6原則

--公平性: AI システムはすべての人を公平に扱う必要があります。
--信頼性と安全性: AI システムは信頼性と安全性を備えて動作する必要があります。
--プライバシーとセキュリティ: AI システムは安全でプライバシーを尊重する必要があります。
--包括性: AI システムはすべての人に力を与え、人々を関与させる必要があります。
--透明性: AI システムは理解可能でなければなりません。
--説明責任: 人々は AI システムに対して説明責任を負うべきです。

※ AI-900と同じ内容

***Knowledge check & summary [#wcb5209a]
-Knowledge check 3 min
-Summary 3 min

**[[Introduction to GitHub Copilot>https://learn.microsoft.com/en-us/training/modules/introduction-to-github-copilot/]] [#dc926537]
GitHub Copilotの紹介

***ユニット [#ie24bc7b]
-Introduction 1 min

-GitHub Copilot, your AI pair programmer 2 min~
GitHub Copilot、あなたのAIペアプログラマー

--GitHub Copilot features
---Copilot for chat
---Copilot for pull requests
---Copilot for the CLI

--Subscription plans

---GitHub Copilot Business~
社内で GitHub Copilot を使用できるユーザーを制御

---GitHub Copilot Enterprise~
・GitHub Enterprise Cloud を通じて組織で利用~
・GitHub Copilot Business+組織向けのパーソナライゼーション レイヤー(RAG的な)

-Interact with Copilot 2 min~
Copilotとの対話

--Inline suggestions
--Multiple suggestions
--Inline chat
--Copilot chat
--Command palette(VScodeの機能ではなく、Copilot拡張でエディタ上に表示されるGUI)
--Comments to code
--Explanations
--Automated test generation

-Set up, configure, and troubleshoot GitHub Copilot 7 min~
GitHub Copilotのセットアップ、設定、トラブルシューティング

--Copilotにサインアップ

--VS Code で Copilot を構成する
---Copilot 用の VS Code 拡張機能を追加する
---VS Code で Copilot を有効または無効にする
---VS Code でインライン提案を有効または無効にする

--VS Code で Copilot のトラブルシューティングを行う

***Knowledge check & summary [#j431adc0]
-Knowledge check 5 min
-Summary 1 min

***Exercise [#e3bca2c6]
-Exercise - Develop with AI-powered code suggestions by using GitHub Copilot and VS Code 1 min~
演習 - GitHub CopilotとVS Codeを使って、AIによるコード提案で開発する
>https://github.com/skills/getting-started-with-github-copilot

**[[Introduction to prompt engineering with GitHub Copilot>https://learn.microsoft.com/en-us/training/modules/introduction-prompt-engineering-with-github-copilot/]] [#n5ffcc89]
GitHub Copilot を使用したプロンプトエンジニアリングの紹介

***ユニット [#z1256d1a]
-Introduction 2 min

-Prompt engineering foundations and best practices 7 min~
迅速なエンジニアリングの基礎とベストプラクティス

--プロンプトエンジニアリングとは

--迅速なエンジニアリングの原則
---Single(単一)
---Specific(具体的)
---Short(短い)
---Surround(囲う)

--迅速なエンジニアリングのベストプラクティス
---十分な明確さを提供する
---詳細を十分に伝える
---学習のための例を提供する
---アサートと反復

--Copilotがプロンプトから学習する方法
---Zero-shot learning
---One-shot learning
---Few-shot learning

-GitHub Copilot user prompt process flow 5 min~
Copilot がユーザーのプロンプトからコード提案するまでのすべての手順

--インバウンドフロー:~

---1. 安全な迅速な伝送とコンテキスト収集~
エディタで開いているタブの周囲のコード、ファイル、コンテンツを考慮。

---2. プロキシフィルター~
プロンプトインジェクションなどのブロック

---3. 毒性フィルタリング~
生成内容に問題や個人データが入らないようにフィルタリング

---4. LLMによるコード生成

--アウトバウンドフロー:~

---5. 後処理と応答の検証~
コード品質、一致する公開コード (オプション) のチェック

---6. 提案の伝達とフィードバックループの開始~
ユーザーのアクションに基づいて学習/改善

---7. 以降繰返しコード生成機能を改良。

-GitHub Copilot data 4 min~
GitHub Copilot のデータ

--GitHub Copilot コード提案のデータ処理~
エディタのCopilot は、プロンプトを保持しない。

--GitHub Copilot チャットのデータ処理~
---フォーマット:生成された応答を細心の注意を払ってフォーマット
---ユーザー エンゲージメント:チャット インターフェイスは会話履歴を維持
---データ保持:入出力からコンテキストを 28 日間保持

--GitHub Copilot Chat でサポートされているプロンプトの種類
---直接的な質問:問題に関する具体的な質問
---コード関連のリクエスト:生成、変更、説明
---自由形式の質問:概念を探ったりガイダンスを求めたり。
---コンテキスト プロンプト:カスタマイズされたサポートを求める。

--限定されたコンテキストウィンドウ
---4k トークンのコンテキスト ウィンドウで動作
---通常、約 200-500 行のコードまたは最大数千のトークンの範囲
---プロンプトを作成するときはコンテキスト ウィンドウの制限に注意

-GitHub Copilot Large Language Models (LLMs) 4 min~
GitHub Copilot大規模言語モデル(LLM)

---GitHub CopilotにおけるLLMによるコーディングに関する提案
---LoRA(フルファインチューニングより軽量な代替手段)の微調整

***Knowledge check & summary [#a71989c0]
-Knowledge check 6 min
-Summary 2 min

**[[Using advanced GitHub Copilot features>https://learn.microsoft.com/en-us/training/modules/introduction-prompt-engineering-with-github-copilot/]] [#t9b7f03d]
高度なGitHub Copilot機能の使用

***ユニット [#k36ca717]

-Introduction 1 min

-Advanced GitHub Copilot features 2 min~
GitHub Copilotの高度な機能

--The basics~
ゴースト テキストは無視するか、Tabキーを押して受け入れ。

--Chatting~
左側のサイドバーにあるチャット アイコンで左ペインにインターフェイスが開く。

--Using inline chat~
Windows ではCtrl+iでアクセス

--Slash commands~
[[Command palette(既出)>#ie24bc7b]]と比較し、コーディング中に簡単かつ即座に利用できる~
(GitHub CopilotのSlash commandsは、&color(red){[[GitHubのSlash commands>GitHub Foundations模擬試験#g43de288]]と全然違うので要注意};)

--Agents~
@terminal、@workspace、@vscodeなどのコンテキストを使用して質問

-Applied GitHub Copilot techniques 3 min~
GitHub Copilotの応用テクニック

--暗黙のプロンプト:inline chat+Slash commands~
コマンドの後ろにプロンプトを入力しないコマンド(実際は、コードからプロンプトを推測

--選択的コンテキスト:Agents

***Exercise [#pa7daebd]
https://github.com/codespaces/new/MicrosoftDocs/mslearn-advanced-copilot

-Exercise - Set up GitHub Copilot to work with Visual Studio Code 5 min~
演習 - Visual Studio Codeで動作するようにGitHub Copilotをセットアップする~

-Exercise - Update a web API with GitHub Copilot 5 min~
演習 - GitHub Copilot を使ってウェブ API を更新する

--インライン・チャットで新しいルートを追加する
 Create a new route that exposes the cities of a country/region.

--スラッシュ・コマンドを使用してテストを作成する
 /tests help me to create a new test for this route that uses Spain as the country/region.

--エージェントを利用してドキュメントを作成する
 @workspace I want to document how to run this project so that other developers can get started quickly by reading the README.md file.

***Knowledge check & summary [#ia6bf92c]
-Knowledge check 5 min
-Summary 1 min

**[[GitHub Copilot Across Environments: IDE, Chat, and Command Line Techniques>https://learn.microsoft.com/en-us/training/modules/github-copilot-across-environments/]] [#rbb8482f]
環境をまたぐ GitHub Copilot: IDE、チャット、コマンドラインテクニック

***ユニット [#jc4b15f9]
-Introduction 3 min

-Code completion with GitHub Copilot 6 min~
GitHub Copilotによるコード補完

--サポート言語:Python、JavaScript、Java、TypeScript、Ruby、Go、C#、C++
--インテリセンス:自動提案、複数の提案パネル(Windows or Linux: Alt+] (next), Alt+[ (previous))
--活用ポイント:メソッドの実装、命名規則、書式設定、コメント スタイル、デザイン パターン

--コメントを組み込んで提案を強化
---自然言語で書かれたコメントからコンテキストを分析して理解
---様々な種類のコメント:インライン、ブロック、TODOコメント、ドキュメンテーション文字列(API、Docstrings)
---コメント駆動型コード生成:関数実装、コード補完、変数命名、アルゴリズム選択

-GitHub Copilot Chat 9 min

--シナリオ
---複雑なコード生成
---デバッグ支援
---コードの説明

--応答改善方法
---スコープ参照:ファイル参照(#file コマンド)、環境参照(@terminal、@workspace、@vscode)
---スラッシュ・コマンド:クエリの意図を素早く指定(生成:/generate、説明:/explain、文書化:/doc、修正:/fix、性能改善:/optimize、テスト生成:/tests)
---スラッシュ・コマンドとスコープ参照と環境参照(Agents?)を組み合わせて使用できる。

-フィードバック共有
--提案にマウス カーソルを合わせると、賛成ボタンと反対ボタンが表示される。
--提案が役に立ったと評価、👍️、役に立たなかったと評価👎

-GitHub Copilot for the Command Line 5 min~
コマンドラインのGitHub Copilot

--シェル用のGitHub Copilot(コマンド)
 gh copilot xxx(ghcx)

---エイリアス設定が可能(後述)
 gh copilot explain → ghce
 gh copilot suggest → ghcs

---コマンドの説明を取得
 gh copilot explain "sudo apt-get"

---コマンドの提案を取得
 gh copilot suggest "Undo the last commit"

---提案されたコマンドの実行~
ghcsで、Execute commandオプションを選択
 ghcs "What command to see running docker containers"
 
 Suggestion:
   sudo launchctl list
 
 ?Select an option
 >Execute command
 
 ?Are you sure you want to execute the suggested command?
 > Yes
 
 Password:
 PID Status e...

---提案されたコマンドを修正~
ghcsで、Revise commandオプションを選択
 
 Suggestion:
   docker ps
 
 ?Select an option
 >Revise command
 
 ?How should this be revised?
 >Make sure it includes both running and stopped containers
 
 Suggestion:
   docker ps -a

--設定オプション
---エイリアス設定: gh copilot explain → ghce、gh copilot suggest → ghcs
---フィードバック:提案を改善するためにユーザーからのフィードバックを奨励
---組織設定:管理者は特定の機能へのアクセスを有効または無効に
---データ処理:使用状況データを保持して製品の改善に使用するかどうかを設定

***Knowledge check & summary [#r4d009c8]
-Knowledge check 15 min
-Summary 5 min

**[[Management and customization considerations with GitHub Copilot>https://learn.microsoft.com/en-us/training/modules/github-copilot-management-and-customizations/]] [#t7f4d161]
GitHub Copilot の管理とカスタマイズに関する考慮事項

***ユニット [#l1eee640]
-Introduction 2 min

-Explore GitHub Copilot plans and their associated management and customization features 5 min~
GitHub Copilotのプランと、関連する管理およびカスタマイズ機能を紹介します。

--管理ポリシー機能
---Free & Pro:パブリックコードフィルターのみ有り
---Business :GitHub Enterprise Cloud不要(カスタマイズ機能に関係)
---Enterprise:GitHub Enterprise Cloud必要(すべての機能をサポートする)

--カスタマイズ機能
---Free & Pro & Business:チャットで組織コード、組織KBをRAGる機能は無し
---Enterprise:すべての機能をサポート(GitHub Enterprise Cloudによる)

--組織の料金プラン選択に重要な要素
---Business/Enterpriseは、より強力なプライバシー制御を提供
---Business/Enterpriseは、機密データを組織のプライバシー ポリシーに従って処理
---データの収集と保持:Copilotがプロンプトと提案を収集して保持するかどうかを選択
---IP補償とデータ プライバシーは、法的、セキュリティ、顧客の問題を回避するために重要

-Explore contractual protections in GitHub Copilot and disabling matching public code 5 min~
GitHub Copilotにおける契約上の保護と、公開コードとのマッチングを無効にする方法を探る

--IP(知的財産)補償:Business/Enterprise プランでは提案が第三者のIP権利を侵害した場合、GitHub が法的責任を負う(一致する公開コード設定をブロックする設定が必要)
--一致する公開コード設定をブロックする設定は、GitHubプロフィール[Your enterprises]/[Your organizations]→[settings]→[Copilot]→[提案]のアタリで設定できる。
--データ保護契約 (DPA):データ プライバシー規制への準拠を保証するために講じられる対策を概説した DPA を提供。
--Copilot トラスト センター:Copilot の仕組みに関する詳細な情報を提供。

-Manage content exclusions 7 min~
コンテンツ除外の管理

--コンテンツ除外がコード提案に与える影響
---当該ファイルではコード補完は利用できなくなる。
---当該ファイルの内容は、他のファイルのコード補完の提案には反映されない。
---当該影響を受けるファイルの内容は、Copilot Chat の応答には通知されない。

--コンテンツ除外の設定方法
---組織のコンテンツ除外を設定する:一致する公開コード設定をブロックする設定と同じ場所
---リポジトリのコンテンツ除外を構成:リポジトリのsettings

--コンテンツ除外の制限
---IDEの制限:一部の統合開発環境 (IDE) ではコンテンツの除外が適用されない場合がある。
---セマンティック情報:除外されていないファイルから除外されたファイル情報を引き続き使用することがある。
---ポリシー範囲:コンテンツ除外設定は、コンテンツ除外を構成する組織のメンバーにのみ適用される。

-Troubleshoot common problems with GitHub Copilot 5 min~
GitHub Copilotのよくある問題のトラブルシューティング

--コードの提案がありません
---インターネット接続を確認
---Copilot 拡張機能を更新
---IDEの互換性を確認
---コンテンツの除外を確認

--コンテンツの除外が期待どおりに機能しない
---除外の遅延適用
---ポリシー範囲が不十分
---IDE固有の制限

--コードの提案が不十分
---明確なコンテキストを提供
---Copilotコマンドの使用
---プロンプトの長さを調整

***Knowledge check & summary [#kb2a527a]
-Knowledge check 5 min
-Summary 1 min

*詳細 [#o331b27e]
- GitHub Copilot を使用してアプリケーション開発を加速させる~
https://learn.microsoft.com/en-us/training/paths/accelerate-app-development-using-github-copilot/

※ 以下、[[概要(GitHub Copilot の基礎 - AI ペア プログラマーの理解)>#kd521a2c]]との差分情報のみをポイント

**[[Get started with GitHub Copilot>https://learn.microsoft.com/en-us/training/modules/get-started-github-copilot/]] [#u82b6420]
GitHub Copilotを使い始める

***ユニット [#h4577c8b]

-Introduction 3 min

-Examine AI tools from GitHub, OpenAI, and Microsoft 10 min~
GitHub、OpenAI、マイクロソフトのAIツールを検証する

--[[Azure AI services>Azure AI 資格(AI-900)#x67652cb]]
---[[Azure AI Foundry(元Azure AI Studio)>Azure AI 資格(AI-900)#c2e14544]]
---[[Copilot Studio>Azure AI 資格(AI-900)#c2e14544]]

--[[AI Builder(Microsoft Power Platformの機能)>Microsoft Power Platform#o9aa1571]]
--Semantic Kernel SDK(Microsoft が OSS として発表したLLMをアプリにすばやく簡単に統合できるSDK)
--Visual Studio IntelliCode(次世代の開発効率化のためのAI支援付き開発支援機能の実験セット)

--ChatGPT
--GitHub Copilot

-Examine GitHub Copilot tools, benefits, and limitations 6 min~
GitHub Copilotのツール、利点、制限を調べる

--プロフェッショナル向けツールと機能

---GitHub Copilot Pro
 IDEでのコード補完、Copilot Chatとその活用スキル
 Copilot Chat(CLI、Mobile、GitHub (GitHub.com) 、Windows Terminal)
 公開コードに一致する提案をブロック、プルリクエスト・サマリ

---GitHub Copilot Business
 指定ファイルをCopilotから除外、
 組織全体のポリシー管理
 監査ログ、GitHub モデルのレート制限が引き上げ

---GitHub Copilot Enterprise
 GitHub Copilot Business で提供される全機能
 知識ベース(RAG)、微調整(LoRA)

--制限
---限定された範囲:複雑なコード構造やあまり知られていない言語、設計、アーキテクチャは処理できない場合がある。
---潜在的なバイアス:トレーニング データにバイアスが存在する場合、Copilot はバイアスを永続化する可能性がある。
---セキュリティリスク:慎重に使用しないと、機密情報や脆弱性が潜在的に公開される可能性がある。
---公開コードと一致する:トレーニング セットのコードと一致するコードを生成する確率は低いが0ではない(ブロック機能あり)。
---不正確なコード:意味的/構文的に正しくない無効なコードを生成する場合がある。
---コーディング以外のトピックに対する不正確な応答:コーディング以外の質問に答えるようには設計されていない。

-Examine the autocomplete features of the GitHub Copilot extension 10 min~
GitHub Copilot 拡張機能のオートコンプリート機能を検証する

--オートコンプリート(コード補完)の提案候補を生成
---「int addInt(」と書くと、後続のメソッドのシグネチャと実装が色付きの構文強調表示なしで表示されるのでTabキーで受入、Escキーで拒否
---もう少し複雑な「int addPrimeNumbersInNumericList(」と書いて試してみる。すると、定義のないisPrimeメソッドが使用されたコードが提案される。
---Tab キーで受入後、addPrimeNumbersInNumericListメソッドの下に空白行を入力すると、Copilot はisPrime使用できるメソッドを提案する。

--オートコンプリート(コード補完)の提案候補を管理
---[承認]を選択して、提案を(完全に)承認(ショートカットは「Tab」)
---「単語を受け入れる」を選択して、提案を部分的に受入(ショートカットは「Ctrl + >」)
---「単語を受け入れる」の右側にある省略記号 (...) から「行を受け入れる」「ツールバーを常に表示」「補完パネルを開く」オプションを選択可~
「行を受け入れる」:候補の行全体を受入、「常にツールバーを表示」:常にツールバーを表示、「補完パネルを開く」:[提案]タブで複数の候補を表示。
---「<」/「>」を選択して代替候補を表示(ショートカットは、「Alt + [」/「Alt + ]」)

--コメントからコードの提案を生成する

---コメントを入力し始めると、Copilot はコメントと周囲のコードを使用し補完するオートコンプリートを提案。
 // create a list of 100 random numbers between 1 and 1800

---コメントを書き続けると、Copilot はオートコンプリートの提案を更新。提案を受入準備ができたら「承認」を選択するか、Tab キーを押す。
 List<int> numbers = new List<int>();
 Random random new Random();
 for (int i = 0; i < 100; i++)
 {
   numbers.Add(random.Next(1, 1000));
 }
 
 Int sum addPrimeNumbersInNumerictist(numbers);

--提案タブを使用して複数の提案を表示
---最初のオートコンプリートの提案に満足できない場合、タブを開き、より多くのオプションを表示し適切なものを選択できる。
---「補完パネルを開く」:[補完パネルを開く]を選択(ショートカットは「Ctrl + Enter」)すると[提案]タブに最大10件の提案が表示される。
---提案を受け入れるには例えば最初の「suggestion 1」の下の「Accept suggestion 1」ラベルを選択。提案を拒否するには、タブを閉じる。

-Examine the AI assistance features of the GitHub Copilot Chat extension 14 min~
GitHub Copilot Chat拡張機能のAI支援機能を検証する

--Copilot Chat のユースケース
---コードの説明と文書化
---コーディングに関する質問への回答
---エラーや問題のコンテキストに基づいて解決策&スニペットを提案
---メソッドのシグネチャと本体に基づいて、ユニット テスト ケースの作成を支援
---既存のコードベースの(品質、信頼性、性能、セキュリティについての)改善を提案

--Visual Studio Code での Copilot チャット

---チャット・ビュー(メニュー・バーにある[チャットを開く]から、もしくは「Ctrl + Alt + I」)~
「in the selected code, what does sum represent?」などと選択中のコードに対して質問できる。

---インライン・チャット(コンテキスト・メニューの[Copilot]→[Editor Inline Chat]から、もしくは「Ctrl + I」)~
・エディターにインラインのインターフェイスが表示され、そこで質問を Copilot に尋ねる。~
・前述のnumbers生成コードを選択肢た状態で、インラインのインターフェイスを表示させ、~
 「Update this code to ensure that numbers doesn't include any duplicates」と問い合わせる。~
・選択中のコードを更新する提案を「受入」「破棄」「再実行」から選択してコーディングを続行する。

---クイック・チャット(VSCのコマンド パレットでChat: Open Quick Chat、もしくは「Ctrl + Shift + Alt + L」)~
エディタの上部に表示されるチャット・ビューで、インライン・チャットよりも簡単に質問できる。

---スマート・アクション(コンテキスト・メニューから選択)~
・説明(Explain):選択したコードの自然言語による説明を生成。~
・修正(Fix):選択したコードの修正を提案。~
・レビューとコメント(Review and Comment):選択したコードのコード レビューを提供。~
・ドキュメントの生成(Generate Docs):選択したコードのドキュメントを作成。~
・テストの生成(Generate Tests):選択したコードの単体テストを作成。~
・場合によって[レビューとコメント]→「修正」のようにスマート・アクションを繰り返して対応したりする。

---クイック・チャット(メニューからクイック・チャット、もしくは「Ctrl + Shift + Alt + L」)

---Copilot Chatでのプロンプト構築~
・冒頭で使用する環境参照(@workspace、@vscode、@terminal)~
・冒頭で使用するスラッシュ・コマンド(/clear、/new、/help、/doc、/explain、/tests、/fix、/newNotebook)~
・環境参照とスラッシュ・コマンドは組み合わせるときは「@workspace /explain: ...」のようにして使う~
・プロンプト中でチャット変数(#editor、#selection、#file、#terminalSelection、#terminalLastCommand)

***Exercise [#g00140c7]
-Exercise - Install GitHub Copilot extensions for Visual Studio Code 6 min~
エクササイズ - Visual Studio Code用のGitHub Copilot拡張機能をインストールする

--Copilotサブスクリプションを設定
---個人の GitHub アカウントを使用して、GitHub Copilot Pro のサブスクリプションを設定~
(月間/年間/30日間の、2,000回のコード自動補完と50件のチャット/月の無料トライアル サブスクリプション)
---教育者、学生、および選ばれたオープンソースのメンテナーは、Copilot Pro を無料で受け取ることができる。
---GitHub アカウントが組織を通じてライセンスされている場合は、組織の所有者によってサブスクリプションに割り当てられる。

--Visual Studio Code 用の Copilot 拡張機能を設定
---Visual Studio Codeと、Copilot、Copilot Chat 拡張機能をインストール
---Visual Studio Code から GitHub にサインイン(Visual Studio Codeの認証アカウントと異なる場合)

-Exercise - Configure GitHub Copilot extensions for Visual Studio Code 10 min~
練習 - Visual Studio Code用のGitHub Copilot拡張機能を設定する

--Copilotを有効または無効にする
---Visual Studio Code で、拡張機能ビューを開く
---インストールされている拡張機能のリストで、Copilotを見つける。
---Copilot 拡張機能の歯車アイコンから有効化と無効化のオプションを表示して選択

--Visual Studio Code で Copilot と Copilot Chat を構成

---インストールすると、デフォルト設定で構成される。

---拡張機能の設定にアクセスする方法~
・Manageアイコンを使用して、Visual Studio Code の設定タブを開き、拡張機能を選択し、Copilotを選択。~
・Copilot ステータス アイコンを使用して Copilot ステータス メニューにアクセスし、[設定の編集]を選択。

---Copilot拡張機能の設定を構成~
・利用可能な設定のリストを確認し「拡張機能」ラベルの下で、最初の Copilot 拡張機能を選択。~
・Copilot の設定には次のオプションが含まれる(自動補完を有効にする。指定した言語の Copilot 補完を有効または無効にする。)~
・「拡張機能」ラベルの下で、2 番目の Copilot 拡張機能を選択。~
・Copilot Chat の設定には、プレビューと実験的なオプションが含まれ必要に応じ、エクスペリエンスをカスタマイズする。

---GitHub.com で Copilot 設定を構成~
・個人アカウント、組織アカウントを通じて管理できる。~
・サブスクリプション管理、プロンプトと提案の保持の構成、パブリック コードに一致する提案の許可またはブロック

---Copilot のキーボードショートカット~
・Visual Studio Code でデフォルトのキーボード ショートカットを使用できる。~
・キーボード ショートカット エディターで特定のコマンド毎にショートカットを再バインドできる。

***Knowledge check & summary [#bd4af56e]
-Knowledge check 10 min
--Copilot は開発者に提案を提供することでの生産性を向上させる AI ペア プログラマー。
--オートコンプリートには受入、破棄、代替の3つのオプションがあり、タブで他の複数の提案を表示できる。
--環境参照(@workspace、@vscode、@terminal)でコンテキストを強化するコンテンツを見つけ易くする。チャット変数はコンテンツをポイント。
--テストコード生成:✗「ユーザーの個人的なコーディング スタイルに基づいて」◯「エディター内のコードまたは選択されたコードに基づいて」
--言語サポートは既定で全て有効で、plaintext、markdownは無効:{ "": true, "plaintext": false, "markdown": false, "scminput": false }

-Summary 2 min

**[[Generate documentation using GitHub Copilot tools>https://learn.microsoft.com/en-us/training/modules/generate-documentation-using-github-copilot-tools/]] [#l41ea0fc]
GitHub Copilot ツールを使用してドキュメントを生成する

***ユニット [#n9f31b73]

-Introduction 3 min

-Examine the "document" and "explain" features of GitHub Copilot Chat 7 min~
GitHub Copilot Chatの「ドキュメント」と「説明」機能を調べる

--Visual Studio Code で Copilot Chat にアクセスする~
チャット・ビュー:、インライン・チャット、スマート アクション、クイック・チャット

--Copilot Chat を使用して説明を生成する~
プロンプト作成には、環境参照、スラッシュ・コマンド、チャット変数などを組み合わせて使用できる。
---チャット・ビュー:@workspace /explain Explain this project
---チャット・ビュー:@workspace /explain Explain the dependencies of this project
---チャット・ビュー:@workspace /explain #file:program.cs Explain how this file is used in the project
---インライン・チャット:/explain #selection Explain how this method works
---インライン・チャット:/explain Explain this code block
---チャット・ビューよりインライン・チャットの方がスコープが狭い事が多いので、環境参照ではなく選択されたコードを使用している感じか。

--Copilot Chat を使用してドキュメントを生成する

---インラインド・キュメントを生成する~
・Copilot Chat~
・インライン・チャットに/docコマンドを入力~
・Generate Docsスマート・アクションを使用して選択したコードを説明

---ワークスペース全体のプロジェクト・ドキュメント
 @workspace Generate a project summary that can be used at an executive briefing
 @workspace Generate a readme markdown document that can be used as a repo description

---Copilot Chat の出力を確認して修正する。~
・出力の正確性と完全性を確認~
・プロンプト(コードや質問)と一致していることを確認~
・エラーや不正確な部分を修正し、コードの動作と目的が正確に反映されるようにする。~
・出力に追加情報またはコンテキストを追加して、より包括的なドキュメントを提供する。

***Exercise [#me8555c3]
-Visual Studio Code環境でサンプルアプリを準備する

--[[リンク>https://raw.githubusercontent.com/MicrosoftLearning/APL-2007-Accelerate-app-development-by-using-GitHub-Copilot/master/LearnModuleExercises/Downloads/SampleApps.zip]]からサンプル アプリを含むSampleApps.zipファイルをダウンロードして解答する。

-Exercise - Generate code explanations using GitHub Copilot Chat 17 min~
演習 - GitHub Copilot Chatを使ってコードの説明を生成する

--Visual Studio Code でSampleAppsフォルダのAPL2007M2Sample1フォルダーを開く。

--ワークスペースとプロジェクトファイルの説明
---Visual Studio Code の上部メニューバーで、[チャットを開く]を選択する。
---次のコマンドを使用してプロジェクトの説明を依頼:@workspace Explain this project
---チャット ビューで応答を確認、下部でフォローアップの質問を提案している。
---MainWindow.xaml.csを開き次のコマンドを使用してファイルの説明を依頼:@workspace /explain #file:MainWindow.xaml.cs
---チャット ビューで応答を確認、下部でフォローアップの質問を提案している。

--選択されたコードの説明
---MainWindow.xaml.csファイルがエディターで開いていることを確認
---下にスクロールしてSumPageSizesAsync()メソッドを見つける。
---コード行を選択し、「説明」スマート アクションを使用して説明を生成。
---チャット ビューで応答を確認、説明に含まれる詳細レベルに注目。

--エラーの説明
---MainWindow.xaml.csファイルがエディターで開いていることを確認
---下にスクロールしてSumPageSizesAsync()メソッドを見つける。
---マウスカーソルを上に移動するdownloadTasksとエラーメッセージが表示される。
---エラーを含むコード行を選択し「Ctrl + I」でインライン チャットを開き、次のプロンプトを入力:/explain why is the selection causing an error
---チャット ビューで応答を確認、エラーに関する情報と修正方法(キーワードawaitを追加)の提案が含まれている。
---Copilot Chat が提供する説明を使用して、コード内のエラーを修正、ファイルへの変更を保存する。

--新しい機能の説明
---SumPageSizesAsyncおよびProcessUrlAsyncメソッドを含むコード行を選択
---チャット・ビューで、ダウンロード・プロセス中にスローされた例外を処理する方法を説明
 @workspace /explain #MainWindow.xaml.cs How can I handle exceptions thrown during the download process?
---チャット ビューで応答を確認、エラーに関する情報と修正のコード スニペットの提案が含まれている。
---コード スニペットをコピーするか、カーソルの位置にコード プロジェクトに挿入する。
---インライン チャットの場合、ProcessUrlAsyncメソッドを選択し、
---「Ctrl+I」で次のプロンプトを入力:How can I handle exceptions thrown during the download process?
---チャット ビューで応答を確認、エラーに関する情報と修正のコード スニペットの提案が含まれている。
---提案されたエラー処理コードを受け入れるには、[受け入れる]を選択、try-catchブロックが実装される。

-Exercise - Generate project documentation by using GitHub Copilot Chat 8 min~
演習 - GitHub Copilot Chat を使ってプロジェクト・ドキュメントを作成する

--Visual Studio Code でSampleAppsフォルダのAPL2007M2Sample1フォルダーを開く。

--[チャットを開く]を選択しCopilot チャット ビューを開く。
--チャット ビューで、ワークスペースのドキュメントを生成:@workspace document this project
---プロジェクト用に生成されたプロジェクト ドキュメントを少し時間をかけて確認
---「プロジェクトの制約を文書化する」や「プロジェクトの依存関係を文書化する」などとするとより詳細な情報を取得できる。

--チャット ビューで、プロジェクトの依存関係を説明するドキュメントを生成:@workspace document the project dependencies
---プロジェクトの依存関係のドキュメントを確認
---同様に、プロジェクト概要、要件、制約、アーキテクチャ、設計、テスト、展開などを生成

--チャット ビューでAPL2007M2Sample1プロジェクトの README を生成:@workspace generate a readme document that can be used as a repo description~
マークダウン ファイルとしてフォーマットする場合:@workspace generate readme project documentation formatted using a raw markdown format

---APL2007M2Sample1プロジェクト用に生成された README を確認
---いくつかのセクションとともに、プロジェクトの概要を提供している。
---プロンプトを調整して、組織で推奨される README セクションを指定できる。

-Exercise - Generate inline code documentation by using GitHub Copilot Chat 9 min~
演習 - GitHub Copilot Chat を使ってインライン・コード・ドキュメントを作成する

--Visual Studio Code でSampleAppsフォルダのAPL2007M2Sample1フォルダーを開く。

--チャット・ビューを使用してインライン・コード・ドキュメントを生成する
---MainWindow.xaml.csファイルを開きファイルの先頭から最後までのすべてのコードを選択
---チャットビューを開き次のプロンプトを入力:@workspace #selection generate inline code documentation for the selected code
---提案されたコードドキュメントを少し時間をかけて確認、推奨されるコード・コメントと関連コードの一部が含まれる。
---簡潔でコードの一部が省略される場合がある。コード コメントを実際のコード ファイルに手動で移動する。

--インライン・チャットを使用してインライン・コード・ドキュメントを生成する~
インライン チャットを使用すると、コードにコメントを追加するためのより直接的なアプローチが提供される。

---MainWindow.xaml.csファイルの先頭までスクロールしOnStartButtonClickメソッドを選択する。
---インライン・チャットを「Ctrl + I」で開き、次のプロンプトを入力:/doc
---OnStartButtonClickメソッドの2つのパラメタの概要と説明が含まれていることに注意。
---提案を確認し必要に応じて修正する。提案を破棄するには[破棄]を選択する。

--スマート・アクションを使用してインライン・コード・ドキュメントを生成する

---Visual Studio コード エディターで、MainWindowクラス内のすべてのメソッドを選択。
---選択したコードを右クリックし「Copilot」→「Generate Docs」を選択
---ドキュメントが生成され、提案された変更を確認、コメントが含まれていることに注意。
---生成されたドキュメントに問題が見つかった場合は、続行する前に提案された変更を修正
---[承諾]を選択、MainWindowクラス内の各メソッドに生成されたコメントが追加された。

-Exercise – Complete the "code documentation" challenge 15 min~
演習 - "コード・ドキュメント" の課題を完了する

--Visual Studio Code でSampleAppsフォルダのAPL2007M2Sample2フォルダーを開く。
--ターミナルでdotnet buildコマンドを実行したときに、プロジェクトがエラーなしでビルドされることを確認。
--注:このプロジェクトは、特殊なランタイム環境を使用するIoT デバイス上で実行するように設計されているため、正常に実行されない。
--Visual Studio Code で Copilot Chat を使用して、インライン・ドキュメントとプロジェクト・ドキュメントを生成します。
--生成されたドキュメントをレビューして、要件を満たしていることを確認。ドキュメントが完成したら、プロジェクトへの変更を保存。
--文書化されたコードを保存した後、ターミナルでdotnet buildコマンドを実行したときにプロジェクトがエラーなしでビルドされることを確認。

-Review the "code documentation" solution 8 min~
コード・ドキュメント・ソリューションをレビューする

--Visual Studio Code でSampleAppsフォルダのAPL2007M2Sample2フォルダーを開く。

--Program.cs ファイルのインライン ドキュメント
---Deviceクラスのプロパティとメソッドを含むコード ブロックを選択
---チャット・ビューを開き、次のプロンプトを入力:@workspace #selection generate inline documentation
---提案された変更を確認、[エディターで適用]を選択
---コード ファイルの上部で提案された変更がすべて承認されるまで[変更を承認]を選択し続ける。

--プロジェクトのプロジェクト ドキュメント

---チャットビューを開き次のプロンプトを入力:@workspace document this project. Include an overview and sections for dependencies, features, requirements, constraints, summary
---ドキュメントをマークダウンとしてフォーマットするには、次のプロンプトを入力:format the documentation as markdown and show the raw markdown file contents

--プロジェクト リポジトリの README ファイル

---チャットビューを開き次のプロンプトを入力:@workspace generate a readme document that can be used as a repo description. Include a project title and the following sections: Description, Setup instructions, Usage, Contributor guidelines, License
---ドキュメントをマークダウンとしてフォーマットするには、次のプロンプトを入力:format the readme document as markdown and show the raw markdown file contents

***Knowledge check & summary [#zb746cdd]
-Knowledge check 8 min
-Summary 3 min

**[[Develop code features using GitHub Copilot tools>https://learn.microsoft.com/en-us/training/modules/develop-code-features-using-github-copilot-tools/]] [#zfba6b33]
GitHub Copilot ツールを使用してコード機能を開発する

***ユニット [#u6d463d1]

-Introduction 3 min

-Examine the code development features of GitHub Copilot 8 min~
GitHub Copilot のコード開発機能を検証する

--Visual Studio Code の Copilot ツール
---コード行補完: コード行補完を使用し、より効率的にコードを記述
---チャット・ビュー:左側のサイドバーにあるチャット アイコンから開く。
---インライン・チャット:エディタから直接インライン・チャット会話を開始
---クイック・チャット:簡単な質問をして作業を再開
---スマート・アクション:プロンプトを入力しなくても特定タスクを実行

--Copilot のコード行補完を使用してコードを生成する
---メソッド シグネチャの入力を開始すると、Copilot はコード行を補完する候補を生成。
---提案に満足したら、Tab キーを押すか、[承認]を選択する。
---また、メソッドの呼び出しステートメントを入力し始めると、様々なオーバーロードを提案する。
---また、コードコメントからメソッドのシグネチャと実装の提案を生成する。
---これにより時間を節約し、コードを正確に記述できる。

--Copilot Chatを使用してコードを生成する
---Copilot Chat は、チャット・インターフェースとスマート・アクションを使用してコードを作成するのに役立つ。
---例えば、新しいメソッドを作成するように求めるプロンプトを入力すると、1 つ以上のメソッド シグネチャと実装の提案を提供する。
---提案を確認してから承認または破棄することで、コードの初期バージョンをより迅速かつ正確に作成できる。
---Copilot Chat に、明確な範囲と意図を含むプロンプトや質問を提供すると、生成される応答が改善される。
---会話形式+環境参照、スラッシュ・コマンド、チャット変数を使用してプロンプトのコンテキストを明確にできる。
---例えばスキャフォールディングなどもできる~
・C#:@workspace /new console application in C#~
・JS:@workspace /new Node.js Express Pug TypeScript

--チャット・ビューを使用してコードを生成する
---Visual Studio Code コマンド・センターから[チャットを開く]を選択するか、もしくは「Ctrl + Alt + I」
---さらに画面スペースが必要な場合は、チャット・ビューのコンテキスト メニューから [新しいウィンドウでチャットを開く]を選択

--チャット・ビューで(生成された)コード・ブロックを管理(適用)
---初期オプション:[エディターで適用]、[カーソル位置に挿入 (Ctrl + Enter)]、[コピー]
---[その他のアクション (...)]:[ターミナルに挿入] (Ctrl+Alt+Enter) / [新しいファイルに挿入]

--インライン・チャットを使用してコードを生成
---エディタで作業しているときに「Ctrl + I」を押しインライン・チャットを開く。
---次の方法で使用できる(既存のコードに関する質問、変更または置換、新しいコードの生成)

---インラインチャットを使用して新しい機能を作成~
・エディターでコードを選択し「Ctrl + I」を押してインライン・チャットを開く。~
・作成する機能を説明するプロンプトを入力、提供される提案を確認し、必要に応じてプロンプトを調整。~
・満足したら、提案を受け入れます。

---インラインチャットを使用して正規表現を作成~
インライン・チャットを使用すると、正規表現をすばやく正確に生成できる。~
・エディターでコードを選択し「Ctrl + I」を押してインライン・チャットを開く。~
・検証する必要があるデータ・パターン(メアドなど)を説明するプロンプトを入力し提案を確認し、満足したら提案を承認。~
・提案された正規表現を少し評価する

-Examine GitHub Copilot best practices 8 min~
GitHub Copilot のベストプラクティスを検証する

--Visual Studio Code 用の Copilot 拡張機能を使用しベスト プラクティスに従うことでAI ペア プログラマーを最大限に活用できる。
--Copilotのインライン提案を最大限に活用
--Copilot にコンテキストを提供する
--コンテキストの定義に役立つファイルを開く。
--コード・ファイルのトップレベルのコメントでコンテキストを提供する。
--適切な包含と参照(作業に必要なインクルードまたはモジュール参照を手動で設定するのが最善)
--意味のある関数名、具体的かつ適切な関数コメント
--サンプルコード付きPrime Copilot(探しているものに近いサンプル コードをコピーして貼り付ける)
--(プロンプト、コンテキストの)一貫性を保ち、品質基準を高く保つ「ゴミを入れればゴミが出る」
--Copilot Chatのエクスペリエンスを最適化するために実行できる操作を最大限に活用する

--まずは一般的なことから始めて、具体的な内容に移る
---数が素数かどうかを知らせる関数を書いてください。
---この関数は整数を受け取り、その整数が素数であれば true を返します。
---入力が正の整数でない場合、関数はエラーをスローする必要があります。

--Copilot があなたの要求を理解できるように、例を使用(ICL)

--複雑または大規模なタスクを完了させたい場合、より単純なタスクに分割する(CoT)
---10 x 10 の文字グリッドを生成する関数を記述
---有効な単語のリストが与えられた場合に、文字のグリッド内のすべての単語を検索する関数を記述
---前の関数を使用して、少なくとも 10 個の単語を含む 10 x 10 の文字グリッドを生成する関数を記述
---前の関数を更新して、文字のグリッドとグリッドからランダムに抽出した 10 個の単語を出力

--曖昧さを避ける「これは何をしますか」→「createUser 関数は何をしますか?」
--コンテキストや指示を明確にする(ファイルを開く、コード選択、環境参照、スラッシュ・コマンド、チャット変数)

--その他
---実験と反復:希望する結果が得られない場合は、プロンプトを繰り返して再試行する。
---履歴を関連性のあるものにする:新しい会話を開始する。/clear スラッシュ・コマンド
---適切なコーディング方法に従う(コンテキストとなる既存のコードがベスト プラクティスに従っており、読みやすいこと)~
・一貫したコード スタイルとパターンを使用~
・変数と関数にはわかりやすい名前を使用~
・コードにコメントを付ける。~
・コードを疎結合&機能的凝集度に保つ。~
・ユニットテストを含める。

***Exercise [#l86e319f]
-Exercise - Create code by using code line completions 14 min~
演習 - コード行補完を使用してコードを作成する

--Visual Studio Code環境でサンプルアプリを準備する

---Visual Studio Code の新しいインスタンスを開き、チャット ビューを開く

---チャット ビューで、次のスキャフォ・プロンプトを入力しワークスペース作成
 @workspace /new console application named APL2007M3. Use C# LangVersion 12 and NET8.0. Only .cs and .csproj files. Enable ImplicitUsings and Nullable

---[フォルダーの選択]ダイアログで[デスクトップ]を選択して[親フォルダーとして選択]を選択。
---新しいプロジェクトを開くように求められたら[開く]を選択
---ソリューション・エクスプローラー・ビューで、Program.csを選択し内容を次のコード(略)に置き換える。

--Copilot を使用してコメントからコード行の補完を生成する。

---Program.csファイルで、Mainメソッドの下に2つの空行を作成。

---テスト データを生成するために次のコード コメントを作成し、Enter キーを押す。
 // public struct SalesData. Include the following fields: date sold, department name, product ID, quantity sold, unit price

---Copilot が提供するコード補完の提案を確認(データ型に注意)し、ニーズに最も適した提案を確認して受入(Tabキー)。
---一部のデータ型が希望するものでなくても、提案された自動補完を受け入れた後で調整することはできる。
---また、提案タブを使用して複数の提案を表示したり、一度、破棄(Escキー)してコンテキストを調整するなどする。
---SalesData構造体の下に 2 つの空のコード行を作成。

---構造体を使用してテスト・データを生成するSalesDataメソッドを作成するには、次のコード コメントを記述して Enter キーを押す。
 /* the GenerateSalesData method returns 1000 SalesData records. It assigns random values to each field of the data structure */

---Copilot が提供するコード補完の提案を確認(オブジェクトの配列を返すように設計されていることに注意)し、
---ニーズに最も適した提案を確認して受入(Tabキー)て、必要に応じて調整を加える。
---たった 2 つのコメントで構造体とテスト・データを生成するメソッドを生成できた。

--Copilotを使用してコード行補完を生成する。

---QuarterlyIncomeReportクラスのQuarterlySalesReportメソッドを次のように更新。
 public void QuarterlySalesReport(SalesData[] salesData)

---QuarterlySalesReportの操作について検討(売上データに基づいて四半期ごとの売上を計算しレポート)~
・コレクションを反復処理しますsalesData~
・salesDataコレクションを反復処理~
・販売数量と単価に基づいて、各販売の価値を計算~
・売上日を使用して、売上がどの四半期に属するかを判断~
・四半期ごとの売上を合計し、売上レポートを作成

---QuarterlySalesReportの先頭でforeachを入力、コード行補完の提案を待ち、提案を確認。
---提案が不適切だったので、コンテキストとなるコードを調整
---QuarterlySalesReport内の空白行にカーソルを置き、Enterキー。
---コード行補完の提案を待ち、提案で意図した処理が実行されることを確認し受入(Tabキー)
---販売月に基づいて四半期を決定するために使用されるGetQuarterメソッドの定義がないことを確認。
---QuarterlySalesReportの下に2つの空白行を作成するとGetQuarterのコード補完が提案される。
---(QuarterlySalesReportのコンテキストからGetQuarterのコード補完を簡単に生成できる)
---提案で意図した処理が実行されることを確認し受入(Tabキー)

---Mainメソッドでは、上記の(略)でQuarterlyIncomeReportクラスの初期化を行うコードが既に実装されている状態
---Mainメソッドのコードコメント「// call the GenerateSalesData method」の末尾にカーソルを置きEnterキーを押下。
---Copilot によって提案されたコード補完を確認して承認。
---同様に、Mainメソッドのコードコメント「// call the QuarterlySalesReport method」の末尾にカーソルを置きEnterキーを押下。
---Copilot によって提案されたコード補完を確認して承認。

---アプリを実行してレポート出力を確認(ターミナル ウィンドウからdotnet run
---ターミナル・ウィンドウで出力を確認(四半期の結果はランダムな数値)

-Exercise - Create code by using GitHub Copilot Inline Chat 18 min~
演習 - GitHub Copilot インライン・チャットを使用してコードを作成する

--Visual Studio Code環境でサンプルアプリを準備(SampleApps.zipのAPL2007M3SalesReport-InlineChat)

--コーディングタスクとプロジェクト目標を確認する
---SalesData構造体とGenerateSalesDataメソッドを更新して「実際の」データに似たデータ サンプルを作成
---QuarterlySalesReportメソッドを更新~
・四半期は Q1 から Q4 の順序でリスト~
・地域設定を使用して通貨の値を表示~
・四半期利益と利益率の計算を含める~
・四半期ごとの売上、利益、部門別の利益率を計算

--プロンプトを開発するためのアプローチを検討する~
プロンプトを開発するときは、次のベスト プラクティスに留意

--インライン・チャットを使用してデータ構造を生成する

---SalesData構造体の下の空白行にカーソルを置き、インライン・チャット(Ctrl + I)に次のプロンプトを入力し構造体を生成
 I need a public struct ProdDepartments that contains a static string array for 8 clothing industry departments. Create separate string array containing 4-character abbreviations for each department name. The abbreviation must be unique. The department names should represent real department names for the clothing industry.
---提案を確認して受入(Tabキー)

---ProdDepartments構造体の下の空白行にカーソルを置き、インライン・チャット(Ctrl + I)に次のプロンプトを入力し構造体を生成
 I need a public struct ManufacturingSites that contains a static string array for 10 manSites. Manufacturing sites should be represented by a 3-character code that includes a 2-letter ISO country code followed by a digit. Use 3 ISO country codes.
---提案を確認して受入(Tabキー)

---SalesData構造体を選択、インライン・チャット(Ctrl + I)で次のプロンプトを入力し構造体を「更新」
 add double field baseCost and int field volumeDiscount to SalesData. Change productID from int to string.
---提案を確認して受入(Tabキー)

--インライン・チャットを使用してGenerateSalesDataメソッドを更新する

---Program.csファイルでGenerateSalesDataメソッドを見つける。
---departmentNameに値を割り当てるコード行を選択、インライン・チャット(Ctrl + I)で次のプロンプトを入力
 Update the departmentName assignment to randomly select a department name. Use the ProdDepartments data structure. 
---提案を確認して受入(Tabキー)

---departmentNameの割り当て後に 3 つの空白行を作成し次の変数宣言をコピーし貼り付け。
 int indexOfDept = 0;
 string deptAbb = "";
 string firstDigit = "";
 string nextTwoDigits = "";
 string sizeCode = "";
 string colorCode = "";
 string manufacturingSite = "";

---「int indexOfDept = 0;」コード行を選択し、インライン・チャット(Ctrl + I)で、次のプロンプトを入力。
 Assign the array index for departmentName to indexOfDept.
---期待した提案が表示されないので[破棄]を選択して提案を拒否し再試行
 Create an int named indexOfDept. Assign the array index number corresponding to the selected departmentName to indexOfDept.
---(※ コードを選択せずにインライン・チャットを開くと、Copilot がアンカーポイントを失うことがある)
---提案を確認して受入(Tabキー)

---「string deptAbb = "";」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Use indexOfDept to assign a department abbreviation to deptAbb.
---提案を確認して受入(Tabキー)

---「string firstDigit = "";」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Assign indexOfDept + 1 to firstDigit.
---提案を確認して受入(Tabキー)

---「string nextTwoDigits = "";」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Assign a random number 1-99 to nextTwoDigits. Include a leading 0 for numbers less than 10.
---提案を確認して受入(Tabキー)

---「string sizeCode = "";」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 From the list {XS, S, M, L, XL}, randomly select a product size and assign it to sizeCode.
---提案を確認して受入(Tabキー)

---「string colorCode = "";」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 From the list {BK, BL, GR, RD, YL, OR, WT, GY}, randomly select a product color and assign it to colorCode.
---提案を確認して受入(Tabキー)

---「string manufacturingSite = "";」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Assign a randomly selected manufacturing site to manufacturingSite.
---提案を確認して受入(Tabキー)

---「salesData[i].productID = random.Next(1, 101);」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Add a "-" to deptAbb, nextTwoDigits, sizeCode, and colorCode. Combine deptAbb, firstDigit, nextTwoDigits, sizeCode, colorCode, and manufacturingSite to create the productID.
---提案を確認して受入(Tabキー)

---unitPriceの割り当てを、25 ~ 300 の範囲を使用するように手動更新
 salesData[i].unitPrice = random.Next(25, 300) + random.NextDouble();

---「salesData[i].baseCost」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Discount the unitPrice by a random percentage between 5 and 20. Assign the result to baseCost.
---提案を確認して受入(Tabキー)

---「salesData[i].volumeDiscount」コード行を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Assign 10 percent of quantitySold to volumeDiscount. Truncate any fractional values.
---提案を確認して受入(Tabキー)

--インライン・チャットを使用してQuarterlySalesReportメソッドを更新する

---Program.cs ファイルでQuarterlySalesReportメソッドを見つける。

---メソッド全体を選択し、インライン・チャット(Ctrl + I)で、次のプロンプトを入力。
 Update the QuarterlySalesReport method to display quarterly results in order. Format currency using regional settings. 
---提案を確認して受入(Tabキー)、四半期の売上結果が順番に表示され、通貨値が適切にフォーマットされた。

---メソッド全体を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Update the QuarterlySalesReport method to include calculations for quarterly profit and profit percentage. Include the new calculations in the report output.
---提案を確認して受入(Tabキー)、四半期の売上結果に利益と利益率の計算が含まれるように修正された。

---メソッド全体を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Update the QuarterlySalesReport method to include calculations for quarterly sales, profit, and profit percentage by department. Include the new calculations in the report output. 
---提案を確認して受入(Tabキー)、四半期の売上結果に利益と部門別の利益率の計算が含まれるように修正された。

---メソッド全体を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Update the QuarterlySalesReport method to include calculations for quarterly sales, profit, and profit percentage by department. Include the new calculations in the report output. 
---提案を確認して受入(Tabキー)、四半期の売上結果に利益と部門別の利益率の計算が含まれるように修正された。

-Exercise - Complete the create new code challenge 16 min~
エクササイズ - 新しいコードの作成に挑戦する

--コーディング環境はVSCodeでSampleAppsのAPL2007M3SalesReport-NewCodeChallengeフォルダを開く。

--部門販売情報をフォーマットする

---アプリケーションを実行し、次の「前」の形式を確認

---Copilot Chat を使用して、部門の販売情報をテーブルとしてフォーマットするコード更新を行う。~
「部門別」売上情報をテーブルとしてフォーマットし、テーブルにヘッダー行を含める。

---アプリケーションを実行し、更新されたアプリケーションが次の「後」の形式を生成することを確認

--四半期ごとに上位3件の販売注文を表示する

---アプリケーションを実行し、次の「前」の形式を確認

---Copilot Chat を使用して、四半期ごとの上位 3 つの販売注文を報告するために必要なコード更新を行う。~
・四半期の上位 3 件の販売注文は、総販売額 (販売個数 * 単価) が最も大きい 3 件の注文~
・四半期売上レポートには、上位 3 つの注文ごとに、製品 ID、販売数量、単価、総売上額、利益、利益率を記載~
・上位 3 つの販売注文のリストの順序は、利益の降順 (最高から最低) に基づく~
・四半期売上レポートでは、上位の販売注文の情報を表形式でフォーマットする。

---アプリケーションを実行し、更新されたアプリケーションが次の「後」の出力を生成することを確認

-Review the create new code solution 8 min~
新しいコードを作成するソリューションをレビューする

--「部門販売情報のフォーマット」ソリューションを確認する

---Visual Studio Code で Program.cs ファイルを開き

---QuarterlySalesReportメソッド全体を選択し、インライン・チャット(Ctrl + I)で、次のプロンプトを入力。
 Update the QuarterlySalesReport method to format the reported department sales information as a table. Each column should be aligned. The left column should be 22 characters wide. The remaining columns should be 20 characters wide. Each data column should have a right-aligned header. The sales data should be right-aligned and padded to fit the column with.
---提案を確認して受入(Tabキー)

---QuarterlySalesReportメソッド全体を選択し、インライン・チャットを開いて、次のプロンプトを入力。
 Use extended ASCII characters to add border lines to the table. Border lines should enclose the table perimeter. Border lines should separate the interior columns of the table. 
---提案を確認して受入(Tabキー)

---Program.cs ファイルへの変更を保存しアプリケーションを実行、四半期売上レポートの出力に部門売上結果の表が含まれていることを確認。
---必要に応じて、列幅を手動で調整して、データ行の垂直線をヘッダー行に揃える。
 Console.WriteLine("│ {0,-20} │ {1,18} │ {2,18} │ {3,18} │", "Department", "Sales", "Profit", "Profit Percentage");
 Console.WriteLine("│ {0,-20} │ {1,18} │ {2,18} │ {3,17}% │", department.Key, formattedDepartmentSalesAmount, formattedDepartmentProfitAmount, formattedDepartmentProfitPercentage);

--「四半期ごとに上位 3 つの販売注文を表示する」ソリューションを確認する

---Visual Studio Code で Program.cs ファイルを開き

---QuarterlySalesReportメソッド全体を選択し、インライン・チャット(Ctrl + I)で、次のプロンプトを入力。
 Update the QuarterlySalesReport method to include calculations that identify the top 3 sales orders during each quarter. Select the top 3 orders based on the total sales amount for the order (quantitySold * unitPrice). Include the top 3 orders in the report output. For the top three orders, display the product ID, the quantity sold, the unit price, the total sales amount, the profit, and profit percentage.
---提案を確認して受入(Tabキー)

---QuarterlySalesReportメソッド全体を選択し、インライン・チャット(Ctrl + I)で、次のプロンプトを入力。
 Update the order in which the top three sales orders are listed in the report. List the top three orders in descending order of profit.
---提案を確認して受入(Tabキー)

---QuarterlySalesReportメソッド全体を選択し、インライン・チャット(Ctrl + I)で、次のプロンプトを入力。
 Update the QuarterlySalesReport method to display all of information for the top three orders in a table. The left column should be 22 characters wide. The remaining columns should be 20 characters wide. Each data column should have a right-aligned header. The sales data should be right-aligned and padded to fit the column with.
---提案を確認して受入(Tabキー)

---QuarterlySalesReportメソッド全体を選択し、インライン・チャット(Ctrl + I)で、次のプロンプトを入力。
 Use extended ASCII characters to add border lines to the table. Border lines should enclose the table perimeter. Border lines should separate the interior columns of the table. 
---提案を確認して受入(Tabキー)

---Program.cs ファイルへの変更を保存しアプリケーションを実行、四半期ごとに上位 3 つの販売注文が含まれていることを確認。

-Exercise - Complete the code logic challenge 16 min~
演習 - コードロジックの課題を完了する

-Review the code logic solution 8 min~
コードロジックのソリューションをレビューする

-Exercise - Convert code from one programming language to another 8 min~
演習 - あるプログラミング言語から別のプログラミング言語へコードを変換する

--チャット・ビューを使用してプログラミング言語間でコードを変換する

---Visual Studio Code の 1 番目のインスタンスでPythonのフォルダを開く
---main.pyの内容を選択、チャット ビューを開き、次のプロンプトを入力
 Convert #selection to C#

---Visual Studio Code の 2 番目のインスタンスを開く
---チャット・ビューを開き、次のプロンプトを入力してスキャフォ
 @workspace /new console application in C# NET8 named APL2007M3B. Only .cs and .csproj files. Enable ImplicitUsings and Nullable
---Visual Studio Code の 2 番目のインスタンスのProgram.cs ファイルにC#に変換したPythonコードを移植

--インライン・チャットを使用してプログラミング言語間でコードを変換する

---Visual Studio Code の 1 番目のインスタンスでPythonのフォルダを開く
---main.pyの内容を選択、インライン・チャットを開き、次のプロンプトを入力
 Convert #selection to C#

---Visual Studio Code の 2 番目のインスタンスを開く
---インライン・チャットを開き、次のプロンプトを入力してスキャフォ
 @workspace /new console application in C# NET8 named APL2007M3B. Only .cs and .csproj files. Enable ImplicitUsings and Nullable
---Visual Studio Code の 2 番目のインスタンスのProgram.cs ファイルにC#に変換したPythonコードを移植

***Knowledge check & summary [#w87f1dc9]
-Knowledge check 8 min
--行補完:コメントとコード行
--補完:プロンプトとエディタ内のコードのコンテキスト

-Summary 3 min

**[[Develop unit tests using GitHub Copilot tools>https://learn.microsoft.com/en-us/training/modules/develop-unit-tests-using-github-copilot-tools/]] [#i36af31b]
GitHub Copilot ツールを使用してユニットテストを開発する

***ユニット [#i4a361f8]
-Introduction 3 min

***Exercise [#v735d4e4]

-Examine the unit testing tools and environment 8 min~
単体テストツールと環境を調べる

--VSCodeでC#でテストフレームワーク(xUnit/NUnit/MSTest)のテスト、被テスト・プロジェクトを生成
--テスト・プロジェクトは被テスト・プロジェクトのプロジェクト参照を追加する。

--Copilot Chat を使用してユニットテストケースを生成
---選択して生成
 Write a unit test for the method in the #editor。
---選択して生成
 #selection write a unit test for this code。

--Visual Studio Code でユニットテストを実行および管理~
テストフレームワークの仕様の話:https://zenn.dev/yuriemori/articles/f6a73b326a3f0f

-Exercise - Create unit tests by using GitHub Copilot Chat 12 min~
演習 - GitHub Copilot Chatを使ってユニットテストを作成する

--Visual Studio Code環境でサンプルアプリを準備する
---SampleApps.zipのAPL2007M4PrimeServiceフォルダをVisual Studio Code で開く
---Numbersフォルダーを展開し、PrimeService.csファイル内のコードを確認

--ユニットテスト用のxUnitテストプロジェクトを作成する
---Visual Studio Code でソリューション・エクスプローラー・ビューを開き
---ソリューション・エクスプローラー・ビューで、APL2007M4PrimeServiceを右クリックし、新しいプロジェクトを選択
---プロジェクト タイプのリストが表示されたら、xUnit テスト プロジェクトを選択
---プロジェクト名として「PrimeService.UnitTests 」と入力し、Enterキー押下
---PrimeService.UnitTestsフォルダを展開しUnitTest1.cs ファイルを削除
---PrimeService.UnitTestsを右クリックし、[プロジェクト参照の追加]を選択して、[Numbers]を選択
---PrimeService.UnitTestsを右クリックし、新規ファイル、クラスを選択、(単体テスト用クラス)PrimeServiceTestsと入力し、Enterキー押下
---名前空間を変更する:PrimeService.UnitTests →  System.Numbers.UnitTests(System.Numbers 名前空間のコードをテスト)
---ソリューションをビルドするには、Ctrl + Shift + B → dotnet: build

--チャット・ビューを使用してユニットテストを作成する
---ソリューション・エクスプローラー・ビューの Numbers で PrimeService.cs ファイルを開く
---IsPrimeメソッドを選択しチャット・ビューを開き「コンテキストをアタッチ」ボタンを選択
---[添付ファイルの検索]DDLの最近開いたセクションでPrimeServiceTests.csを選択
---[添付ファイルの検索]テキスト ボックスに「PrimeService.Unit」と入力し「PrimeService.UnitTests.csproj」を選択
---チャット・ビューで、/tests add unit tests for my code を選択(IsPrimeメソッドが選択されている)
---Copilot の提案を確認、「計画」と「単体テストを含むコード サンプル」の2セクションが含まれている。
---[編集を適用]ボタンをクリックすると、ユニット テスト コードがエディターの新しいタブに配置される。
---このコードを使用して、PrimeService.UnitTests プロジェクト内の PrimeServiceTests.cs ファイルを更新
---[ファイル]メニューで[名前を付けて保存]を選択し、PrimeService.UnitTestsフォルダに移動
---PrimeServiceTests.csを選択し、[保存]を選択、上書きするかどうかを尋ねられたら[はい]を選択。
---更新された PrimeServiceTests.cs ファイルを確認
---ビルドが成功すると各ユニット テストの横に緑色の「テスト矢印」が表示される。

--インライン・チャットを使用してユニットテストを作成する
---ソリューション・エクスプローラー・ビューの Numbers で PrimeService.cs ファイルを開く
---IsPrimeメソッドを選択しインライン・チャット・セッションを開き、次のプロンプトを入力
 Create unit tests for the IsPrime method using the xUnit framework.
---チャット・ビューとインライン・チャットでは同様のテスト・カバレッジが生成されることを確認

-Exercise - Create unit tests for specific conditions by using GitHub Copilot 8 min~
演習 - GitHub Copilotを使って特定の条件に対するユニットテストを作成する

--Visual Studio Code環境でサンプルアプリを準備する
---SampleApps.zipのAPL2007M4PrimeService-UnitTestsフォルダをVisual Studio Code で開く
---PrimeService.UnitTestsフォルダを展開しPrimeServiceTests.csファイルのPrimeServiceTestsクラス内のすべてのコードを削除
---PrimeServiceTests.cs ファイルを保存し、ソリューションをリビルド。

--Copilot のコード行補完提案を使用してユニットテストを作成する

---PrimeServiceTestsクラス内に空白行を作成し1-2 秒待つと、Copilot がPrimeServiceTestsクラスの完了を提案。
---「承認」を選択し、Copilot によって生成された単体テストケースを確認。
---次セクションで不足している境界値の単体テストケースを提案させ追加する。

--Copilot と Copilot Chat を使用して特定の条件のユニットテストを作成する
---PrimeServiceTestsクラスの内容を選択しチャット・ビューを開く
---PrimeService.cs ファイルをチャット・ビューにD&Dしてコンテキストとして追加。
---チャット・ビューに次のプロンプトを入力:@workspace #selection are there any edge cases that should also be tested 

---Copilot が提供する提案を確認
 Yes, there are a few edge cases that should also be tested:
 1. Large Prime Numbers: Ensure the function can handle large prime numbers.
 1. 大きな素数: 関数が大きな素数を処理できることを確認します。
 2. Large Non-Prime Numbers: Ensure the function can handle large non-prime numbers.
 2. 大きな非素数: 関数が大きな非素数を処理できることを確認します。
 3. Even Numbers Greater Than 2: Ensure the function returns false for even numbers greater than 2.
 3. 2 より大きい偶数: 関数が 2 より大きい偶数に対して false を返すことを確認します。
 4. Small Prime Numbers: Ensure the function correctly identifies small prime numbers like 2 and 3.
 4. 小さな素数: 関数が 2 や 3 などの小さな素数を正しく識別することを確認します。
 Here are the additional test cases:
 追加のテスト ケースは次のとおりです。

---PrimeServiceTestsクラスの最後のテスト・メソッドの後に空白行を作成
---チャット・ビューでコード・スニペットの上にマウスを移動し[カーソル位置に挿入]を選択
---PrimeServiceTests.cs ファイルを保存し、ソリューションをリビルド。
---生成されたIsPrimeメソッドの単体テストを確認、テストに満足したらテストを実行して合格することを確認。
---マウス・ポインタを緑色の「テスト矢印」の上に置きクリックでテスト実行、右クリックでオプションを表示
---緑色の「テスト矢印」の 1 つを右クリックし「Reveal in Test Explorer(テスト・エクスプローラーで表示)」を選択
---テストの実行とデバッグ、およびテスト実行、結果表示に使用できるテスト・エクスプローラー・ビューが開く。
---テスト・エクスプローラー・ビューで[テストの実行]を選択しテスト実行、結果表示。全テストに合格することを確認。

-Exercise - Complete the "create unit tests" challenge 12 min~
演習 - 「ユニットテストの作成」に挑戦する

--Visual Studio Code環境でサンプルアプリを準備する
---SampleApps.zipのAPL2007M4BankAccountフォルダをVisual Studio Code で開き、ソリューションをリビルド&実行。

--チャレンジ要件
---BankAccountクラス内のメソッド(Credit、Debit、Transfer、GetBalance、CalculateInterest)毎にxUnit 単体テストを作成
---メソッド毎に1つ以上のテストケースを作成し、合計12以上のテストケースを作成する。
---すべてのテストがテスト・エクスプローラーに表示され、メソッド毎に1つ以上を合格させる。

--チャレンジの手順
---ソリューションに xUnit テスト プロジェクトを追加しプロジェクトにBankAccount.UnitTestsという名前を付ける。
---必要なプロジェクト参照とクラス ファイルを作成、Copilot Chatでユニット テストを作成。
---ソリューションをビルドし、テストがテスト・エクスプローラーに表示されることを確認。
---テストを実行し、必要な数のテストが正常に実行されることを確認。

-Review the "create unit tests" solution 7 min~
「ユニットテストを作成する」ソリューションをレビューする。

--Visual Studio Code環境でサンプルアプリを準備する
---SampleApps.zipのAPL2007M4BankAccountフォルダをVisual Studio Code で開き、ソリューションをリビルド&実行。
---ソリューション・エクスプローラー・ビューからAPL2007M4BankAccountClassフォルダを右クリックし、[新しいプロジェクト]を選択
---[新しいプロジェクトの作成]ダイアログ ボックスで、[xUnit テスト プロジェクト]を選択。
---プロジェクトにBankAccount.UnitTestsという名前を付けデフォルトの場所にプロジェクトを作成。
---UnitTest1.cs ファイルを削除しBankAccount プロジェクトへの参照を追加する。
---BankAccountTests.csファイルにBankAccount.UnitTestsクラスを追加しソリューションをリビルド。

--BankAccountチャットビューを使用してクラスのユニットテストを作成する

---BankAccount.cs ファイルを開きBankAccount クラス全体を選択(全体の方がコンテキスト理解に役立つ)
---チャット・ビューを開き[コンテキストのアタッチ] ボタンで、BankAccountTests.cs と BankAccount.UnitTests.csproj をコンテキストとして追加。
---チャット・ビューで、/tests(スラッシュ・コマンド)を選択してコードのユニットテストを追加、[編集を適用]を選択
---[ファイル]メニューで[名前を付けて保存]を選択し、BankAccount.UnitTestsフォルダーに移動。
---BankAccountTests.csを選択し、[保存]を選択、既存のファイルを上書きするかどうかを尋ねられたら、[はい]を選択。
---BankAccountTestsクラスに、BankAccount型のプライベート読み取り専用フィールド _bankAccount(テスト対象)が含まれていることを確認。
---ソリューションをリビルドし、テストが Visual Studio Code 環境内でビルドされ、認識されることを確認。

--チャット・ビューを使用して境界値の単体テストケースを作成
---BankAccountTests.cs ファイルを開きBankAccountTests クラスを選択。
---チャット・ビューを開き[コンテキストのアタッチ] ボタンで、BankAccount.cs をコンテキストとして追加。
---次のプロンプトを入力:@workspace #selection Are there edge case unit tests for the BankAccount class that are missing? If so, generate the edge case unit tests. Show the unit tests without the surrounding class.
---チャット・ビューで、提案された境界値の単体テストケースを確認、BankAccountTests.cs ファイルにエッジ ケースの単体テストを追加。
---ファイルを保存、ソリューションをビルド、少なくとも 12 個の一意の xUnit ユニット テストを作成したことを確認
---BankAccountTests.cs ファイルの内容全体を選択し、インライン・チャットを開く。
---次のプロンプトを入力:#selection arrange the unit tests in order by the method that they are testing
---提案された更新を確認して承認、ファイルを保存し、ソリューションをリビルド。

--テスト・エクスプローラーを使用してユニットテストを実行
---すべてのテストを実行するには「テストの実行」を選択
---各メソッドの少なくとも 1 つのテストが合格することを確認

***Knowledge check & summary [#h1acdb5b]
-Knowledge check 7 min

--アサーション:ユニットテストにおいて想定される結果と実際の結果を比較する検証の仕組み
---関数が想定外のデータを受け取らないようにするために使われる。
---入力データの妥当性を確認するものであり、関数の出力結果を直接検証するものではない。

-Summary 3 min

***Exercise [#na1d59e5]

**[[Implement code improvements using GitHub Copilot tools>https://learn.microsoft.com/en-us/training/modules/implement-code-improvements-using-github-copilot-tools/]] [#c46804c3]
GitHub Copilot ツールを使用してコードの改善を実装する

***ユニット [#l42d8e93]

-Introduction 3 min

-Examine GitHub Copilot support for code improvements 6 min~
GitHub Copilotのサポートを検討し、コードを改善

--AI を活用したツールがなければ、コードの改善を実装するには経験と時間が必要

--Copilot Chat によるコードの改善

---効果的なプロンプトを作成するための知識と能力は必要
---提案された更新を評価して実装する知識と能力は必要
---焦点を当てるコード改善のカテゴリ:品質、信頼性、性能、セキュリティ、または、スケーラビリティ、ユーザビリティ、ポータビリティ

--コード品質の改善~
リファクタリング、デザイン パターン、コード スタイル強化、ベスト プラクティス、コーディング標準
---プロンプト:「Userクラスのモジュール性を高めるためにリファクタリングの更新を提案してください。」
---プロンプト:「クラスの内部構造を改善するためのOrderServiceデザイン パターンの提案を提供します」
---プロンプト:「ProductControllerクラスを読みやすくするために、コード スタイルの強化を推奨します。」

--コードの信頼性の向上~
エラー処理、入力検証、例外処理でエッジケースや予期しない状況をより効果的に処理
---プロンプト:「クラスに対して、より適切なエラー処理戦略を提案してくださいPaymentService。」
---プロンプト:「LoginForm無効なユーザー入力を防ぐために、クラスの入力検証を改善してください。」
---プロンプト:「クラス内の例外処理を強化してDatabaseConnection、接続エラーをより適切に処理します。」

--コードパフォーマンスの改善~
アルゴリズム最適化、メモリ使用量の削減、コード実行の効率化で、より少ないリソースで高速に処理される。

---プロンプト:「パフォーマンスを向上させるために、ProductListクラスで使用されるソート アルゴリズムを最適化します。」
---プロンプト:「ImageProcessingクラス内のメモリ使用量を減らして効率を高めます。」
---プロンプト:「SearchServiceクラスの効率を改善して、検索クエリを高速化します。」

--コードセキュリティの改善
データ暗号化の強化、安全な認証メカニズム、セキュリティ脆弱性の防止で機密データを保護し、不正アクセスを防止する。

---プロンプト:「ユーザー パスワードを保護するために、クラス内のデータ暗号化を強化しますUserCredentials。」
---プロンプト:「LoginService不正アクセスを防ぐために、クラスに安全な認証メカニズムを実装します。」
---プロンプト:「一般的なセキュリティの脆弱性を防ぐために、クラスに安全な例外処理を実装しますSecurityService。」

--Visual Studio Code で Copilot ツールにアクセスする~
・コード行補完、インライン・チャット、チャット・ビュー、クイック・チャット、スマート・アクションのうち~
・改善のための柔軟なプロンプトを入力できるチャット・ビューとインライン・チャットが役立つ。~
・チャット・ビューはコード改善のための評価に役立ち、インライン・チャットはより高速に機能する。

---チャット・ビュー~
・提案には、コードベースの改善に役立つ「自然言語応答」と「コード・スニペット」が含まれる。~
・「自然言語応答」では、提案された更新を実装する方法についての説明、提案、ガイダンスが提供される。~
・「コード・スニペット」では、コードを変更する方法の具体的な例が提供されます。~
・提案を確認し、その関連性を評価し、目標に合致する「コード・スニペット」をクリップボード経由 or 直接挿入。

---インライン・チャット~
・提案は、エディタ上で直接表示され、提案は、自然言語による説明やガイダンスなしで、コードの更新として表示される。~
・別のパネルに切り替えることなく、コードをどのように改善できるかをすばやく確認し、変更を加えることができる。

***Exercise [#g3ee0794]
-Exercise - Improve code quality by using GitHub Copilot Chat 16 min~
演習 - GitHub Copilot Chat を使ってコードの品質を向上させる

--コードリファクタリングと高品質コード
---外部の動作を変更せずに既存のコードを再構築するプロセス
---コードベースの内部構造を改善し、理解、保守、拡張を容易にする
---読みやすさの向上、複雑さの軽減、モジュール性の向上、再利用性の向上によって、高品質のコードを作成するのに役立つ。
---考慮事項:読み易さ、複雑さの軽減、モジュール性と再利用性、拡張性など。

--Visual Studio Code環境でサンプルアプリを準備
---SampleApps.zipのAPL2007M5BankAccountフォルダをVisual Studio Code で開き、ソリューションをリビルド&実行。
---Program.csファイルを開き、コードを確認(銀行口座を作成し、その口座を使用して取引をシミュレート)

--Copilot Chat のプロンプトを開発する

---チャット・ビューからコンテキストとしてBankAccount.cs と Program.cs を添付

---プロンプト:「@workspace /explain How can I improve the readability of the [selected code]?」~
@workspace /explain [選択したコード] の読みやすさを向上させるにはどうすればよいですか?

---プロンプト:「@workspace /explain #selection How can I improve the maintainability of the [selected code]?」~
@workspace /explain #selection [選択したコード] の保守性を向上させるにはどうすればよいですか?

---プロンプト:「@workspace /explainHow can I improve the modularity of the [selected code]?」~
@workspace /explain [選択したコード] のモジュール性を向上させるにはどうすればよいですか?

---プロンプト:「#selection How can I refactor the [selected code] to improve modularity?」~
#selection [選択したコード] をリファクタリングしてモジュール性を向上させるにはどうすればよいですか?

---プロンプト:「@workspace /explain What are some options for simplifying the [selected code]?」~
@workspace /explain [選択したコード] を簡素化するためのオプションは何ですか?

--Copilot Chat を使用してコードをリファクタリングする

---Program.cs ファイルに含まれているメソッドを確認
---準備したプロンプトから最初のプロンプトを選択
---改善したいコードを選択し、チャット・ビューを開く

---チャット・ビューで、[コンテキストの添付]ボタンを使用して関連ファイルを追加しプロンプトを入力
 @workspace /explain #selection How can I improve the readability of the GenerateRandomBalance, GenerateRandomAccountHolder, GenerateRandomAccountType, and GenerateRandomDateOpened methods?
 @workspace /explain #selection GenerateRandomBalance、GenerateRandomAccountHolder、GenerateRandomAccountType、および GenerateRandomDateOpened メソッドの読みやすさを向上させるにはどうすればよいですか?

---生成されたメソッドの読みやすさを向上させる手順~
・Randomオブジェクトを生成する繰り返しコードを別のメソッドに抽出する~
・GenerateRandomDateOpened メソッドのrange変数名をdaysRangeの様な説明的な名前にする。~
・各メソッドの動作を説明するコメントを追加すると、コードを読む他の開発者にとって役立つ。~
・GenerateRandomDateOpened メソッドで開始日を何年遡れるかを表す数値(10)を、MaxYearsBackの様な解り易い名前を持つ定数に抽出。~
・C# では、代入の右側で型が明らかな場合に var キーワードを使用でき、これにより、コードがより明確になり、読みやすくなる。~

---提案された更新を実装~
・ブロック コメントで既存のコードをコメント アウト、~
・チャット・ビューの [カーソル位置に挿入] を使用して提案された更新を挿入。~
・また、[コピー] オプションを使用して、更新を任意の場所に貼り付ける。

---チャット・ビューで、[コンテキストの添付]ボタンを使用して関連ファイルを追加しプロンプトを入力
 @workspace /explain How can I improve the maintainability of the Main, GenerateRandomBalance, GenerateRandomAccountHolder, GenerateRandomAccountType, and GenerateRandomDateOpened methods?。
 @workspace /explain Main、GenerateRandomBalance、GenerateRandomAccountHolder、GenerateRandomAccountType、および GenerateRandomDateOpened メソッドの保守性を向上させるにはどうすればよいですか?。

---生成されたメソッドの読みやすさを向上させる手順~
・Randomオブジェクトを生成する繰り返しコードを別のメソッドに抽出する~
・GenerateRandomDateOpened メソッドのrange変数名をdaysRangeの様な説明的な名前にする。~
・各メソッドの動作を説明するコメントを追加すると、コードを読む他の開発者にとって役立つ。~
・GenerateRandomDateOpened メソッドで開始日を何年遡れるかを表す数値(10)を、MaxYearsBackの様な解り易い名前を持つ定数に抽出。~
・C# では、代入の右側で型が明らかな場合に var キーワードを使用でき、これにより、コードがより明確になり、読みやすくなる。~

---提案された更新を実装~
・ブロック コメントで既存のコードをコメント アウト、~
・チャット・ビューの [カーソル位置に挿入] を使用して提案された更新を挿入。~
・また、[コピー] オプションを使用して、更新を任意の場所に貼り付ける。

-Exercise - Improve code reliability and performance by using GitHub Copilot Chat 16 min~
演習 - GitHub Copilot Chat を使ってコードの信頼性とパフォーマンスを向上させる

--コードの信頼性と性能
---コードの信頼性を調べる:潜在的な問題 / テスト / 例外処理 / 開発プラクティス / 信頼性の目標と指標 / ドキュメント / 依存関係 / 性能 / 監視とトラブルシューティング / 設計とアーキテクチャ / 外部要因
---コードの性能を調べる:アルゴリズム最適化 / 不必要な計算を避ける / マルチスレッド・非同期 / プロファイルとベンチマーク / メモリを効率的に管理 / データベースのやり取りを最適化 / コードレビュー / 最新の状態を維持 / 教育とコラボレーション

--Copilot Chat を使用したコードの信頼性と性能の向上
---Visual Studio Code環境でサンプルアプリを準備する(SampleAppsのAPL2007M5BankAccount-Reliability)

--Copilot Chat のプロンプトを開発する
---更新するコードよりも高いレベルでスコープ設定された外部コンテキストを定義
---スコープ参照(ファイル参照、環境参照)、[コンテキストを添付]などを活用
---意図は明確、簡潔、かつ具体的で改善の種類を指定する必要がある。

--BankAccountプロジェクトを展開し、BankAccount.csおよびProgram.csコード ファイルを確認、プロンプトを考え、以下から 2 つのプロンプトを選択して改善を実行。

---プロンプト:「@workspace /explain How can I improve exception handling the [selected code]?」(+ BankAccount.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] の例外処理を改善するにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I reduce unexpected issues for the [selected code]?」(BankAccount.cs を Chat コンテキストにアタッチ)」~
「@workspace /explain [選択したコード] の予期しない問題を減らすにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve unit test support for the [selected code]?」(BankAccount.cs を Chat コンテキストにアタッチ)」~
「@workspace /explain [選択したコード] の単体テストのサポートを改善するにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I avoid future bugs or issues in the [selected code]?」(Program.cs を Chat コンテキストにアタッチ)」~
「@workspace /explain [選択したコード] で今後バグや問題が発生するのを防ぐにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve exception handling for the [selected code]?」(Program.cs を Chat コンテキストにアタッチ)」~
「@workspace /explain [選択したコード] の例外処理を改善するにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve the efficiency of algorithms or data structures for the [selected code]?」(Program.cs を Chat コンテキストにアタッチ)」~
「@workspace /explain [選択したコード] のアルゴリズムまたはデータ構造の効率を向上させるにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve performance with asynchronous tasks or methods in the [selected code]?」(Program.cs を Chat コンテキストにアタッチ)」~
「@workspace /explain [選択したコード] 内の非同期タスクまたはメソッドのパフォーマンスを向上させるにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve unit test support for the [selected code]?」(BankAccountTests.cs と BankAccount.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] の単体テストのサポートを改善するにはどうすればよいですか?」

--Copilot Chat を使用して BankAccount クラスのコード信頼性を向上させる

---BankAccount.cs の全コードを選択、Program.cs、BankAccount.csをコンテキストに添付し、1番目のプロンプトを入力
 @workspace /explain How can I improve exception handling in the BankAccount.cs file?

---Copilot Chat の「特定の例外を使用する / 例外メッセージに詳細情報を含める / カスタム例外を検討する」的な提案を取り込む。

---BankAccount.cs の全コードを選択、Program.cs、BankAccount.csをコンテキストに添付し、2番目のプロンプトを入力
 @workspace /explain How can I reduce unexpected issues for the [selected code]?

---Copilot Chat の「アカウント タイプに列挙型を使用する / 通貨値には Decimal / 検証をさらに追加 / マジックナンバーを定数化 / 送金限度額のカスタム例外 / ログ記録」的な提案を確認

---提案の範囲が広い場合、1 つの提案項目を使用して、より具体的な意図やコンテキストを提供する新しいプロンプトを定義(例えば「検証をさらに追加」)
 @workspace /explain #file:BankAccount.cs How can I improve method validations for the selected code?

---Copilot Chat の「検証ロジックを部品化 / カスタム検証属性を使用 / Fluent Validation を使用 / マジックナンバーを定数化」的な提案を取り込む。

--Copilot Chat を使用して Program クラスのコードの信頼性と性能を向上させる

---Program.cs の全コードを選択、Program.csをコンテキストに添付し、7番目のプロンプトを入力
 @workspace /explain How can I improve performance with asynchronous tasks or methods in the Program.cs file?

---Copilot Chat の「async および await キーワードを使用した非同期プログラミング」的な提案を取り込む。

---上記に習い、「asynchronous」→「exception handling」の改善を行う。

-Exercise - Improve code security by using GitHub Copilot Chat 15 min~
演習 - GitHub Copilot Chat を使ってコードのセキュリティを向上させる

--コードセキュリティ

---コードの脆弱性を分析する(領域毎の脆弱性を知る)~
統合ポイント / 内部システム・インシデント / 電子メール / DBとストレージ / ランタイム / Webアプリ / エンドポイント

---包括的なアプローチを使用してコードセキュリティを評価する(重要な考慮事項)~
安全なコーディングの実践 / コード分析ツール / 依存関係の管理 / 認証と承認 / データ保護~
エラー処理 / セキュリティ テスト / コンプライアンス / 教育とトレーニング / インシデント対応

---コードセキュリティレビューを実施する(確認する側面)~
正確性 / セキュリティ / 設計エラーまたは制限 / 性能と拡張性 / 診断(ログ等) / (ログ等)観測~
テスト / 一貫性とコード スタイルの規則 / ローカライゼーション / アクセシビリティ(UX)

---一般的なセキュリティ上の欠陥を検索して理解する~
様々なインジェクションの欠陥 / 認証の不備 / 機密データの漏洩~
データ アクセス制御の不備 / 機能レベルのアクセス制御の欠如~
XSS / 安全でないデシリアライゼーション / 不十分なログ記録と監視~
安全でない直接オブジェクト参照 (IDOR) = 機能実装における非機能要件の欠如

--Copilot Chat を使用してコードセキュリティを向上させる
---Visual Studio Code環境でサンプルアプリを準備する(SampleAppsのAPL2007M5BankAccount-Security)

--Copilot Chat のプロンプトを開発する(同上)
---更新するコードよりも高いレベルでスコープ設定された外部コンテキストを定義~
---スコープ参照(ファイル参照、環境参照)、[コンテキストを添付]などを活用~
---意図は明確、簡潔、かつ具体的で改善の種類を指定する必要がある。

--BankAccountプロジェクトを展開し、BankAccount.csおよびProgram.csコード ファイルを確認、プロンプトを考え、以下から 3 つのプロンプトを選択して改善を実行。

---プロンプト:「@workspace /explain How can I implement authentication in the [selected code]?」(BankAccount.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] に認証を実装するにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I protect sensitive data in the [selected code]?」(BankAccount.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] 内の機密データを保護するにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I implement logging of suspicious account activities of the [selected code]?」(BankAccount.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] の疑わしいアカウントアクティビティのログ記録を実装するにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve the security of exception handling in the [selected code]?」(BankAccount.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] の例外処理のセキュリティを向上させるにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve the security of the [selected code]?」(BankAccount.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] のセキュリティを向上させるにはどうすればよいですか?」

---プロンプト:「@workspace /explain How can I improve the security of the [selected code]?」(Program.cs を Chat コンテキストにアタッチ)~
「@workspace /explain [選択したコード] のセキュリティを向上させるにはどうすればよいですか?」

--Copilot Chat を使用して BankAccount クラスのコード セキュリティを向上させる

---BankAccount.cs の全コードを選択、Program.cs、BankAccount.csをコンテキストに添付し、1番目のプロンプトを入力
 @workspace /explain How can I implement authentication in the BankAccount.cs file?

---Copilot Chat の「認証についての」的な提案を確認(大きな機能要件に対する提案は不十分)
---提案の範囲が広い場合、1 つの提案項目を使用して、より具体的な意図やコンテキストを提供する新しいプロンプトを定義(例えば「パスワード認証」)

---BankAccount.cs の全コードを選択、Program.cs、BankAccount.csをコンテキストに添付し、詳細化/具体化されたプロンプトを入力
 @workspace /Explain How can I update the Program.cs file to use the password and authentication added to BankAccount.cs?

---Copilot Chat の「パスワード認証の実装についての」的な提案を取り込む

---BankAccount.cs の全コードを選択、Program.cs、BankAccount.csをコンテキストに添付し、2番目のプロンプトを入力
 @workspace /explain How can I protect account numbers and account holder names in the selected code?

---Copilot Chat の「カプセル化 / 機密データを暗号化 / プレーンテキストの保存を避ける」的な提案を確認、取込は演習の範囲を超えるので不要

--Copilot Chat を使用して Program クラスのコード セキュリティを向上させる

---Program.cs の全コードを選択、Program.cs、BankAccount.csをコンテキストに添付し、セキュリティについての追加のプロンプトを入力
 @workspace /explain How can I improve the security of the Program.cs file?

---Copilot Chat の「安全なパスワードの取り扱い / 暗号化 / ハードコードを避ける / 安全な乱数生成を使用」的な提案を取り込む。他の提案は演習の範囲を超えるので不要

---Program.cs の全コードを選択、Program.cs、BankAccount.csをコンテキストに添付し、例外についての追加のプロンプトを入力
 @workspace /explain How can I implement secure exception handling in the Program.cs file?

---Copilot Chat の「特定の例外をキャッチ / 例外を安全にログに記録 / ユーザーフレンドリーなメッセージを提供 / クリーンアップには Finally / 重要でない例外をキャッチしない」的な提案を取り込む。

-Exercise - Complete the "app improvement" challenge 20 min~
演習 - 「アプリの改善」課題を完了する

--課題: GitHub Copilot Chat を使用して APL2007M5SalesReport アプリケーションを改善する

--コーディング環境を準備する
---Visual Studio Code環境でサンプルアプリを準備する(SampleAppsのAPL2007M5SalesReport)

--チャレンジ要件

---2 つ以上のプロンプトからの提案を使用して、QuarterlySalesReportメソッドのモジュール性を向上させる。~
・レポート テーブルを構築するコードを、DisplayReports という名前の別のメソッドに抽出~
・上位 3 つの製品を識別するコードを TopThree という名前の別のメソッドに抽出

---1 つ以上のプロンプトからの提案を使用して、QuarterlyIncomeReportクラスのエラー処理を改善~
売上レポートの表示に寄与する少なくとも 3 つのメソッドに対してエラー処理を実装

---1 つ以上のプロンプトからの提案を使用して、認証されたユーザーのみが販売情報にアクセスできるようにする。~
・QuarterlySalesReportメソッドへのアクセスを認証されたユーザーのみに制限~
・認証されていないユーザーが、売上レポートの生成に使用されるメソッドにアクセスできないようにする。

---コードを直接記述せずCopilotの提案を使用。
---Copilot が問題を修正できない場合、提案コードの更新でのみエラーを修正できる。

--チャレンジの手順(割愛)

-Review the "app improvement" solution 8 min~
「アプリの改善」ソリューションをレビュー(前のセクションの課題に対する 1 つの解決策)

--コード品質の改善

---QuarterlySalesReportメソッドのモジュール性を向上させるプロンプト(QuarterlySalesReportメソッドを選択し)
 @workspace #selection Extract the code that builds report tables to a separate method named DisplayReports. This method should accept the required input parameters and return a Boolean that indicates successful completion.

---上位 3 つの製品を識別するコードを TopThree という別のメソッドに抽出するプロンプト(QuarterlySalesReportメソッドを選択し)
 @workspace #selection Extract the code that identifies the top three products to a separate method named TopThree. This method should accept the required input parameters and return a Boolean that indicates successful completion.

--コードの信頼性の向上

---QuarterlyIncomeReportクラスの売上レポートの表示に寄与する少なくとも 3 つのメソッドのエラー処理を改善するプロンプト(売上レポートの表示に寄与するメソッドを選択)
 @workspace #selection Implement error handling for the selected methods.

--コードセキュリティの改善

---QuarterlySalesReportメソッドへのアクセスを認証されたユーザーのみに制限するプロンプト(QuarterlySalesReportメソッドを選択し)
 @workspace #selection Restrict access to the **QuarterlySalesReport** method to authenticated users only.

***Knowledge check & summary [#qfce705d]
-Knowledge check 8 min
-Summary 3 min

***Exercise [#y25d6034]

**[[Guided project - Accelerate app development using GitHub Copilot tools>https://learn.microsoft.com/en-us/training/modules/guided-project-accelerate-app-development-using-github-copilot-tools/]] [#q805c95a]
ガイド付きプロジェクト - GitHub Copilot ツールを使用してアプリ開発を加速する

***ユニット [#t61378a0]

-Introduction 2 min

-Prepare the development environment 6 min~
開発環境の準備

--プロジェクト概要
---事故で図書館のサーバーが損傷し、修復には数週間かかるため、あなたのチームは図書館員が基本機能を利用できる一時的なソリューションを3日で開発する必要がある。
---最小限の機能として、本の貸し出し・返却を提供するコンソールアプリを作成し、図書館のラップトップで実行可能にする。
---最初は2人で作業し、あなたは図書館の記録をもとにJSONデータを作成、2日目からコード作成を支援。
---安全で信頼できるシステムが求められ、1日後にバージョン1.0のデモを実施予定。
---GitHub Copilotを活用し、将来的には拡張も視野に入れている。

--プロジェクト開発環境の設定
---ローカル PC またはホストされた環境で実行できる
---セットアップ プロセスには、次の手順が含まれる。~
・リソース要件を確認~
・コーディング ツールをインストールまたは更新~
・Visual Studio Code 拡張機能を構成~
・同僚が開発したライブラリ アプリケーション コードをダウンロード~

--リソース要件~
開発環境には次のソフトウェアがプロビジョニングされたローカル PC またはホスト環境が必要
---Git バージョン管理ソフトウェア
---.NET SDK 8.0 (または最新の LTS バージョン)。
---Visual Studio Code、C# Dev Kit 拡張機能(MS)、GitHub Copilot および GitHub Copilot Chat 拡張機能 (GitHub)。
---アクティブな GitHub Copilot サブスクリプションを持つ GitHub アカウント。

--コーディングツールをインストールまたは更新する
---Git バージョン管理ソフトウェアをインストール/更新
---.NET SDK 8.0 または最新の LTS バージョンをインストール/更新
---最新バージョンの Visual Studio Code をインストール/更新

--Visual Studio Code を構成する
---Visual Studio Code の C# Dev Kit と GitHub Copilot 拡張機能
---Visual Studio Codeでライブラリアプリケーションを設定する

--Visual Studio Codeでライブラリ・アプリケーションを設定
---同僚がライブラリ アプリケーションの初期バージョンを開発し.zipしたファイルを次のリンクからダウンロード:~
https://raw.githubusercontent.com/MicrosoftLearning/APL-2007-Accelerate-app-development-by-using-GitHub-Copilot/master/LearnModuleExercises/Downloads/GuidedProjectApp.zip
---ダウンロードしたGuidedProjectApp.zipを右クリックし、[すべて展開]を選択
---[完了時に抽出されたファイルを表示する]を選択し、[抽出]を選択。抽出したフォルダの場所をメモ。
---抽出したGuidedProjectAppフォルダーを、Windows デスクトップ フォルダーなどのアクセスしやすい場所にコピー。
---Visual Studio Code でAccelerateDevGitHubCopilotフォルダーを開きソリューション・エクスプローラー・ビューで、ソリューション構造を確認
---ソリューション・エクスプローラー・ビューで、AccelerateDevGitHubCopilot を右クリックし、ビルドを選択、ソリューションが正常にビルドされたことを確認

--ソリューション構造
 AccelerateDevGitHubCopilot\
 ├src\
 │├Library.ApplicationCore\
 │├Library.Console\
 │└Library.Infrastructure\
 └tests\
  └UnitTests\

***Exercise [#je2cb0d1]
-Exercise - Analyze and document code using GitHub Copilot tools 20 min~
演習 - GitHub Copilot ツールを使用してコードを分析し、文書化する

--ライブラリアプリケーションのコードベースを調べる
GitHub Copilotを使用してライブラリアプリケーションのコードベースを説明する

---AccelerateDevGitHubCopilotVisual Studio Code でソリューションが開いていることを確認

---チャット ビューを開き、次のプロンプトを入力
 @workspace Describe this project
---回答を確認(プロジェクトの説明)

---ConsoleApp.csファイルを見つけて開き、チャット・ビューを開き次のプロンプトを入力(#editorはエティット中の周辺らしい)
 @workspace #editor Describe the ConsoleApp class
---回答を確認(ConsoleAppクラスの説明)

---Program.csファイルを見つけて開き、チャット・ビューを開き次のプロンプトを入力(#editorはエティット中の周辺らしい)
 @workspace #editor Describe the Program.cs file
---回答を確認(Programクラスの説明)

---Library.Infrastructureプロジェクト・フォルダを開きチャット・ビューを開く、
---次に、JsonData.cs、JsonLoanRepository.cs、JsonPatronRepository.csファイルをコンテキストに追加。
---チャット・ビューに次のプロンプトを入力(スラッシュ・コマンド:/explain を使用)
 @workspace /explain Explain how the data access classes work
---回答を確認(データ アクセス クラスの説明)

---ライブラリ レコードをシミュレートするために使用されるsrc/Library.Console/JsonフォルダのJSON データ ファイルを調べる。

--アプリケーションをビルドして実行する
---ビルド
---CLIを実行(仕様の雰囲気が解る)

--コード用のGitHubリポジトリを作成する
---割愛
---README ファイルのプロジェクト ドキュメントを生成するには、次のプロンプトを入力します。
 @workspace Generate the contents of a README.md file for the code repository. Use "Library App" as the project title. The README file should include the following sections: Description, Project Structure, Key Classes and Interfaces, Usage, License. Format all sections as raw markdown. Use a bullet list with indents to represent the project structure. Do not include ".gitignore" or the ".github", "bin", and "obj" folders.
---割愛
---Visual Studio Code のソース管理ビューのメッセージ ボックスの右側にあるアイコンを選択しGitHub Copilot でコミット メッセージを生成
---割愛

-Exercise - Develop code features using GitHub Copilot tools 20 min~
演習 - GitHub Copilot ツールを使用してコードの機能を開発する

--リポジトリに新しいブランチを作成する(割愛)

--図書館員が本の在庫状況を判断できる機能を開発

---CommonActions.cs ファイルを開き、CommonActions列挙型を選択しインライン・チャットに次のプロンプトを入力
 Update selection to include a new `SearchBooks` action.
---CommonActions列挙型への新しいSearchBooksアクションを追加するコード更新の提案を確認し[承認]を選択。

---ConsoleApp.cs ファイルを開き、WriteInputOptionsメソッドを見つけて選択しインライン・チャットに次のプロンプトを入力
 Update selection to include an option for the `CommonActions.SearchBooks` action. Use the letter "b" and the message "to check for book availability".
---WriteInputOptionsメソッドへの新しいCommonActions.SearchBooksのifブロックを追加するコード更新の提案を確認し[承認]を選択。

---ConsoleApp.cs ファイルを開き、ReadInputOptionsメソッドを見つけて選択しインライン・チャットに次のプロンプトを入力
 Update selection to include an option for the `CommonActions.SearchBooks` action.
---ReadInputOptionsメソッドへの新しいCommonActions.SearchBooksのswitchブロックを追加するコード更新の提案を確認し[承認]を選択。

---ConsoleApp.cs ファイルを開き、PatronDetailsメソッドを見つけて選択しインライン・チャットに次のプロンプトを入力
 Update selection to add `CommonActions.SearchBooks` to `options` before calling `ReadInputOptions`. Add an `else if` block to handle the `SearchBooks` action. The `else if` block should call a new method named `SearchBooks`.
---PatronDetailsメソッドがReadInputOptionsメソッドを呼び出した後、CommonActions.SearchBooksに対応したelse ifブロックでSearchBooksメソッドを呼び出すコード更新の提案を確認し[承認]を選択。

---ConsoleApp.cs ファイルを開き、PatronDetailsメソッドを見つけて選択しインライン・チャットに次のプロンプトを入力
 Update selection to add `CommonActions.SearchBooks` to `options` before calling `ReadInputOptions`. Add an `else if` block to handle the `SearchBooks` action. The `else if` block should call a new method named `SearchBooks`.
---PatronDetailsメソッドがReadInputOptionsメソッドを呼び出した後、CommonActions.SearchBooksに対応したelse ifブロックでSearchBooksメソッドを呼び出すコード更新の提案を確認し[承認]を選択。

---SearchBooksメソッドの処理要件について考えつつ、ConsoleApp.cs ファイルにSearchBooksメソッドが作成されていることを確認

---SearchBooksメソッドを選択しインライン・チャットに次のプロンプトを入力
 Update selection to obtain a book title. Prompt the user to "Enter a book title to search for". Read the user input and ensure the book title isn't null.
---ユーザーが指定した本のタイトルを取得するコード更新の提案を確認し[承認]を選択。

---SearchBooksメソッドを選択しチャット・ビューを開き、次のファイルをコンテキストに追加:ConsoleApp.cs、JsonData.cs、JsonLoanRepository.cs、Books.json、Loans.json、BookItems.json
---次のプロンプトを入力:ファイル内で一致する書籍のタイトルを検索し、その書籍が貸出可能かどうかを確認する。
 @workspace  Explain how to update the `SearchBooks` method and ConsoleApps class to find a matching book title in the `Books.json` file. Use the user supplied book title to find a matching book. If a book is found, use Loans.json to check if the book is available for loan. If the book has been returned, display a message stating "`book.title` is available for loan". If the book is on loan, display a message stating "`book.title` is on loan to another patron. The return due date is `loan.DueDate`".

---ファイル内で一致する書籍のタイトルを検索し、その書籍が貸出可能かどうかを確認するコード更新の提案を確認しメソッドとクラスを更新する。~
・ステップ1: JsonDataクラスにタイトルで書籍を検索するSearchBookByTitleメソッドを追加~
・ステップ2: ConsoleAppクラスのSearchBooksメソッドを更新(内部でSearchBookByTitleを呼ぶ)~
・ステップ3: Program.csを更新してJsonDataをConsoleAppに渡す(でAddSingleton)~

---SearchBooksメソッドを選択しチャット・ビューに次のプロンプトを入力
 Explain the LINQ queries and the evaluation of the book's availability status.
---生成結果を客員し実装に問題がないことを確認する(非手続きのLINQはパッと解り難いので)。

---ソリューション・エクスプローラー・ビューで、ソリューションが正常にビルドされたことを確認
---新しい機能によって書籍の在庫状況が正しく判断されることを確認
---変更をリモートリポジトリにプッシュし、プル リクエストでメイン ブランチにマージ。
---GitHub Copilot Enterprise をサブスクリプションしている企業のメンバは、GitHub Copilot を使用して GitHub.com でプル リクエストの概要を生成できる。~
(色々調べると、GitHub Copilot ではなくOpenAIを使用することもできる。また、Github Actionsをオプションとして使用することもできるらしい)

-Exercise - Develop unit tests using GitHub Copilot tools 20 min~
演習 - GitHub Copilot ツールを使用してユニットテストを開発する

--UnitTestsプロジェクトによって実装されたユニットテストへのアプローチを調べる

---チャット・ビューを開き、次のファイルをコンテキストに追加:LoanFactory.cs, PatronFactory.cs, ExtendLoan.cs, ReturnLoan.cs, RenewMembership.cs, LoanService.cs, PatronService.cs.
---次のプロンプトを入力:ワークスペースのコンテキストでユニット テストへのアプローチを説明するように求める。
 @workspace Explain the approach to unit testing that's been implemented in this workspace.
---次のプロンプトを入力:ワークスペースのコンテキストでユニットテストに対するこのアプローチの利点を説明するように求める。
 @workspace What are the benefits of this approach to unit testing?

---チャット・ビューを開き、次のファイルをコンテキストに追加:LoanFactory.cs, PatronFactory.cs, ExtendLoan.cs, ReturnLoan.cs, RenewMembership.cs, LoanService.cs, PatronService.cs.
---次のプロンプトを入力:ワークスペースのコンテキストでユニットテストを開始するためのプロセスの概要を提供するよう求める。
 @workspace How can I extend the `UnitTests` project to begin testing methods in the `Library.Infrastructure` project? Provide a process overview.

--UnitTestsプロジェクトを拡張してデータアクセスクラスのテストを開始する

---チャット・ビューを開き、UnitTests.csprojファイルをコンテキストに追加

---次のプロンプトを入力:ワークスペースのコンテキストでテストプロジェクトへ非テストプロジェクトの参照を追加する方法を説明するように求める。
 @workspace Explain how to add a reference to the Library.Infrastructure project inside `UnitTests.csproj`.
---GitHub Copilot の応答を使用して、UnitTests.csproj ファイルを更新

---チャット・ビューを開き、次のファイルをコンテキストに追加:JsonLoanRepository.cs, ReturnLoan.cs, LoanService.cs, LoanFactory.cs, JsonData.cs.
---次のプロンプトを入力:ワークスペースのコンテキストでJsonLoanRepository.GetLoanメソッドのユニット テストのGetLoanTestクラスのフィールドとクラス コンストラクターを提案するよう求める。
 @workspace Create fields and a class constructor for the `GetLoan.cs` file. The class will be used to create unit tests for the GetLoan method in the `JsonLoanRepository.cs` file. Create the following private readonly fields: `_mockLoanRepository`, `_jsonLoanRepository`, `_configuration`, and `_jsonData`. Instantiate the fields in the `GetLoanTest` constructor. Use `ConfigurationBuilder` to create a `_configuration` object that can be used to instantiate the JsonData object.

---GetLoanTestクラスの実装をGetLoan.csファイルに対して行う。

---チャット・ビューを開き、次のファイルをコンテキストに追加:JsonLoanRepository.cs, ReturnLoan.cs, LoanService.cs, LoanFactory.cs, JsonData.cs.
---次のプロンプトを入力:ワークスペースのコンテキストでJsonLoanRepository.GetLoanメソッドのユニット テストのGetLoanTestクラスのフィールドとクラス コンストラクターを提案するよう求める。

---GetLoan.csファイルの内容を選択し、チャット・ビューに次のプロンプトを入力:JsonLoanRepository.GetLoanメソッドの単体テストを提案するよう求める。
 @workspace Update the selection to include a unit test for the `JsonLoanRepository.GetLoan` method. The unit test should test the case where a loan ID is found in the data. Use `_mockLoanRepository` to arrange the expected return loan. Use `_jsonLoanRepository` to return an actual loan. Asserts should verify that the return loan ID matches the expected loan ID. Use a loan ID that exists in the `Loans.json` file.

---GetLoan.csファイルのGetLoanTestクラスにテストのGetLoan_ReturnsLoanWhenLoanIdIsFoundメソッドの実装を行う。

---上記で作成されたメソッドの下に空行を作成すると、ローン ID が見つからない場合のテストのGetLoan_ReturnsNullWhenLoanIdIsNotFoundメソッドの自動補完の提案がされる。

---loanIdデータ セットにない値を割り当てる自動補完の提案を受け入れるが、JSON データ ファイルが必要になるので、UnitTests.csprojにもこれを含めるように修正する。

--作業を確認する~
上記で実装したテストをテスト・エクスプローラー・ビューから実行し、オールグリーンで完了することを確認する。

-Exercise - Refactor and improve code sections using GitHub Copilot tools 15 min~
演習 - GitHub Copilot ツールを使用してコードセクションをリファクタリングし、改善

--GitHub Copilot を使用して EnumHelper クラスをリファクタリングする~
fieldInfo.GetCustomAttributesがリフレクションで処理が遅いので、ディクショナリを使用して処理を置き換える。

---ソリューション・エクスプローラー・ビューを使用して、EnumHelper.cs ファイルを開く。
---チャット・ビューを開き、次のファイルをコンテキストに追加:EnumHelper.cs, LoanExtensionStatus.cs, LoanReturnStatus.cs, MembershipRenewalStatus.cs
---次のプロンプトを入力:リフレクションではなく辞書を使用するように EnumHelper クラスを更新する方法の説明を求め、各列挙値に辞書を使用する更新されたコードを要求。
 @workspace I want to refactor the `EnumHelper` class using dictionaries rather than reflection to get enum description attributes. I want a separate dictionary for each enum. The enum values are in the `LoanExtensionStatus.cs`, `LoanReturnStatus.cs`, and `MembershipRenewalStatus.cs` files. Explain how to update the EnumHelper class to use dictionaries and provide the updated code.

---必要に応じて次のプロンプトを入力:ディクショナリの enum に不一致がある場合は、LoanExtensionStatus.cs, LoanReturnStatus.cs, and MembershipRenewalStatus.cs 毎の列挙値を使用するようにする。
 @workspace Use the description values in LoanExtensionStatus.cs to update the LoanExtensionStatus dictionary in the EnumHelper class. Provide the updated code for the LoanExtensionStatus dictionary in the EnumHelper class.
 @workspace Use the description values in LoanReturnStatus.cs to update the LoanReturnStatus dictionary in the EnumHelper class. Provide the updated code for the LoanReturnStatus dictionary in the EnumHelper class.
 @workspace Use the description values in MembershipRenewalStatus.cs to update the MembershipRenewalStatus dictionary in the EnumHelper class. Provide the updated code for the MembershipRenewalStatus dictionary in the EnumHelper class.

---生成されたコードにラムダ式が含まれるのでコードをリファクタリングしてラムダ式を削除するように指示すると読みやすくなる。

--LINQを使用するようにデータアクセスメソッドを更新する

---JsonData.cs のメソッドをリファクタリングして LINQ を使用するので、JsonData.cs ファイルを開きGetPopulatedPatronメソッドを選択
---インライン・チャットを開き、次のプロンプトを入力:#selection refactor selection to `return new Patron` using LINQ
---提案された更新を[承認]を選択して承認する。

---同じアプローチで、GetPopulatedLoan、GetPopulatedBookItem、GetPopulatedBookメソッドをリファクタリング
---JsonData.cs ファイルを開きGetPopulatedLoan or GetPopulatedBookItem or GetPopulatedBookメソッドを選択
---インライン・チャットを開き、次のプロンプトを入力:選択したメソッドに合わせてプロンプトを変える。
 #selection refactor selection to `return new Loan` using LINQ. Use `GetPopulatedBookItem` for the `BookItem` property. Use `Single` for BookItem and Patron properties.
 #selection refactor selection to `return new BookItem` using LINQ. Use `GetPopulatedBook` and `Single` for the `BookItem` property.
 #selection refactor selection to `return new Book` using LINQ. Use `Where` and `Select` for `Author` property. Use `First` author.
---提案された更新を[承認]を選択して承認する。
---LINQ クエリを選択し、明説明(Explain)スマート・アクション(コンテキスト・メニューから選択)で説明を表示したり、コードを修正したり。

--JsonLoanRepository.cs のメソッドをリファクタリングして LINQ を使用する

---JsonLoanRepository.csファイルを開き、GetLoanメソッドを選択し、インライン・チャットを開き、LINQ を使用してメソッドをリファクタリングするプロンプトを入力
 #selection refactor selection using LINQ with `_jsonData.Loans!. Use `Where`, `Select` and `GetPopulatedLoan` to return `FirstOrDefault`.
---提案された更新を[承認]を選択して承認する。
---LINQ クエリを選択し、明説明(Explain)スマート・アクション(コンテキスト・メニューから選択)で説明を表示したり、コードを修正したり。

---JsonLoanRepository.csファイルを開き、UpdateLoanメソッドを選択し、インライン・チャットを開き、LINQ を使用してメソッドをリファクタリングするプロンプトを入力
 #selection refactor selection using LINQ find an existing loan `_jsonData.Loans!. Replace existing loan.
---提案された更新を[承認]を選択して承認する。
---LINQ クエリを選択し、明説明(Explain)スマート・アクション(コンテキスト・メニューから選択)で説明を表示したり、コードを修正したり。

--JsonPatronRepository のメソッドをリファクタリングして LINQ を使用する

---JsonPatronRepository.csファイルを開き、SearchPatronsメソッドを選択し、インライン・チャットを開き、LINQ を使用してメソッドをリファクタリングするプロンプトを入力
 #selection refactor selection using LINQ with `_jsonData.Patrons!. Replace the loop with `Where`, `OrderBy`, and `GetPopulatedPatrons`.
---提案された更新を[承認]を選択して承認する。
---LINQ クエリを選択し、明説明(Explain)スマート・アクション(コンテキスト・メニューから選択)で説明を表示したり、コードを修正したり。

---JsonPatronRepository.csファイルを開き、GetPatronメソッドを選択し、インライン・チャットを開き、LINQ を使用してメソッドをリファクタリングするプロンプトを入力
 #selection refactor selection using LINQ with `_jsonData.Patrons!. Use `Where`, `Select` and `GetPopulatedPatron` to return `FirstOrDefault`
---提案された更新を[承認]を選択して承認する。
---LINQ クエリを選択し、明説明(Explain)スマート・アクション(コンテキスト・メニューから選択)で説明を表示したり、コードを修正したり。

---JsonPatronRepository.csファイルを開き、UpdatePatronメソッドを選択し、インライン・チャットを開き、LINQ を使用してメソッドをリファクタリングするプロンプトを入力
 #selection refactor selection using LINQ to find `patron` in `_jsonData.Patrons!. Replace existing patron with `patron`.
---提案された更新を[承認]を選択して承認する。
---LINQ クエリを選択し、明説明(Explain)スマート・アクション(コンテキスト・メニューから選択)で説明を表示したり、コードを修正したり。

--作業を確認する~
上記で実装したプロジェクトをビルド・実行し、仕様通りに動作することを確認する。

***Knowledge check & summary [#h1c0a424]
-Knowledge check 5 min
-Summary 2 min

***Exercise [#r329bad3]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS