カテゴリー: 未分類

  • 【決定版】エンジニア研修が劇的に変わる!合意形成ワーク「これ正解」の極意とファシリテーション実況中継

    【決定版】エンジニア研修が劇的に変わる!合意形成ワーク「これ正解」の極意とファシリテーション実況中継

    「新入社員研修、知識を詰め込むだけで終わっていませんか?」

    ITの現場で今、最も求められているのは「正解のない問い」に対してチームで納得解を導き出す力です。今回は、バラエティ番組の面白さとエンジニアの論理思考を融合させた最強のアクティビティ「これ正解」の全貌を、具体的なファシリテーション事例と共に公開します。

    この記事を読めば、「なぜこのワークがエンジニアに必要なのか」、そして「どうやって現場で意見をまとめ上げるのか」が具体的にイメージできるようになります。結論から言えば、合意形成の鍵は「構造化」にあります!


    1. 「これ正解」の背景:なぜエンジニアに「合意」が必要か

    元ネタは、人気バラエティ番組での「芸人による面白アウトプット」や、QuizKnockの「知的な定義付け」です。これを研修に導入する目的は、単なる盛り上がりではありません。

    実務における「仕様決定」や「優先順位付け」のシミュレーションなのです。学生時代のような「答えが一つ」の世界から、「複数の正解候補からチームで一つを選ぶ」プロの世界への橋渡し。それがこのワークの真の狙いです。


    2. 実況!ファシリテーション事例:新入社員の心得20箇条

    実際の研修現場で、どのように「合意」が作られるのか、そのプロセスを追いかけてみましょう。

    事例テーマ:『あ』から始まる、プロのエンジニアの心得

    【ステップ1:口火を切るファーストペンギン】
    講師:「我こそは正解だ!という人、手を挙げて!」
    新人A君:「正解は『挨拶を忘れない』です!現場での信頼関係の基本だからです!」
    (※最初に飛び込む勇気を称賛し、彼を「ファーストペンギン」と呼びます)

    【ステップ2:群れを作る類似ペンギン】
    講師:「A君と同じく『基本礼儀』派の人は?あ、3人いますね。近い内容で『明るく振る舞う』という意見のBさんもここに入りましょう。」

    【ステップ3:対抗軸、反ファーストペンギン】
    講師:「全く違う角度の人は?……お、C君。『アウトプット第一』。プロは結果が全てだ、と。強いですね!」

    【ステップ4:意見のすり合わせと合意】
    講師:「『礼儀(人としての在り方)』vs『成果(技術者としての価値)』。これ、実は対立ではなく、両輪で向上する二重螺旋構造ではないかな?チーム全員が納得できる言葉に統合してみよう。」


    3. 概念構造で整理する「エンジニア的合意」のコツ

    意見が割れたとき、多数決で決めるのは三流です。一流のファシリテーターは、ITエンジニアにおなじみの概念を使って構造化します。

    ● is-a(継承)による抽象化
    「挨拶」も「成果」も、プロとしての『当たり前の基準』というスーパークラスを継承している、と定義します。個別の行動ではなく「基準の高さ」を正解にするアプローチです。

    ● has-a(包含)による整理
    「成果を出す」というメイン機能の中に、部品(プラグイン)として「誠実さ」や「技術」が備わっている(has-a)と解釈します。


    4. 成功のためのチェックリスト

    研修で「これ正解」を導入する際に、講師が守るべき3つのポイントです。

    項目 ポイント
    グランドルール 「否定禁止」と「全員納得」を徹底する。心理的安全性が議論を深めます。
    タイムマネジメント あえて15分程度の制限を設け、実務のスピード感を意識させます。
    講師のスタンス 講師の「正解」を押し付けない。導き出されたプロセスそのものを称賛する。

    5. まとめ:自律したプロフェッショナルへ

    「これ正解」を通じて得られるのは、知識ではなく「自分たちで納得解を作った」という成功体験です。

    配属後の現場で、意見が食い違ったときに「どうすれば合意を得られるか」を創意工夫できるエンジニア。そんな自律したプロフェッショナルの第一歩を、このワークで踏み出させてあげましょう!

    © 2026 Build CareerUp Project – エンジニアの未来をこさえるブログ
  • 新人エンジニア15人が1つのシステムを作り上げる!JSP+Java実務スタックで学ぶ「機能別チーム開発」プロジェクト型演習の全設計

    新人エンジニア15人が1つのシステムを作り上げる!JSP+Java実務スタックで学ぶ「機能別チーム開発」プロジェクト型演習の全設計

    「研修でJavaは書けるようになったのに、現場に入ったらチーム開発で全然動けない…」

    これは多くの新人エンジニアが感じるギャップです。個人演習と実務の間には、「チームで仕様を合わせる力」「役割を分担して動く力」「設計書を書く力」という大きな壁があります。

    この記事では、その壁を乗り越えるために設計された「プロジェクト型演習(プロ演)」の全体像を紹介します。JSP+Java+MySQLという実務スタックを使い、15名が5チームに分かれ、1つのWebシステムを機能単位で協力して作り上げる——3ヶ月間の本格的な研修モデルです。

    この記事でわかること:

    • 機能別チーム分けとMVP開発の設計思想
    • JSP直呼び+Servletの「モダン感覚に近いアーキテクチャ」の全体像
    • チーム間を繋ぐ「お約束(共通ルール)」の定め方
    • 3ヶ月スケジュールの組み立て方と注意点
    • AIを実装以外で積極活用する具体的な方法

    研修設計者・エンジニア講師・人事担当者の方にすぐ使えるヒントが詰まっています。ぜひ最後まどうぞ!


    目次

    1. 設計のコンセプト:なぜ「機能別チーム×MVP開発」なのか
    2. 全体構成:5チーム・3人・1システム
    3. 技術スタックと開発環境(確定版)
    4. アーキテクチャ:JSP直呼び+Servletの役割分担
    5. チーム間を繋ぐ「お約束(共通ルール)」
    6. チームに任せる部分
    7. ディレクトリ・パッケージ構成
    8. 3ヶ月スケジュール
    9. AI活用:実装以外で鍛える力
    10. 注意点と落とし穴
    11. まとめ

    1. 設計のコンセプト:なぜ「機能別チーム×MVP開発」なのか

    このプロ演の設計には、3つの核となる考え方があります。

    ① 機能単位でチームを分ける
    「MVCのレイヤーでチームを分ける」方法(ViewチームとControllerチームを分ける等)は、初学者には責務の境界がわかりにくく混乱を招きがちです。代わりに「タスク機能チーム」「コメント機能チーム」のように機能単位で分けることで、チームが「自分たちの機能」を一気通貫で担当できます。

    ② MVP(Minimum Viable Product)に絞る
    システム全体を作ろうとすると、3ヶ月では完成しないリスクがあります。「優先すべき5機能だけを作る」と決めることで、全チームが完成体験を確実に得られます。何を作るかは受講生自身が決めることで、当事者意識と主体性も育ちます。

    ③ 学習ステップに合った技術選択
    Spring Bootなどのモダンフレームワークは便利ですが、魔法が多すぎて「なぜ動くのかわからない」状態になりやすいです。JSP+Servlet+素のJavaという構成は記述量は増えますが、リクエストの流れ・データの受け渡し・DB操作の仕組みがすべて「見える」ため、初学者の理解に最も向いています。


    2. 全体構成:5チーム・3人・1システム

    項目 内容
    参加人数15名(5チーム × 3名)
    開発対象受講生が企画した1つのWebシステム
    開発範囲MVP:優先機能5つのみ
    チーム分け機能単位(例:タスク・コメント・検索・通知・プロフィール)
    講師担当ログイン/ログアウト・アカウント管理・共通部品
    システムテーマ受講生が4月の企画フェーズで決定(テーマ:「みんなの役に立つWebシステム」

    3人チームの中での役割分担はチームに委ねます。ただし全員が全体を把握できるよう、相互レビューや週次の進捗共有を習慣づけることが重要です。


    3. 技術スタックと開発環境(確定版)

    区分 技術 バージョン
    運用環境OSUbuntu(Linux)
    Java / TomcatJava 17 / Tomcat 10
    DBMySQL 8.0.43
    開発環境OSWindows 11
    IDEEclipse(Pleiades 2025)
    Java / ビルドJava 17 / Maven 3.9.7
    DB(ローカル)MySQL 8.0.43(WSL2上)

    4. アーキテクチャ:JSP直呼び+Servletの役割分担

    このプロ演のアーキテクチャの特徴は「URLがそのままJSPファイルに対応する」点です。モダンなWebフレームワークのルーティング感覚に近く、初学者でも「どのファイルがどの画面か」が直感的に把握できます。

    GET・POST どちらもブラウザはJSPを直接呼び出します。JSPはブラウザからリクエストを受け取ると、内部で HttpClient を使ってServletにリクエストを投げ、Servletが返すJSONを受け取って画面を組み立てます。

    操作 ブラウザの入口 JSP内部の動き Servletの役割
    画面表示(GET) /tasks/list.jsp HttpClientでServletにGETリクエスト → JSON取得 → スクリプレットで描画 データ取得してJSONを返す
    データ登録・更新(POST) /tasks/form.jsp HttpClientでServletにPOSTリクエスト → 結果JSONを受け取り → 画面遷移 バリデーション+DB更新してJSONを返す

    処理の全体フローはこちらです。

    【GETの場合:画面表示】
    ブラウザ → GET /tasks/list.jsp
      └─ JSP内でHttpClient → GET /api/tasks(Servlet)
                                   └─ TaskService → TaskDao → MySQL
                                        └─ JSON レスポンス
      └─ JSP:JSONをパースしてスクリプレットで描画
    
    【POSTの場合:データ登録・更新】
    ブラウザ → POST /tasks/form.jsp(フォーム送信)
      └─ JSP内でHttpClient → POST /api/tasks(Servlet)
                                   └─ TaskService → TaskDao → MySQL
                                        └─ JSON レスポンス(成功/エラー)
      └─ JSP:結果を受け取り → 完了画面 or エラーメッセージ表示
    

    JSPは「画面の入口+HttpClientによるServlet呼び出し+スクリプレットによる描画」を担い、ビジネスロジックはServlet → Service → DAOに徹底的に委譲します。
    ⚠️ なお、EL式(${})は使用しません。データの描画はスクリプレット(<% %>)とJSONパース結果で行います。


    5. チーム間を繋ぐ「お約束(共通ルール)」

    5チームが独立して動くためには、チームをまたいで守るべき「お約束」を講師が事前に定義・提供することが必須です。お約束が曖昧だと、結合フェーズで大量の不整合が発生します。

    このプロ演で定める「お約束」は以下の5つです。

    ① DB接続は必ず DBUtil 経由

    // ✅ 正しい接続方法(これだけ守ればOK)
    Connection con = DBUtil.getConnection();
    

    ② 全JSPの先頭に認証チェックを必ず入れる

    <%-- 全JSPの先頭に必ず記述 --%>
    <%@ include file="/common/auth_check.jsp" %>
    

    ③ GET・POST ともにJSP直呼び。データ取得・更新はHttpClientでServletを呼ぶ
    ブラウザはHTTPメソッドにかかわらず常にJSPを呼び出します。JSP内でServletへのリクエストを行い、返却されたJSONを処理します。直接Servletにフォーム送信するパターンは使いません。

    ④ パッケージ・ディレクトリの命名規則を守る

    Java     : com.example.{機能名}.{ClassName}
    JSP      : /{機能名}/{画面名}.jsp
    Servlet  : /api/{機能名}  (例:/api/tasks)
    

    ⑤ 共通POJOは勝手に変更しない
    model/Task.javamodel/User.java など全チームが使う共通クラスは講師が管理します。変更が必要な場合は全体ミーティングで合意を取ります。

    講師はこれらを「配布物セット」としてまとめて提供します。

    配布物内容
    DBUtil.javaDB接続共通クラス
    AuthUtil.java認証ヘルパークラス
    auth_check.jsp認証チェック共通部品
    header.jsp / footer.jsp共通レイアウト部品
    model/User.java共通POJO雛形
    コーディング規約.mdお約束のまとめドキュメント
    ログイン機能(動くサンプル)JSP/Servlet/Service/DAOが揃った見本コード

    中でも「動くログイン機能のサンプルコード」が最も強力な教材です。GET/POSTの使い分け・Serviceへの委譲・JSPへのデータ受け渡し・DBアクセスまで、すべての「お約束」が一通り含まれています。チームはこれを参考にしながら自分たちの機能を実装できます。


    6. チームに任せる部分

    お約束以外はチームに委ねます。自由度を与えることで、チームごとに工夫が生まれ、発表時の比較や振り返りが豊かになります。

    項目自由度
    JSPのスクリプレット(<% %>)の使い方✅ 自由
    CSS・デザイン・レイアウト✅ 自由(モバイルファーストのみ守る)
    Serviceクラスのメソッド設計✅ 自由
    DAOの実装方法✅ 自由
    エラー時の画面表示✅ 自由
    AIの活用場面・活用方法✅ 自由
    チーム内の役割分担✅ 自由

    7. ディレクトリ・パッケージ構成

    【Javaソース:機能別パッケージ】
    com.example
    ├── model/               ← 全チーム共通(講師管理)
    │     ├── Task.java
    │     └── User.java
    │
    ├── common/              ← 共通部品(講師担当)
    │     ├── DBUtil.java
    │     └── AuthUtil.java
    │
    ├── auth/                ← 講師担当(ログイン/ログアウト/アカウント管理)
    │     ├── LoginServlet.java
    │     ├── LogoutServlet.java
    │     └── AccountServlet.java
    │
    ├── task/                ← チームA担当(タスク機能)
    │     ├── TaskService.java
    │     └── TaskDao.java
    │
    ├── comment/             ← チームB担当(コメント機能)
    │     ├── CommentService.java
    │     └── CommentDao.java
    │
    └── (以降、機能ごとにパッケージを追加)
    
    【WebContent:JSP・共通部品】
    WebContent/
    ├── common/
    │     ├── auth_check.jsp
    │     ├── header.jsp
    │     └── footer.jsp
    │
    ├── auth/                ← 講師担当JSP
    │     └── login.jsp
    │
    ├── tasks/               ← チームA担当JSP
    │     ├── list.jsp
    │     ├── detail.jsp
    │     └── form.jsp
    │
    ├── comments/            ← チームB担当JSP
    │     └── list.jsp
    │
    └── WEB-INF/
          └── web.xml
    

    8. 3ヶ月スケジュール

    フェーズ 全体ミーティング 主なアウトプット
    4月 企画立案 / 要件定義 ◎ 月末に実施 システムテーマ決定・機能一覧・ユーザーストーリー・チーム編成
    5月 基本設計 / MVP設計 ◎ 月末に実施 ER図・画面遷移図・共通POJO定義・お約束ドキュメント合意
    6月 詳細設計 / 実装 / テスト 週次で進捗共有 各チームの機能完成・結合テスト・成果発表

    5月末が最重要マイルストーンです。model/ 配下のPOJO定義・DBのテーブル設計・お約束ドキュメントの3点を全チーム合意で確定させることが、6月の結合品質を左右します。ここがズレると6月に全チームへ影響が波及します。


    9. AI活用:実装以外で鍛える力

    このプロ演では「実装以外でAIを積極的に活用する」をルールとして設けています。AIにコードを全部書かせるのではなく、エンジニアとしての思考・設計・ドキュメント力をAIで底上げするという使い方です。

    フェーズAI活用の具体例
    企画立案システムアイデアのブレスト・ペルソナ作成・ユーザーストーリー生成
    要件定義機能一覧の整理・想定QAの洗い出し・ユースケース整理
    基本設計ER図の叩き台・画面遷移の整理・テーブル定義書ドラフト
    詳細設計テストケース生成・コードレビュー補助・エラーメッセージ解読
    試験バグ原因の仮説出し・修正案リストアップ・テスト観点の網羅チェック

    特にドキュメント作成へのAI活用は効果が大きいです。「AIが生成したドキュメントをチームでレビューして修正する」という流れは、仕様の認識齟齬を減らしながら、議論の質も高めます。

    ⚠️ 注意:AIが生成したコードを「理解せずに貼る」クセがつくと成長が止まります。AIを使ったら必ず「なぜそう書くのか」をチーム内で説明させる習慣を作りましょう。


    10. 注意点と落とし穴

    設計・運営上で特に気をつけたいポイントを整理します。

    🔴 WSL2上のMySQL接続設定
    Windows側のEclipseからWSL2上のMySQLに接続する際、ホスト名・ポート・ユーザー設定でつまずきやすいです。環境構築手順書をAIで生成して事前に配布すると初動がスムーズになります。

    🔴 5月末のPOJO・テーブル定義変更は全体に影響
    Task.java のフィールド追加など、共通POJOへの変更は全チームのコードに影響します。5月末以降は変更凍結ルールを設け、変更が必要な場合は必ず全体ミーティングで合意を取る運用にしましょう。

    🔴 チーム間の進捗差が開きすぎる
    週次で全体の進捗を共有する場を設けましょう。詰まっているチームへの早期サポートが、演習全体のリズムを守ります。

    🔴 JSPのスクリプレット乱用
    JSP内に大量のJavaコードが書かれると、Viewとロジックが混在して可読性・保守性が下がります。「Service呼び出しの1〜2行のみ許容、それ以外はServiceに移す」という指針を示すと、チームが設計を考えるきっかけになります。

    🟡 モバイルファーストは最初から意識させる
    「後からレスポンシブ対応」は工数が膨らみます。BootstrapやFlexboxを使ったモバイルファーストのHTML設計を最初から習慣づけましょう。


    11. まとめ

    このプロジェクト型演習の設計を一言で表すと、「現場感覚を持ちながら、初学者が完走できる規模に絞ったチーム開発体験」です。

    要点を整理します。

    • 機能別チーム分けでMVP開発:チームが「自分たちの機能」を一気通貫で担当し、完成体験を確実に得られる
    • JSP直呼び+HttpClient+Servlet(JSON):GET・POST ともにJSPが入口。JSPからHttpClientでServletを呼びJSONを受け取る構成で、URLと画面が1対1に対応し初学者が混乱しにくい
    • お約束(共通ルール)でチームを繋ぐ:DBUtil・認証チェック・命名規則・共通POJOの4点セットを講師が提供し、チーム間の不整合を防ぐ
    • お約束以外はチームに任せる:自由度を与えることで主体性と工夫が生まれる
    • 5月末が最重要マイルストーン:POJO・テーブル定義・お約束の3点を全体合意で確定させることが6月の品質を左右する
    • AIは実装以外に積極活用:設計・ドキュメント・テスト観点にAIを使い、エンジニアとしての思考力を鍛える

    新人研修でチーム開発を取り入れるとき、技術的なハードルと運営上の落とし穴の両方を意識した設計が成否を分けます。この記事が、あなたの研修設計の参考になれば嬉しいです。ぜひ試してみてください!