本日のゴール
Copilotに頼む範囲を自分で決め、出てきたコードを受入基準とテストと画面で確かめられるようになります。作るものは、スキルシートアプリの追加機能と、そのもとになったIssueと仕様書です。
本日の学び
- コード補完とチャットとエージェントを、頼む仕事の大きさで使い分ける
- 受入基準を選んでからIssueをCopilotに渡し、受入基準ごとのテストで結果を確かめる
- AIのレビューの結果を読み、マージしてよいかを自分で判断する
- 要件と設計とタスクを先に書かせ、タスクを1つずつ実装させる
作るもの
skillsheetフォルダのアプリに、Session04でIssue1件分の機能、Session05で案件ごとの候補の画面を足します。Issueのレビューの結果はskillsheet/reviews/に、仕様書はskillsheet/specs/matching/に保存されます。
当日の流れ
全体で[240min]です。講義のあとに、必ず各自のPCでの演習が続きます。
| 枠 | 中身 | 形式 | 時間 |
|---|---|---|---|
| Session01 | オープニング、Copilotと演習フォルダの確認 | 説明 | [10min] |
| Session02 | 生成AIの最新動向とガバナンス | 説明 | [45min] |
| Session03 | GitHub Copilotとバイブコーディング | 個人演習 | [60min] |
| Session04 | Issue駆動開発 | 個人演習 | [50min] |
| Session05 | Kiro式の仕様駆動開発 | 個人演習 | [65min] |
| 閉会 | 質疑応答 | 説明 | [10min] |
進め方
- 講師が画面を共有し、各演習の最初に同じ操作を見せてから、受講者が自分のPCで進めます。
- 質問は、Zoomのチャットに「Session04 STEP2」のように番号を書き、画面に出ている文言を貼ってください。
- 各STEPの[Nmin]は目安です。時間になったら講師が次のSTEPへ進めます。生成が終わらないときは、講師が完成例のフォルダを個別にお渡しします。
始める前の準備
事前セットアップのSTEP 5までが済んでいれば、skillsheetフォルダを開いてテストを1回実行するだけで準備が整います。
skillsheetフォルダの開き方
- VS CodeのメニューでFileからOpen Folder...を選びます。
- デスクトップの1117_handsonの中にある
skillsheetを選んで開きます。1117_handsonそのものは開きません。 - メニューのTerminalからNew Terminalを選びます。
- ターミナルで
java tools/Build.java testを実行します。
プロンプトの送り方
演習では、チャットの入力欄に「/」に続けてプロンプトの名前を入れ、そのあとに対象のファイルを書いて送ります。プロンプトの本文はskillsheet/.github/prompts/にあり、Copilotはその本文と一緒に依頼を受け取ります。
- Ctrl+Alt+I(macOSはControl+Command+I)でチャットのビューを開きます。
- 入力欄に
/issue-implement issues/ISSUE-101.mdのように入力して、Enterで送ります。 - Copilotがコマンドを実行しようとすると、実行してよいかの確認が出ます。コマンドが
java tools/Build.javaで始まることを確かめてから許可します。
java tools/Build.java runで起動し、ブラウザでhttp://localhost:8080/を開くと、12名の一覧が出ます。Session03 GitHub Copilotとバイブコーディング
ねらい
Copilotには、カーソルの位置で続きを出すコード補完、質問に答えるチャット、ファイルを作ってコマンドまで動かすエージェントの3つの使い方があります。1行を書くときと、アプリを丸ごと作るときで、どれに頼むのが早いかを自分の手で比べます。後半は、同じアプリに仕様のメモを渡して直し、1行の依頼のときより思った動きに近づくかを見る構成です。
できあがりの目安
- vibeフォルダで作ったアプリが起動し、ブラウザで一覧と登録の画面が見える
- spec.mdで選んだ3つの仕様が、画面の操作で確かめられる
使うファイルと作るファイル
| 区分 | ファイル | 使い方 |
|---|---|---|
| 使う | skillsheet/src/main/java/com/example/skillsheet/util/YearsFormatter.java | STEP 1のコード補完で、メソッドの中身を書く |
| 使う | skillsheet/src/main/java/com/example/skillsheet/engineer/EngineerService.java | STEP 2のチャットで、何をしているクラスかを聞く |
| 使う | vibe/README.md、vibe/spec.md | STEP 3の依頼の候補と、STEP 4の仕様のメモ |
| 作る | vibe/src/main/java/com/example/vibe/の下 | Copilotが作るアプリのクラスと画面とSQL |
STEP 1 コード補完で1つのメソッドを書く [8min]
コード補完は、コメントとメソッド名から次の数行を予想して、薄い文字で出します。1つのメソッドを書くくらいの大きさなら、チャットを開くより早く終わります。
- skillsheetフォルダを開いたVS Codeで、
YearsFormatter.javaを開きます。 throw new UnsupportedOperationExceptionの行を消します。- 空いた行に
if (years == null) {と入力し、薄い文字の続きが出るのを待ちます。 - 続きがJavadocのとおりであればTabで受け入れ、違っていればEscで消して自分で書きます。
- メソッドの最後まで、同じように受け入れるか書くかを選びながら進めます。
if (years == null) {
return "未登録";
}
if (years < 1) {
return "1年未満";
}
if (years >= 10) {
return "10年以上";
}
return years + "年";- Javadocに書かれた「1年未満」「10年以上」「未登録」の3つの場合を、メソッドが返す
- 薄い文字の候補を、受け入れたか消したかを自分で選んだ
手が止まったら開く
候補が出ないときは、行の最後で少し待つか、Alt+\(macOSはOption+\)で候補を出します。候補がJavadocと違うときは、受け入れずに次の1行を自分で書くと、そこから先の候補が変わります。
STEP 2 チャットで既存のコードを読む [7min]
チャットのAskは、ファイルを書き換えずに質問へ答えます。初めて触るコードの役割を、ファイルを指定して聞くと、読む順番の見当が付きます。
- チャットのビューを開き、入力欄の下のエージェントの選択でAskを選びます。
- 下の文面をコピーして入力欄に貼り、送ります。
- 返事を読んだら、
EngineerRepository.javaを開き、findAllSkillsのSQLを選択します。 - 入力欄に「#selection このSQLは何を取得していますか。結合している2つのテーブルの役割も書いてください」と入れて送ります。
#file:src/main/java/com/example/skillsheet/engineer/EngineerService.java このクラスが何をしているかを3行で説明してください。 findAllの中で、技術者とスキルをどうまとめているかも書いてください。
- EngineerServiceが、技術者の一覧とスキルの一覧を技術者のIDでまとめていると説明できる
- チャットのAskでは、ファイルが書き換わらないことを確かめた
STEP 3 1行の依頼からアプリを作る [20min]
エージェントは、ファイルを作り、ビルドとテストのコマンドまで実行します。1行の依頼から、Copilotがどこまで自分で決めるかを見ます。
- メニューのFileからNew Windowを選び、新しいウィンドウで
vibeフォルダを開きます。 - チャットのビューを開き、エージェントの選択でAgentを選びます。
- vibe/README.mdの「依頼の候補」の3つから1つを選び、そのまま入力欄に貼って送ります。
- コマンドの実行の確認が出たら、
java tools/Build.javaで始まることを確かめてから許可します。 - Copilotの報告が終わったら、チャットの上に並んだ変更のファイルを1つずつ開き、変わった箇所を見ます。
- 残す変更はKeep、戻す変更はUndoを押します。
- ターミナルで
java tools/Build.java runを実行し、ブラウザでhttp://localhost:8080/を開きます。
日報アプリを作って。日付と作業内容と作業時間を登録して、一覧で見られるようにして 備品の貸出アプリを作って。備品の一覧と、誰がいつ借りたかを記録できるようにして 社内勉強会の参加登録アプリを作って。勉強会の一覧と、参加したい人の登録ができるようにして
- ブラウザで一覧が表示され、登録した内容が一覧に増える
- Copilotが自分で決めたことを、画面から2つ挙げられる(項目の単位、並び順など)
手が止まったら開く
Copilotがmvnやgradleを実行しようとしたら、許可せずに「tools/Build.javaを使ってください」と送ります。8080番ポートのエラーが出たら、skillsheetのウィンドウで起動したアプリをCtrl+Cで止めます。
STEP 4 仕様のメモを渡して直す [15min]
同じアプリに、仕様を3行書いたメモを渡して直してもらいます。メモに書いたことと、画面で起きたことを1つずつ見比べます。
vibe/spec.mdを開き、コメントの候補AからHのうち3つを選んで、「- 」の行に書き写します。- アプリを起動している場合は、ターミナルでCtrl+Cを押して止めます。
- 下の文面を、チャットの入力欄に貼って送ります。
- Copilotの報告が終わったら、アプリを起動し、選んだ3つの仕様をブラウザで1つずつ操作して確かめます。
#file:spec.md の仕様どおりに、作ったアプリを直してください。 直したら、仕様の3つを確かめるテストを書いて、java tools/Build.java test で実行してください。
- spec.mdの3つの仕様を、ブラウザの操作で1つずつ確かめた
- 1行の依頼とメモを渡す依頼で、直す回数が少なかった方を1文で言える
手が止まったら開く
画面でエラーが出たら、ブラウザの文言と、アプリを起動したターミナルの赤い行をコピーし、「この画面のエラーを直して、同じ操作を確かめるテストを足してください」と送ります。
うまくいかないとき
Copilotがpom.xmlを作ろうとします
vibe/.github/copilot-instructions.mdを読み落としています。作られた変更はUndoで戻し、「.github/copilot-instructions.md のきまりを読んでから、もう一度作ってください」と送ります。
「@SpringBootApplication を付けたクラスが複数あります」と出ます
Copilotが起動用のクラスを2つ作っています。チャットに「起動用のクラスを1つにまとめてください」と送ります。
早く終わった方へ
追加と考察
spec.mdで選ばなかった候補のうち、H「いい感じのデザインにする」だけを送ってみてください。確かめ方の無い仕様を渡すと、Copilotが何を変えるかを見比べられます。
発展課題
ご自身の業務で、Excelや紙で管理している一覧を1つ思い浮かべ、その一覧の登録と検索をする依頼を1行で書いて送ってください。そのあと、確かめられる仕様を3行書いて、違いを比べます。
Session04 Issue駆動開発
ねらい
Issueは、Copilotに渡す依頼書です。受入基準のないIssueを渡すと、Copilotは決まっていない点を自分で埋めて実装します。この演習では、受入基準を選んだIssueを渡し、受入基準ごとのテストとAIのレビューで、マージしてよいかを自分で判断するところまで通します。
できあがりの目安
- 選んだIssueの受入基準3つに対応するテストが、すべて成功している
- reviews/にレビューの結果があり、「人の判断」の欄を自分で書いた
使うファイルと作るファイル
| 区分 | ファイル | 使い方 |
|---|---|---|
| 使う | skillsheet/issues/ISSUE-100.md | あいまいなIssueの例。STEP 1でCopilotに読ませる |
| 使う | skillsheet/issues/ISSUE-101.mdからISSUE-103.md | 3つから1つを選び、受入基準を選んで書く |
| 使う | skillsheet/.github/prompts/のissue-implement、issue-test、review | STEP 2から4で「/」に続けて呼び出す |
| 作る | skillsheet/reviews/ISSUE-10x-review.md | Copilotのレビューの結果と、自分の判断 |
STEP 1 Issueを選び、受入基準を3つ選ぶ [10min]
最初に、あいまいなIssueをCopilotに読ませて、決まっていない点がどれだけあるかを見ます。そのあと、取り組むIssueを1つ選び、確かめられる受入基準を候補から3つ選びます。
- チャットのエージェントの選択でAskを選び、下の文面を送ります。
- 返事に挙がった「決まっていない点」を読みます。
- ISSUE-101、ISSUE-102、ISSUE-103のうち、1つを選んで開きます。
- 「受入基準」のコメントにある候補AからHを読み、確かめられるものを3つ選びます。
- 選んだ3つを、コメントの下の「- 」の行に書き写して保存します。
#file:issues/ISSUE-100.md このIssueだけで実装を始めるとき、決まっていない点を5つ挙げてください。 実装はしないでください。
- 選んだIssueの受入基準の欄に、「- 」で始まる行が3つある
- 候補のGとHを選ばなかった理由を、1文で言える
手が止まったら開く
迷ったら、「その基準をテストで確かめるとき、何を入力して、画面に何が出れば合格か」を言えるかで選びます。言えない基準は、Copilotにも確かめ方が分かりません。
STEP 2 Issueから実装を頼む [12min]
受入基準を書いたIssueのファイルを、プロンプトと一緒にCopilotへ渡します。Copilotは方針を先に書いてから実装し、既存のテストを実行して報告します。
- チャットのビューで新しいチャットを始めます。
- 入力欄に下の文面を入れ、ISSUE-10xの部分を選んだIssueの番号に直して送ります。
- コマンドの実行の確認が出たら、
java tools/Build.javaで始まることを確かめてから許可します。 - 変更のファイルを1つずつ開き、Issueの「やらないこと」に手が入っていないかを見て、KeepかUndoを選びます。
- アプリを起動し、受入基準の操作をブラウザで1つ行います。
/issue-implement issues/ISSUE-10x.md
- Copilotの報告に、受入基準ごとに満たした場所の表がある
- 受入基準の操作の1つを、ブラウザで確かめた
手が止まったら開く
「受入基準を3つ選んでから、もう一度送ってください」と返ってきたら、STEP 1の「- 」の行が空のまま保存されています。ファイルを保存し直してから、同じ文面を送ります。ISSUE-101を選んだ場合は、一覧の上に検索欄ができ、「Java」で6名が表示されれば合格です。
STEP 3 受入基準をテストにする [8min]
受入基準の1行ごとに、JUnitのテストを書かせます。テストの名前には受入基準の文がそのまま入るので、どの基準を確かめたテストかが一目で分かります。
- STEP 2と同じチャットに、下の文面を、Issueの番号を直して送ります。
- コマンドの実行を許可し、テストの結果が出るのを待ちます。
- ターミナルの結果で、受入基準の文が付いたテストに成功の印が付いていることを確かめます。
/issue-test issues/ISSUE-10x.md
- 受入基準の3つそれぞれに、名前の対応するテストがある
- 失敗したテストが0件になっている
手が止まったら開く
ISSUE-103を選ぶと、Copilotが既存のテストの「先頭は佐藤 健太」を書き換えることがあります。並び順を変えるIssueでは期待どおりの変更なので、書き換えた理由が報告にあるかを確かめてください。
STEP 4 AIのレビューを読み、マージを判断する [8min]
Copilotに変更をレビューさせ、結果をファイルに残します。AIの所見は参考にとどめ、マージしてよいかは受講者が決めて、理由を1行で書きます。
- 同じチャットに、下の文面を、Issueの番号を直して送ります。
- reviews/にできたファイルを開き、「受入基準ごとの判定」と「気になる点」を読みます。
- 最後の「人の判断」の見出しの下に、「マージしてよい」「直してからマージ」「マージしない」のどれかと、理由を1行書いて保存します。
/review issues/ISSUE-10x.md
- 「人の判断」の欄に、判断と理由を自分で書いた
- AIの所見と自分の判断が違う場合、その理由を言える
ここまでが必須です
STEP 1〜4が終わると、この演習の必須はすべて済みます。STEP 4のあとは、講師がGitHub上でIssueからPRを作り、AIのレビューを受けるまでを実演します。STEP 5は発展で、時間が残った方と、研修のあとに続ける方が進めてください。
STEP 5 PRの説明文と2つ目のIssue 発展 [10min]
/pr-descriptionで、レビューの結果とテストの結果からPRの説明文を書かせます。続けて、選ばなかったIssueを1つ、STEP 1から通します。
/pr-description issues/ISSUE-10x.md
うまくいかないとき
/issue-implementを入力しても候補に出てきません
VS Codeで開いているフォルダが、skillsheetではない可能性があります。エクスプローラーの一番上の名前がSKILLSHEETになっているかを確かめ、違えばskillsheetフォルダを開き直します。
テストが失敗したまま、Copilotの報告が終わりました
同じチャットに「失敗したテストの原因を説明してから直してください」と送ります。原因の説明を先に求めると、テストを消して成功させるような直し方を避けられます。
早く終わった方へ
追加と考察
Issueの「やらないこと」の欄を空にして、同じIssueを新しいチャットで実装させてみてください。Copilotが足した機能のうち、頼んでいないものを数えると、「やらないこと」を書く理由が分かります。
発展課題
ご自身のチームで最近あった修正を1つ選び、.github/ISSUE_TEMPLATE/feature.mdの形でIssueを書いてください。受入基準を3行書けるかどうかで、Copilotに渡せる粒度かを判断できます。
Session05 Kiro式の仕様駆動開発
ねらい
Kiro式の仕様駆動開発では、要件、設計、タスクの3つの仕様書を先にCopilotに書かせ、人が確かめてから実装に進みます。Issue1件より大きい機能でも、タスクを1つずつ実装させるので、どこまで終わったかがtasks.mdのチェックで分かります。最後に仕様を1つ変え、3つの仕様書とコードがそろって変わるかを確かめる流れです。
できあがりの目安
- specs/matching/に、requirements.md、design.md、tasks.mdの3つがある
- tasks.mdのタスクにチェックが付き、/projects/1に候補の表が出る
- 仕様を変えたあと、候補の人数が変わった
使うファイルと作るファイル
| 区分 | ファイル | 使い方 |
|---|---|---|
| 使う | skillsheet/specs/matching/request.md | 営業担当からの機能の依頼文。追加する要件を候補から2つ選ぶ |
| 使う | skillsheet/.github/prompts/のspec-で始まる5本 | STEP 1から4で「/」に続けて呼び出す |
| 作る | skillsheet/specs/matching/requirements.md | 要件と、EARSの形で書いた受入基準 |
| 作る | skillsheet/specs/matching/design.md、tasks.md | 設計と、実装の手順のチェックリスト |
| 作る | skillsheet/src/main/java/com/example/skillsheet/project/の下 | 案件の一覧と候補の画面のクラス |
STEP 1 依頼文から要件を書かせる [12min]
営業担当の依頼文に、追加する要件を2つ足してから、requirements.mdを書かせます。受入基準は「〜のとき、システムは〜する」というEARSの形で書かれるので、1行ずつテストに置き換えられます。
specs/matching/request.mdを開き、「追加する要件」の候補AからIのうち2つを選んで、「- 」の行に書き写して保存します。- チャットで新しいチャットを始め、下の文面を送ります。
- できたrequirements.mdを開き、選んだ2つが要件に入っているかと、最後の「確認したいこと」を読みます。
- 「確認したいこと」のうち、決め方を変えたい項目があれば、requirements.mdを自分で直して保存します。
/spec-requirements specs/matching
- request.mdで選んだ2つの要件が、requirements.mdの要件に入っている
- 「確認したいこと」の項目を読み、直すかどうかを決めた
手が止まったら開く
候補のGとHは、この機能の範囲を広げる項目です。Iは確かめ方の無い項目です。迷ったら、AとEのように画面の表示で確かめられるものを選びます。
STEP 2 設計とタスクを書かせる [10min]
要件から設計を書かせ、続けて実装の手順をtasks.mdに分けさせます。タスクは、Copilotに1回頼んで終わる大きさの4〜6個になります。
- 同じチャットに
/spec-design specs/matchingを送ります。 - design.mdの「判定のルール」を開き、候補に入る条件が自分の理解と合っているかを確かめます。
- 続けて
/spec-tasks specs/matchingを送ります。 - tasks.mdを開き、各タスクの「終わったと判断する条件」を読みます。
/spec-design specs/matching /spec-tasks specs/matching
- tasks.mdに、チェックの無いタスクが4〜6個ある
- 各タスクに、終わったと判断する条件が書かれている
STEP 3 タスクを1つずつ実装させる [20min]
タスクの番号を指定して、1つずつ実装させます。Copilotはタスクの範囲だけを実装し、テストが成功したらtasks.mdにチェックを付けます。
- 下の文面を送り、タスク1を実装させます。
- 報告とtasks.mdのチェックを確かめたら、番号を2に変えて送ります。
- 同じように、最後のタスクまで1つずつ進めます。
- アプリを起動し、ブラウザでhttp://localhost:8080/projectsを開いて、案件名を押します。
/spec-run-task specs/matching 1
- tasks.mdのすべてのタスクにチェックが付いている
- 案件1の候補が、必要スキルのJavaとSpring BootとSQLをすべてレベル3以上で持つ人になっている
手が止まったら開く
時間内に最後のタスクまで進まないときは、終わったタスクまでで止めて構いません。講師が完成例のフォルダをお渡しするので、STEP 4はそのフォルダで進められます。
STEP 4 仕様を1つ変える [10min]
営業担当から「開始日に間に合わない人は候補から外してほしい」と追加の依頼が来た場面です。コードを直接直さずに、仕様書を先に直させ、足されたタスクを実装させます。
- 下の文面の1行目を送り、3つの仕様書を直させます。
- tasks.mdの末尾に、チェックの無いタスクが足されたことを確かめます。
- 足されたタスクの番号で
/spec-run-taskを送り、1つずつ実装させます。 - ブラウザで案件1の画面を開き直し、候補の人数が変わったことを確かめます。
/spec-update specs/matching 参画可能日が案件の開始日より後の人は、候補から外す。参画可能日が未登録の人は候補に残す
/spec-run-task specs/matching 6
- requirements.mdとdesign.mdに、「(変更11/17)」の付いた箇所がある
- 案件1の候補から、開始日より後に参画できる人が外れた
ここまでが必須です
STEP 1〜4が終わると、この演習の必須はすべて済みます。STEP 4のあとは、講師が3つのカスタムエージェントで仕様から実装とレビューまでをつなぐ流れを実演します。STEP 5は発展で、合計[15min]です。
STEP 5 役割を分けたエージェントでつなぐ 発展 [15min]
skillsheet/.github/agents/には、仕様を書くspec-planner、タスクを実装するtask-runner、レビューするreviewerの3つのエージェントがあります。エージェントを終えるたびに、次のエージェントへ渡すボタンが出ます。
specs/の下に新しいフォルダを作り、request.mdに「技術者の詳細画面に、その人が候補に入る案件の一覧を出す」と書いて保存します。- チャットのエージェントの選択でspec-plannerを選び、そのフォルダの名前を送ります。
- 3つの仕様書ができたら、返事の下に出るボタンでtask-runnerへ渡します。
- タスクが終わるたびに、ボタンでreviewerへ渡すか、次のタスクへ進むかを選びます。
うまくいかないとき
Copilotが設計の段階でコードまで書き始めました
停止のボタンで止め、変更をUndoで戻します。そのあと「コードは書き換えず、design.mdだけを書いてください」と送ります。
タスクの途中でテストが通らなくなりました
同じチャットに「設計と食い違っている点があれば、先にdesign.mdの直し方を提案してください」と送ります。spec-run-taskのプロンプトには、設計と食い違うときは実装を止めて提案するきまりが入っています。
早く終わった方へ
追加と考察
request.mdで選ばなかった候補Fの「必要スキルのうち1つだけ足りない人を、あと1つとして別の表に出す」を、/spec-updateで足してみてください。タスクがいくつ足されるかで、仕様の変更の大きさが見えます。
発展課題
ご自身のチームで次に作る機能を1つ選び、request.mdの形で依頼文を書いてください。Issue1件で渡すか、3つの仕様書から作るかを、タスクの数の見込みで決めてみてください。
よくある質問
前の演習が途中のままですが、次の演習に進めますか
進めます。Session04とSession05は、skillsheetの別の機能を扱うので、前の演習の結果を使いません。Session04の変更が残っていても、Session05の手順はそのまま通ります。
Copilotの返事が試走の画面と違います
Copilotの返事は、同じ依頼でも毎回少しずつ変わります。ガイドの画面は11月6日の試走の結果で、合っているかは各STEPの「ここまでできたら」の項目で判断してください。
コマンドの実行の確認が毎回出て、手間がかかります
研修では、毎回コマンドの中身を読んでから許可してください。Copilotが実行するコマンドを人が確かめることも、この研修で身に付けたいことの1つです。
演習の途中で、ファイルを元に戻したくなりました
直前の依頼で変わったファイルは、Undoで戻せます。演習の最初からやり直すときは、ZIPを別のフォルダに展開し直して、そちらを開きます。
