こんにちは、フロントエンドエンジニアの鬼頭です。
私が参加しているPJに新人エンジニアがジョインしました。PJと並行しながらですが、初めてエンジニア教育を行う機会があったので、そこでの学びを書いていきたいと思います。
これから、新人エンジニアの教育をする人が少しでも参考になれば幸いです。
目次
使用技術(主要の一部)
参考程度に、PJで使用している主な技術を記載します。
- React
- TypeScript
- TailwindCSS
- HeadlessUI
- swr
- react-hook-form
- jest
教育期間・ゴール
教育の期間は、当初3週間ぐらいを想定しておりましたが、結果的に約2ヶ月かかりました。最初に決めたゴールは、3週間で既存CRUD画面の流用実装できることをゴールに進めてました。
既存CRUD画面の流用実装とは、具体的に以下ができるようになることです。
- TailwindCSSやHeadlessUIを使用してコンポーネントの作成
- swrを使用したデータフェッチ
- react-hook-formを使用したフォームの作成
- jestを使用した単体テスト、スナップショットテストの実施
AIの使用について
研修のルールとして特に制限を設けず、AIをなるべく使って欲しいことをお伝えしました。理由としてはチームとしてAIを活用して効率的に開発を進めたく、ChatGPTやGitHub Copilotの使い方に慣れて欲しいからです。
研修内容
研修の進め方は大きく以下の2点です。
- 事前にチームで作成した研修課題を進める
- 毎日、夕礼で進捗確認・質問タイムを実施する
1. 事前にチームで作成した研修課題を進める
課題については参考程度ですが、以下のような内容を6つほど作成し進めてもらいました。工夫した点としては発展実装を用意し、今回の発展実装が次回の要件となるようにして、ゴールまでに必要な要素を満たせれるようにしました。
2種類のボタンを作成してください。
▼要件
・作成するコンポーネントは1つとする
・`children`を受け取りテキストを設定可能な状態にすること
・デザインの`hover`、`disabled`、`focus`の状態まで作成できていること
・ボタンをクリックしたらコンソールに`Test`と文字列が出力されること
▼発展実装
・作成したコンポーネントのスナップショットテストを実施
・ボタンをクリックしたらカウントが可能な機能の実装
・+1ボタンでカウントが1増える
・-1ボタンでカウントが1減る
2. 毎日、夕礼で進捗確認・質問タイムを実施する
夕礼については、毎日1時間進捗確認と質問があれば解消する場を設けました。成果物がないとFBできないので、必ず実装内容をpushしてもらうこともルールにして進めました。
よかった点
今回進めるの当たってよかった点は3つあります。
- 研修資料を事前に作成しチームで方針を決めていたこと
- 30分ルールを設けたこと
- 成果物に対して、分かったこと・分からないことを毎回記入してもらったこと
1. 研修資料を事前に作成しチームで方針を決めていたこと
1つ目はチーム内で研修のゴールを決めた上で資料を作成したことです。
これにより開発に必要な要素を一通り学んで貰うことができ、研修終了後は、小さな改修タスクからですが、スムーズに進めてもらうことができました。
また、チームとしての教育方針を見失わずに、全員でフォローしながら最後まで進めることができたのがよかったです。
2. 30分ルールを設けたこと
30分ルールとは、30分詰まったらslackにて質問を投げるようにするルールのことです。
1番の目的は手が止まってしまわないようにすることですが、質問することに慣れて欲しいとの思いもありこのルールで進めました。
これにより手が止まることが少なく、気軽に質問してくれるようになったので実施してよかったです。
3. 成果物に対して、分かったこと・分からないことを毎回記入してもらったこと
こちらについては、夕礼実施時やプルリクエストを出す際に以下のフォーマットを書いてもらいました。
▼できたこと
▼できなかったところ
▼分からないところ/質問など
・質問
・その問題に直面した場面
・調べたことや仮説
理由としては、何が分からないのかを伝えてもらわないとFBが難しいこと、分からないことに対してのアプローチ方法を身につけて欲しいからです。
記入してもらった内容をもとに、更に質問などのやり取りを繰り返すことでどこまで分かってないのかを見極めながら進めることができました。
反省点
逆に反省点も3点あります。
- そもそも3週間では無理だったこと
- 毎日の夕礼が逆効果になった場合があったこと
- 研修のゴールや目的がそもそも伝わってなかったこと
1. そもそも3週間では無理だったこと
もともと3週間で、既存のCRUD実装できるまでにしようと計画してたのですが、そもそも現実的ではないスケジュール感でした。
今後、実装が佳境に入るという予測が立っていたので、即戦力にしたいとチーム全体で意気込んでしまいました。
今回で最低でも約2ヶ月はかかることが分かったので、これを基準にした教育スケジュールを立てていきたいと思います。
2. 毎日の夕礼が逆効果になった場合があったこと
研修内容でも書きましたが、毎日夕礼を1時間行っていました。
ただ毎日決まった時間に夕礼を行うことで、その時間に確認する癖がついてしまい効率的ではなくなってしまいました。30分ルールがあったものの夕礼があると溜め込みがちでした。
なので夕礼は途中で廃止して、質問はあればすぐ連絡して解消する方式に変更しました。
その結果、新人が質問を溜め込むことがなくなったので、決められた時間を用意することが必ずしも良いことではないと学びになりました。
3. 研修のゴールや目的がそもそも伝わってなかったこと
研修課題を渡して進めてもらっていたのですが、そもそも研修が終わった段階でどうなって欲しいのか・研修を行う目的がうまく伝わっていませんでした。
具体的には課題を期限内に終わらせることが目的となってしまっており、課題はできたけど、こちらの学んで欲しいことが身についてないという状況になってしまいました。
解消方法としては、一度研修を止め、ゴールをチームと新人エンジニアとで擦り合わせてから、再開してもらいました。
今後はまずゴールと目的を擦り合わせた上で、研修内容を進めてもらうことを心がけていきたいと思います。
まとめ
研修を行ったことで、新人エンジニアの方にPJに必要な技術を短期間で身につけていただくことができました。最初はUIコンポーネントの作成も難しいというレベル感でしたが、今は実装メンバーとして進めてもらうことができており、研修を実施して良かったと思います。
また、教育する側の立場でも様々な学びを得ることができたので、次回があれば、今回の反省点などを活かして進めていきたいと思います。