DAY 1 / 2

GitHub Copilot基礎と実装体験
IDホールディングス 新入社員向け 生成AI活用研修

2026年7月15日(水)
9:00 - 16:30(7時間)
60名
ビジョンセンター市ヶ谷
Day 1 タイムテーブル
09:00

オリエンテーション30分

研修ゴール共有、ツール紹介、2日間のスケジュール説明

09:30

生成AIリテラシーとガバナンス80分

ガバナンス基礎、理解度確認テスト、Copilot環境セットアップ

10:50

休憩10分

11:00

Copilot環境セットアップ(続き)60分

環境確認、インラインサジェスト、Copilot Chat基本操作

12:00

昼休憩60分

13:00

Javaコード生成ハンズオン90分

メソッド生成、DTO、CRUD処理、例外処理の自動生成

14:30

休憩10分

14:40

コードレビュー演習とペアワーク80分

生成コードのレビュー実践、修正依頼、複数パターン比較

16:00

Day 1 振り返り30分

学びの整理、質疑応答、Day 2の予告

Session 01
オリエンテーション

2日間で何を身につけるか。Javaスクラッチ研修で培った「自力でコードを書く力」に、AIによる効率化という武器を加える。配属後すぐ使えるスキルを持ち帰る研修です。

01 研修の位置づけ
4月 生成AI基礎
4-6月 Java研修
7/14 Dify研修
7/15-16 本研修
8月 配属

Javaで2ヶ月コードを書いた経験がある皆さんだからこそ、AIがどれだけ効率化してくれるかを体感できます。手書きの苦労を知っている人ほど、Copilotの価値がわかる。

02 2日間のゴール
目指すこと

Copilotの基本操作を一通り使える

インラインサジェスト、Copilot Chat、スラッシュコマンドを自在に操れる状態

目指すこと

Java実装タスクでCopilotを活用できる

メソッド作成、CRUD処理、例外処理をAIの力で高速に書ける

目指すこと

AIが生成したコードをレビューできる

セキュリティ、ロジック、命名規約の観点で問題を見つけて修正を指示できる

目指すこと

ガイドラインに沿った利用判断ができる

社内の生成AI利用要領を理解し、やってよいこと・いけないことを判断できる

03 使用ツール
VSCode
エディタ

Visual Studio Code

軽量で拡張性の高いコードエディタ。Copilot拡張と組み合わせてAI支援開発を行います。

Copilot
AI アシスタント

GitHub Copilot

コード補完、チャット、コード説明を提供するAIペアプログラマ。本研修のメインツール。

研修中の質問方法

わからないことがあれば、チャットに書き込んでください。サブ講師が随時対応します。セッション末の質疑応答でもまとめて回答します。

Session 02
生成AIリテラシーとガバナンス / 環境セットアップ

AIを武器にするには、まずルールを知る必要がある。ガバナンスを固めてから、Copilotの世界に飛び込みます。

この研修で最も伝えたいこと

AIが書いたコードの最終責任は、すべて人間にあります。

Copilotはコードを提案するだけです。そのコードを採用し、コミットし、デプロイする判断をしたのは人間。動いても動かなくても、セキュリティ事故が起きても、責任を取るのはAIではなくあなた自身です。この前提を、2日間を通じて忘れないでください。

01 AI時代の開発はどこへ向かうのか

1年以内に、定型的なコードのほとんどはAIが書くようになると言われています。皆さんが配属される頃には、「コードを書く」こと自体より「AIが書いたコードを管理し、品質を担保する」ことが開発者の中心業務になっていく可能性が高い。

AI支援型(今回の研修)AI駆動型(近い将来)
コードを書く主体人間が書き、AIが補助するAIが書き、人間が管理する
人間の役割コーディング + Copilotのサジェスト採否判断要件定義・レビュー・品質担保・アーキテクチャ設計
求められるスキルプログラミング力 + AI活用力設計力 + コードを読む力 + AIへの指示力
現場での状況多くのプロジェクトで導入中一部の先進プロジェクトで実践開始

