手を動かす時間で画面の横に開いて使う進行ガイドです。今どのセッションで何をどの順番でやるかを示します。
研修の進め方と配布物を確認します。
ガバナンスの座学と確認テストです。詳細は座学編で扱います。
短い休憩をはさみます。
題材の確認と起動(SESSION 03)、開始前チェック(SESSION 04)を済ませ、補完・Chat・スラッシュコマンドを練習します。
午後はすべてハンズオンに使います。
演習1 DTO・演習2 Repository・演習3 Service CRUD です。
演習3と演習4の間の短い休憩です。
演習4 動くけれど危ないコードをレビューで見抜きます。
到達チェックと提出物の確認です。
Day1が終わったとき、次の状態になっていることを目指します。完璧に書けることより、Copilotの提案を読んで採否を判断できることを重視します。
手順そのものは配布フォルダの exercises 内の各 md に詳しく書いてあります。このガイドは今どのセッションで何をどの順番でやるかを示す地図です。画面の横に開いて進めてください。
演習に入る前に、ここだけは全員で揃えます。つまずきの大半はどのフォルダを開いているかで起きます。最初にこの章を読んでください。
配布された id-task-app-starter フォルダを、VSCode のファイル → フォルダーを開く(Open Folder)で開きます。フォルダの中の1ファイルだけを開くのではなく、フォルダごと開いてください。Copilot はフォルダ全体を見て提案するため、開く単位がずれると的外れな提案が増えます。
各演習で Copilot はどう書いてくると思うかを先に予想し、実際の結果と照らし合わせます。予想と気づきは memo.md に書きます。memo.md は配布フォルダに最初から入っていて、## 演習1 〜 ## 演習7 の見出しが用意してあります。該当の見出しの下に書き足してください。手を動かすだけでなく、予想と結果の差を残すことで理解が定着します。
演習で新規ファイルを作るときは、エクスプローラー(左側のファイル一覧)で対象フォルダを右クリック → 新しいファイル(New File)を選び、ファイル名を入力します。たとえば dto フォルダを右クリックして TaskDto.java と入力します。
Copilot Chat に出たコードは、コードブロック右上の Apply(適用)や Insert(挿入)で対象ファイルに反映します。インライン補完なら Tab、インラインチャットの提案なら Accept(採用)を押します。反映したら Ctrl+S(Mac は Cmd+S)で保存します。保存しないとコンパイルに反映されません。
Copilot への指示(プロンプト)は、サイドパネルの Copilot Chat 入力欄、またはコード上で起動するインラインチャットに直接打ち込みます。このガイドや exercises の md にある指示文を、Chat にそのまま貼り付けて構いません。
Copilot Chat に「今の変更を元に戻して」「さっきのコードに戻して」と頼めば戻せます。キーボードの Ctrl+Z(Mac は Cmd+Z)でも戻せます。失敗しても壊れません。気軽に試してください。
提案が変、補完が出ない、コンパイルが通らない。そのほとんどは開いているフォルダが違うことが原因です。VSCode 左上のフォルダ名が id-task-app-starter になっているか、まず確認してください。
本研修は一人で進める個人ワークです。詰まったら5分ほど自分で試してから、各部屋のサブ講師に声をかけてください。最初の5分の試行錯誤が一番伸びます。
演習で触る id-task-app は、タスクを登録・一覧表示する小さな Web アプリです。Java スクラッチ研修で触れた Spring Boot と同じ構成です。
アプリが扱うデータの形です。Entity の Task.java がこのテーブルに対応します。
| カラム | 型 | 説明 |
|---|---|---|
| id | BIGINT(自動採番) | タスクID |
| title | VARCHAR(120) NOT NULL | タイトル(必須) |
| description | TEXT | 説明 |
| status | VARCHAR(TODO / DOING / DONE) | ステータス |
| due_date | DATE | 期限 |
| created_at | TIMESTAMP | 作成日時 |
| updated_at | TIMESTAMP | 更新日時 |
VSCode のターミナル(Ctrl+` で開きます)で次を実行します。Windowsの方は ./mvnw のかわりに .\mvnw(ドット+バックスラッシュ)と入力してください(配布プロジェクトに Maven Wrapper を同梱しています)。
起動したら、ブラウザで http://localhost:8080/tasks を開きます。この時点では TaskService が未実装のため、タスク一覧は空のままで正常です。画面の枠と「新規タスクを追加」ボタンが表示されれば成功です。演習3で Service を実装すると、初期データが一覧に表示されるようになります。データベースは H2 インメモリが既定で、起動と同時にスキーマ作成と初期データ投入が走るため、追加のセットアップは要りません。
初回の起動では英語のログが数分流れます。Started TaskAppApplication が出るまで Ctrl+C で止めないでください。フォルダを開いた直後に画面右下へ出る 「Java: Building...」 の表示や、その間の赤い波線・補完の遅れも正常で、表示が消えれば解消します。壊れたと思って再起動を繰り返さないでください。
毎回 ./mvnw spring-boot:run し直す必要はありません。コードを書いたら ./mvnw compile でコンパイルが通るか確認し、画面で動きを見たいときだけ起動します。止めるときはターミナルで Ctrl+C です。
ハンズオンに入る前に、環境が整っているかを5項目で確認します。1つでも欠けると後の演習で詰まります。
ウィンドウ右下の Copilot アイコンをクリックし、使用状況(Usage)やクォータ(Quota)の表示から AI Credits の残量を確認します。2026年6月から従量制(AI Credits)に移行しているため、研修中も時々この残量を意識してください。インライン補完はクレジットを消費しませんが、チャットや高性能モデルの利用は消費します。
モデルピッカーは講師が指定したミドルクラスのモデル・低 effort 設定のまま使ってください。勝手に高性能モデルへ切り替えると、クレジットの消費が速くなります。迷ったら Auto のままで構いません。Agent モードなど重い使い方は Day2 終盤で紹介します。
このセッションで身につける3つの基本操作です。演習はすべてこの組み合わせで進みます。
コードを書いていると、続きが薄いグレーで提案されます。これがインライン補完です。Tab で確定、Esc で却下します。別の候補を見たいときは Alt+](Mac は Option+])で次の候補に切り替えます。
提案を読まずに Tab を押すのは事故のもとです。型・メソッド名・処理の流れが想定どおりか目で追ってから確定してください。違うと思ったら Esc で却下します。
サイドパネルの Copilot Chat に、日本語で指示や質問を打ち込めます。コードを選択した状態で質問すると、その範囲を踏まえて答えます。コード上で Ctrl+I(Mac は Cmd+I)を押すと、その場で対話するインラインチャットが開きます。
Chat 入力欄で / を打つと、よく使う指示の一覧が出ます。Java の演習では次の3つが中心です。
| コマンド | 用途 |
|---|---|
| /explain | 選択したコードが何をしているか説明させる |
| /fix | エラーや問題のあるコードを直させる |
| /tests | 選択したコードのテスト雛形を作らせる(Day2で詳しく扱う) |
どのファイルを見て答えてほしいかは #file、プロジェクト全体を踏まえてほしいときは #codebase で指定します。たとえば #file このファイルの未実装メソッドを教えてください、のように使います。
/tests や /explain の説明は英語で返ることがあります。日本語で説明してくださいと一言添えれば日本語になります。
任意の Java ファイルで、メソッドの中に 1から10までの整数を合計して返す というコメントを書いて改行します。
薄いグレーで for ループや IntStream を使った提案が出ます。Tab で採用したり Alt+] で別案を見たりして、提案の出方を確かめます。
確認できたら、書いたコードは消して構いません。次の演習に進みます。
午後のハンズオンです。各演習は考える → 書く → 実行 → 答え合わせの4段で進みます。考えるフェーズを飛ばさないでください。詳しい手順は exercises の各 md に、参考プロンプトは hints にあります。答え合わせのステップでは hints のファイルを開いて自分の結果と照らし合わせます。
Java 研修との接続:Web 層に渡すデータの入れ物(DTO)を作ります。DTO は Data Transfer Object の略で、Controller と Entity の間に挟むデータ専用クラスです。対象は src/main/java/jp/idhd/taskapp/dto/TaskDto.java(新規作成)、詳細手順は exercises/ex01-dto.md です。
tasks テーブルのどのフィールドを Web に出すかを選び、クラス名・種類・フィールドを memo.md の ## 演習01 見出しに書き出します。id・title・description・status・dueDate の5つが目安です。
dto フォルダを右クリックして TaskDto.java を作り、ねらいをコメントで書いて改行し、インライン補完で Record の定義を出させます。型が想定どおりか読んでから採用します。変換メソッドはインラインチャットで追加します。
ターミナルで ./mvnw compile を実行し、BUILD SUCCESS を確認します。
配布フォルダの hints/step01_dto_hint.md を開いて、参考プロンプトと比較観点を確認します。
補完は public record TaskDto(...) の形で出ることが多いですが、通常クラス+getter で出る場合もあります。研修環境では多くが Record で出ます。どちらで出たかを memo.md に残してください。
Java 研修との接続:JPA の findAll / findById は研修で触れています。今回はメソッド名を書くだけで問い合わせが自動生成される Spring Data JPA の命名規則を体験します。対象は src/main/java/jp/idhd/taskapp/repository/TaskRepository.java、詳細手順は exercises/ex02-repository.md です。
期限切れタスクを取得する、ステータスで絞るの2つを、どんなメソッド名にすれば命名規則に乗るかを memo.md に予想します。By+フィールド名+条件キーワードが基本です。
ファイルを開き、ねらいをコメントで書いて改行し、補完で findByDueDateBefore と findByStatus の2メソッドを出させます。戻り値が List<Task> になっているか確認します。
./mvnw compile を実行します。実装を書いていないのになぜ動くのか、Copilot Chat に日本語で説明を求めて理解します。
配布フォルダの hints/step02_repository_hint.md を開いて、参考プロンプトと仕組みの解説を確認します。
補完が @Query 付きの JPQL で出ることもあります。@Query 版でも動きますが、今回は命名規則だけで動くシンプルな形を採用してください。どちらで出たかを memo.md に残します。
Java 研修との接続:CRUD は Create / Read / Update / Delete の頭文字で、データの登録・取得・更新・削除を指します。空のメソッドを Copilot で1つずつ埋めます。対象は src/main/java/jp/idhd/taskapp/service/TaskService.java、詳細手順は exercises/ex03-service-crud.md です。
各メソッドで何の例外が起きうるかを memo.md に書き出します。存在しない ID を findById に渡したら TaskNotFoundException を投げる、という仕様を押さえます。
空の本体(return null; など)を消し、Javadoc コメントをヒントに補完やチャットで実装します。findById は orElseThrow を使う、create は status が null なら TODO に補正する、という方針です。
./mvnw compile を実行します。余裕があれば起動して http://localhost:8080/tasks で一覧を確認します。
配布フォルダの hints/step03_service_hint.md を開いて、参考プロンプトとよくある勘違いを確認します。
findById が Optional.get() を直呼びする危ない形で出ることがあります。研修環境ではこのパターンが時々出ます。出たら一度受け入れてから、チャットで orElseThrow 版に直す経験をしてください。
Java 研修との接続:これまでの3演習で書いてきたコードを、今度はレビューする側に回って見ます。生成されたコードを鵜呑みにしない習慣を作ります。対象は src/main/java/jp/idhd/taskapp/_review/UserSearchExample.java(新規作成)、詳細手順は exercises/ex04-review.md です。
動くと安全は別だと意識します。セキュリティ・例外処理・リソース管理の3観点を memo.md に書き出しておきます。
エクスプローラーで src/main/java/jp/idhd/taskapp を右クリックし「新しいフォルダー」で _review フォルダを作り、その中に UserSearchExample.java を新規作成します。あえて危ない指示で生成させます。文字列連結で SQL を組み立てる動くけれど危ないコードを引き出して採用します。
生成されたコードの問題点を自分で3つ以上書き出し、その後 Copilot Chat にレビューを依頼して照合します。インラインチャットでプリペアドステートメント+try-with-resourcesの安全な形に書き換えます(言葉の意味は末尾の用語集を参照)。
配布フォルダの hints/step04_review_hint.md を開いて、参考プロンプトとレビュー観点を確認します。
Copilot が最初から安全なコードを出して悪い例が引き出せないこともあります。その場合はコメントを文字列連結で SQL を組み立てるのように具体的にすると危ない例が出やすくなります。出なければサブ講師に声をかけてください。
Day1の終わりに、自分で次の項目を確認します。すべて埋まっていなくても構いませんが、どこまで進んだかを memo.md に残してください。
提出は memo.md と、各演習で編集した Java ファイルです。提出方法は研修当日に案内します。コンパイルが通らないまま終わっても、どこで詰まったかを memo.md に書いておけば十分です。
演習中に出やすい疑問をまとめました。
必ず読んでから採否を決めてください。型・メソッド名・処理の流れが想定どおりかを確認します。読まずに Tab を押すのは事故のもとです。
インライン補完では Alt+](Mac は Option+])で次の候補に切り替わります。チャットでは別の書き方も出してくださいと頼みます。
日本語で説明してくださいと一言添えれば日本語になります。/explain や /tests の出力は英語になりがちです。
研修中は講師指定のミドルクラス・低 effort 設定のまま使ってください。勝手に切り替えるとクレジットの消費が速くなります。
右下の Copilot アイコンをクリックし、使用状況(Usage)から確認します。補完は消費しませんが、チャットは消費します。
各演習の md 末尾にあるチャレンジや、exercises/challenges の追加問題に進んでください。
配布フォルダの hints に、各ステップの参考プロンプトと比較観点があります。考えてから開いてください。
よくあるトラブルと対処です。多くは開いているフォルダが違う、import が足りない、保存していないのいずれかです。
ターミナルで ./mvnw -version を実行し、JDK 17 以上が認識されているか確認します(Windowsの方は .\mvnw -version)。java -version で 17 以上が出ない場合は、VSCode 右下から JDK の設定を確認します。フォルダを開く単位がプロジェクト直下(pom.xml がある階層)になっているかも確認してください。
下部ステータスバーの Copilot アイコンの状態を確認します。サインインが切れている場合は GitHubアカウントでサインインし直します。ネットワークが社内プロキシ経由の場合は、研修当日に案内する設定を確認してください。
右下の言語モードが Java になっているか確認します(Plain Text のままだと補完が出ません)。違うコードが入ったときは別の拡張機能の補完が割り込んだ可能性があるので、Ctrl+Z(Mac は Cmd+Z)で戻します。
日本語で説明してください、日本語のコメントで書いてくださいとプロンプトに添えます。インライン補完のコメントは、日本語で書くと日本語のコメントが返りやすくなります。
既定は H2 インメモリで、追加設定なしで動きます。MySQL を使う場合は ./mvnw spring-boot:run -Dspring-boot.run.profiles=mysql で起動し、事前に taskdb データベースの作成と接続情報の修正が必要です。研修では H2 のままで構いません。
ポート 8080 が使用中と出るときは、すでにアプリが起動している可能性があります。前のターミナルで Ctrl+C を押して止めてから起動し直します。シンボルが見つかりませんと言われるときは import 文が足りない可能性が高いので、Copilot Chat にこの Java ファイルに足りない import 文を追加してくださいと依頼します。コードを反映したあとに Ctrl+S で保存したかも確認してください。
演習で出てくる言葉を1行で押さえる早見表です。意味が思い出せなくなったら、ここに戻ってきてください。各カードの説明の冒頭に、その語が登場する演習(例: Day2 演習6)を記しています。
Day2 演習6・演習7。上が最後に起きた例外、Caused by の下が本当の原因です。
Day2 演習7。list.html の th:each(行を繰り返す)・th:classappend(条件でクラスを足す)・${...}(値の差し込み)で出てきます。
Day1 トラブルシューティング。Copilot が反応しないときに確認します。
Day1 演習3。findById で orElseThrow を使う判断につながります。
Day2 演習5。@Mock(偽物を作る)・@InjectMocks(偽物を組み込んだ検証対象を作る)で出てきます。
Day1 演習1のバリデーション、Day2 の @Test など各所で出てきます。
Day1 演習2。命名規則で自動生成する書き方との違いとして出てきます。
Day1 演習4・Day2 演習6。リソースリークを直すときに使います。
Day1 演習1・演習3。DTO との違いを意識する場面で出てきます。
題材プロジェクトの TaskStatus。状態を扱う演習で出てきます。
Day1 演習1。TaskDto を Record で作ります。
全演習。補完の提案が想定どおりか読むときの確認ポイントです。
Day1 演習4・Day2 演習6。危ないコードを安全な形に直すときに使います。