今回の研修は「支援型」が中心です。ただし、皆さんが配属されて1年後には「駆動型」が主流になっている可能性が高い。どちらの局面でも、AIが出したコードを読んで判断できるエンジニアであることが前提になります。

だからこそ、今この研修が必要

AIが書く量が増えるほど、コード管理の重要性は増す。レビューできないエンジニアは、AIに仕事を奪われるのではなく、AIが生んだ問題の責任だけを負うことになります。「読めるエンジニア」であることが、AI時代の最低条件です。

02 生成AIの仕組み(コード生成編)

GitHub Copilotの裏側では、大規模言語モデル(LLM)が動いています。LLMは大量のコードとテキストを学習し、「次に来るトークン(文字や単語の断片)」を確率的に予測する仕組みです。

┌─────────────────┐ ┌────────────────┐ ┌─────────────────┐ │ あなたのコード │────▶│ GitHub Copilot │────▶│ コード提案 │ │ + コメント │ │ (LLM) │ │ (確率的予測) │ │ + ファイル文脈 │ │ │ │ │ └─────────────────┘ └────────────────┘ └─────────────────┘ ▲ 学習済みの膨大なコード知識
ここが落とし穴

LLMは「もっともらしいコード」を生成しますが、正しいコードとは限りません。自信満々に間違えることがあります。これをハルシネーション(幻覚)と呼びます。

03 セキュリティリスクと禁止事項
シャドウAI / シャドウITに注意

会社が許可していないAIツールを業務で使うことを「シャドウAI」と呼びます。個人のChatGPTアカウントに業務データを入力する、許可されていない拡張機能をインストールするといった行為は、情報漏洩やコンプライアンス違反につながります。会社が許可したツールだけを使ってください。困ったときは社内のガイドラインを確認するか、上長に相談してください。

絶対禁止

機密情報の入力

顧客データ、APIキー、パスワードをプロンプトに入力してはいけません。Copilotへの入力は外部サーバーに送信されます。

絶対禁止

生成コードの無検証デプロイ

AIが生成したコードをレビューなしで本番環境に配置することは禁止です。SQLインジェクションやハードコードされた認証情報が含まれる可能性があります。

要注意

著作権とライセンス

Copilotが提案するコードは、学習元のコードと類似する場合があります。OSSライセンスの確認は開発者の責任です。

要注意

ハルシネーション

存在しないAPIやメソッドを自信満々に提案することがあります。コンパイル・テストで必ず検証してください。

// NG例1: APIキーをプロンプトに含めている // 「このAPIキーを使ってHTTPクライアントを作って」 String apiKey = "sk-abc123..."; // 絶対ダメ // NG例2: 顧客データを入力 // 「田中太郎さん、03-1234-5678のデータを... // OK例: ダミーデータで依頼 // 「ユーザー名とメールアドレスのバリデーションメソッドを作って」
04 やっていいこと / いけないこと
場面OKNG
コード補完一般的なロジックの補完を受け入れる機密情報を含むコードの補完
Copilot Chatエラーの原因を聞く、リファクタリングを依頼顧客データを貼り付けて質問
テスト生成/tests でテストコードを生成生成テストを検証せずにパス扱い
ドキュメント/explain でコード説明を生成社内機密ドキュメントの要約を依頼
配属先上長に利用可否を確認してから使うお客様環境で無断でCopilotを有効化
05 理解度チェック
ガバナンス理解度テスト
Q1. Copilot Chatに顧客の個人情報を入力して、データ分析のコードを生成させた。これは問題ない?
  • 問題ない。業務効率化のために積極的に使うべき
  • 問題あり。個人情報をプロンプトに入力してはいけない
  • 社内ネットワーク内なら問題ない

Q2. Copilotが生成したJavaメソッドをテストせずにそのままコミットした。これは問題ない?
  • Copilotが生成したので信頼できる
  • 問題あり。AI生成コードは必ず検証が必要
  • コンパイルが通れば問題ない

Q3. 配属先のプロジェクトでCopilotを使いたい。正しい手順は?
  • 自分のPCにインストールしてすぐに使い始める
  • 同僚が使っていたので同じように使う
  • まず上長に利用可否を確認し、許可を得てから使う

Q4. Copilotが提案したコードに password = "admin123" というハードコードがあった。どうする?
  • Copilotが生成したのでそのまま使う
  • 削除して環境変数から読み込む方式に修正する
  • あとで直せばよいので一旦コミットする

Q5. ハルシネーションとは何ですか?
  • AIがセキュリティ攻撃を受けること
  • AIの処理速度が低下する現象
  • AIが存在しない情報をもっともらしく生成する現象
06 Copilot環境セットアップ

事前セットアップ(1時間)で基本的な環境構築は完了しているはずです。ここでは最終確認と動作テストを行います。

事前セットアップ済み
最終確認
Copilot認証
動作テスト
FizzBuzz生成
セットアップ確認

VSCodeの右下にCopilotアイコンが表示され、アイコンが回転していなければ正常に動作しています。アイコンに斜線が入っている場合は認証が必要です。

Tips: WSLや仮想コンテナによる安全な開発環境

Windows環境ではWSL(Windows Subsystem for Linux)を使うことで、ホストOSから隔離された環境で開発できます。CopilotやGitHub連携の認証情報をコンテナ内に閉じ込め、万が一のセキュリティリスクをホスト環境に波及させない運用が可能です。配属先でもこうした仮想環境での開発が推奨される場合があります。

A キーボードショートカット一覧
操作ショートカット説明
サジェスト受け入れTab提案されたコードを確定する
サジェスト拒否Esc提案を破棄する
次の候補Alt + ]別の提案パターンを見る
前の候補Alt + [前の提案パターンに戻る
Copilot Chat起動Ctrl + Shift + Iサイドパネルでチャットを開く
インラインチャットCtrl + Iコード内で直接指示を入力
B スラッシュコマンド
コマンド

/explain

選択したコードの説明を生成します。知らないコードの理解に便利。

コマンド

/fix

選択したコードの問題を検出し、修正案を提示します。

コマンド

/tests

選択したコードに対するテストコードを自動生成します。

コマンド

/doc

JavadocやJSDocなどのドキュメントコメントを自動生成します。

Session 02 参考リンク
Session 03
Javaコード生成ハンズオン -- AIで再挑戦

6月末から2週間かけて取り組んだ最終演習のテーマを、今度はCopilotの力で再構築します。手作業で苦労した同じ課題に、AIを使ってどこまで速く・高品質に仕上げられるか。体感の差がそのまま、AIを使う意味の証明になります。

このセッションの狙い

AIを活用した開発は選択肢ではなく、これからの標準になります。「AIを使っていかなければならない」という現実を、手を動かして理解する時間です。そして、ここで得た感覚を持って「自分で学んでいく」段階に入ってください。

演習テーマについて

本セッションの演習テーマは、Java最終演習と同じテーマを使用します。テーマの詳細は研修当日までに別途共有されます。以下のハンズオンでは、Copilotの基本的なコード生成テクニックを先に習得します。

01 メソッド実装の自動生成

Javadocやメソッド名を書くだけで、Copilotが中身を推測して提案してくれます。研修で書いた経験があるからこそ、「自分なら10分かかるコードが数秒で出てくる」驚きがわかるはず。

/** * 指定された文字列が有効なメールアドレスかどうかを検証する * @param email 検証対象のメールアドレス * @return 有効な場合true */ public boolean isValidEmail(String email) { // ここでTabキー → Copilotがバリデーションロジックを提案 }
Tips: コンテキストの力

Copilotは開いているファイルの内容をコンテキストとして使います。同じプロジェクト内の他のクラスやインポート文も参照するので、プロジェクト全体を開いた状態で使うと精度が上がります。

02 データクラス / DTO の生成

フィールドを定義するだけで、getter、setter、toString、equals、hashCodeを一括生成。LombokやRecordの提案も出てきます。

public class UserDto { private Long id; private String name; private String email; private LocalDateTime createdAt; // ここで改行するとCopilotがgetter/setterを提案 // 「コンストラクタを生成して」とChatに依頼もできる }
// Java 16+ ならRecordクラスで簡潔に書ける public record UserDto( Long id, String name, String email, LocalDateTime createdAt ) { // getter, equals, hashCode, toString は自動生成される }

CopilotにRecordへの変換を依頼することもできます。Copilot Chatで「このクラスをRecordに変換して」と指示してみてください。

03 CRUD処理の生成

DAOクラスやSpring Data JPAリポジトリのCRUD処理は、Copilotが得意とする領域です。パターンが決まっているため、高精度な提案が返ってきます。

// Copilot Chatに依頼: // 「UserDtoのCRUD操作を行うDAOクラスを作成して。 // JDBCを使用し、PostgreSQLに接続する前提で。」 public class UserDao { private final Connection connection; // Copilotが以下を自動生成: // - findById(Long id) // - findAll() // - insert(UserDto user) // - update(UserDto user) // - delete(Long id) }
セキュリティ注意

CopilotがSQLを文字列連結で生成する場合があります。必ずパラメータ化クエリ(PreparedStatement)になっているか確認してください。文字列連結はSQLインジェクションの温床です。

04 例外処理の追加
// Copilot Chatで指示: // 「このメソッドに適切な例外処理を追加して」 public UserDto findById(Long id) { try { PreparedStatement stmt = connection.prepareStatement( "SELECT * FROM users WHERE id = ?" ); stmt.setLong(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { return mapToUser(rs); } throw new UserNotFoundException("User not found: " + id); } catch (SQLException e) { throw new DataAccessException("Failed to find user", e); } }
73%
Copilot利用開発者のコーディング速度向上率
46%
新しいコードがCopilotによって書かれる割合
55%
タスク完了速度の向上率

数値をクリックすると表示されます 出典: GitHub Research 2022

Session 03 参考リンク
Session 04
コードレビュー演習とペアワーク

Copilotが生成したコードを鵜呑みにしない。レビューして判断する力が、AIと仕事をするエンジニアの必須スキルです。

01 レビューの3つの観点
観点 1

セキュリティ

  • SQLインジェクションの脆弱性がないか
  • ハードコードされた認証情報がないか
  • 入力値のバリデーションはあるか
  • 機密情報がログに出力されていないか
観点 2

ロジック

  • NullPointerExceptionの可能性はないか
  • 境界値(0、空文字、最大値)は考慮されているか
  • 無限ループの危険はないか
  • 戻り値は期待通りか
観点 3

命名と規約

  • 変数名、メソッド名はわかりやすいか
  • Java命名規約に沿っているか
  • マジックナンバーはないか
  • 不要なコメントが残っていないか
02 ペアレビュー演習

2人1組になり、Session 03で生成したコードを交換してレビューしてください。上記3つの観点でチェックし、問題を見つけたらCopilot Chatに修正を依頼します。

コード交換
3観点でレビュー
問題点を指摘
Chatで修正依頼
修正確認

以下のコードには複数の問題があります。見つけてCopilot Chatに修正を依頼してください。

public class UserService { public String getUserInfo(String userId) { // 問題1: SQLインジェクション String sql = "SELECT * FROM users WHERE id = '" + userId + "'"; ResultSet rs = stmt.executeQuery(sql); // 問題2: NullPointerException String name = rs.getString("name"); return name.toUpperCase(); } public void saveUser(String n, String e, String p) { // 問題3: 不明瞭な変数名 // 問題4: パスワードのハードコード的扱い System.out.println("Password: " + p); // DB保存処理... } }
問題1: SQLインジェクション

文字列連結でSQLを組み立てている。PreparedStatementに変更し、パラメータバインドを使用する。

問題2: NullPointerException

rs.next()のチェックがない。ResultSetが空の場合にnullが返り、toUpperCase()でNPEが発生する。

問題3: 不明瞭な変数名

n, e, p では何を表しているか不明。name, email, password と明示的に書くべき。

問題4: パスワードのログ出力

パスワードをSystem.out.printlnで出力している。機密情報をログに出してはいけない。

03 ハルシネーション体験ワーク

「AIが出したものはそのままだと信頼できない」。これを頭ではなく体で理解するワークです。配布されるコードにはAIが生成したハルシネーション(存在しないAPIの使用、誤ったロジック)が意図的に含まれています。

バグ入りコード配布
目視でバグを探す
Copilotでバグを探す
結果を比較

以下のコードにはAIが生成した「もっともらしいが間違っている」箇所が複数あります。まず5分間目視で探し、次にCopilot Chatに「このコードの問題点を指摘して」と依頼して比較してください。

import java.util.Collections; import java.util.List; import java.time.LocalDate; public class ReportGenerator { public List<String> generateMonthlyReport(List<Order> orders) { // ハルシネーション1: Collections.sortByField は存在しない Collections.sortByField(orders, "createdAt"); // ハルシネーション2: LocalDate.parseISO は存在しない LocalDate start = LocalDate.parseISO("2026-01-01"); // ハルシネーション3: String.isEmpty と null チェックの順序 for (Order order : orders) { if (order.getNote().isEmpty() || order.getNote() == null) { // nullの場合にisEmpty()でNPE発生 } } // ハルシネーション4: List.flatMap はStreamのメソッド return orders.flatMap(o -> o.getItems()); } }
1. Collections.sortByField は存在しない

正しくは Collections.sort(orders, Comparator.comparing(Order::getCreatedAt)) または orders.sort(...) です。AIがもっともらしいメソッド名を捏造した典型例。

2. LocalDate.parseISO は存在しない

正しくは LocalDate.parse("2026-01-01") です。ISO形式なら引数1つで十分。

3. nullチェックの順序が逆

order.getNote() がnullの場合、isEmpty()が先に呼ばれてNullPointerExceptionが発生します。null チェックを先に書く必要があります。

4. List.flatMap はListのメソッドではない

flatMapはStream APIのメソッド。正しくは orders.stream().flatMap(o -> o.getItems().stream()).collect(Collectors.toList()) です。

目視で見つけた数 vs Copilotが見つけた数を比較してみましょう

人間とAI、それぞれ得意な検出パターンがあります。どちらか一方では見落としが出る。両方を組み合わせることで品質が上がります。

04 修正依頼のコツ
依頼の仕方良い例悪い例
セキュリティ修正「このSQLをPreparedStatementに変更して」「直して」
リファクタリング「変数名をわかりやすく変更して」「きれいにして」
エラーハンドリング「nullチェックを追加して、nullの場合は空文字を返して」「エラー対策して」

プロンプトは具体的に。何をどう変えてほしいかを明示するほど、Copilotの出力精度は上がります。

AIが書いたコードに致命的なバグがあり、本番障害が発生した。責任は誰にある?

まずは皆さんで考えてみてください。どう思いますか?

結論: コードを書いた人間の責任

AIはあくまでツールです。最終的にコードをレビューし、コミットし、デプロイしたのは人間。AIの提案を採用した時点で、そのコードの責任はあなたにあります。

だからレビューが重要

AIが便利だからこそ、レビュー工程を省略してはいけない。「AIが書いたから大丈夫」は通用しません。むしろAIが書いたコードほど、注意深くレビューする習慣をつけてください。

Session 04 参考リンク
Wrap Up
Day 1 振り返り

Day 1のキーメッセージを確認して、明日に備えましょう。

Key Message 1

AIは便利だが、コードの最終責任は人間にある

Copilotはツール。コミットボタンを押すのはあなたです。

Key Message 2

ガイドラインを守った上で積極的に活用する

禁止事項を理解した上で、使える場面ではどんどん使う。怖がる必要はない。

Key Message 3

プロンプトの書き方で生成品質は大きく変わる

具体的な指示、適切なコンテキスト、明確なゴール。この3つが精度を左右します。

明日の予告: Day 2

テストコード生成(JUnit)、デバッグ支援、リファクタリング、そして総合演習。設計書から実装、テスト、レビューまでの一連の流れをCopilotと一緒に駆け抜けます。