開発グループの新入社員研修を終えて

ozaki

開発グループのozakiです。

開発グループでは2020年4~5月に新卒2名、中途(未経験)2名を受け入れ、大変有り難いことに一気に人数が増えました。
一方で、技術系の部署で新卒のメンバーが増えるのは久々であり、最後に新卒が入社した当時とは技術系メンバーを取り巻く状況も大きく変わっていたため、新人の戦力化のために色々と試行錯誤が必要でした。

私含め、ここ2年ほどで3名の未経験からの中途入社があり、ITの基礎知識の学習には外部の長期研修を利用しましたが、今年度はCOVID-19の影響を考慮すると外部の集合研修には懸念が大きく、今回は在宅で取り組めるよう社内で代わりとなる研修を行うことにしました。

4月はトライコーン全社の新入社員共通研修があり、顧客へのサービス提案を模したプレゼンテーション研修とWebページ作成研修(HTML/CSS/JavaScriptの基礎)が行われました。Webページ作成研修は、まずProgateで基礎を学び、成果物として自己紹介のためのページを作成するという内容でした。
新メンバーは5月に開発グループへの配属となり、そこから2ヶ月間技術研修に取り組みました。今回の記事はこの技術研修を企画する側の試行錯誤を記事にしたものです。

研修どうするか

4名の未経験入社ということで、何かしらまとまった研修をやるべきだろうという話になり、まずはマネージャーと今年の教育担当(※)で何をやろうか?と議論することから始めました。
今までは外部に研修を委託していたこともあり、開発グループとしては初の試みで、ノウハウも特に無い状態からのスタートでした。
(ちなみに、昔は技術系の部署をローテーションする試みがあったり、「この本読んどいて!」で終わりだったりしたようです)

※トライコーンでは新卒および第二新卒について、それぞれ一人ずつ教育担当となる先輩社員を配置しています。開発グループではそれに加え、経験の浅い中途に関しても、同様の役割をもった社員を配置しています。

議論の結果、独力でも一定のコードが書けるように、さらにチームで開発するための技術やコミュニケーション力を身に着けさせたい、ということで、「基礎教育」「個人開発」「チーム開発」にざっくり分けて研修を行うことにしました。
議論の中でセキュリティの基礎を知り、コードを書く時に意識できるようになってほしい、といった話も出たため、開発の要件にセキュアなコードを書くといったことも追加で含めることに。

研修の内容

アプリケーション開発課題の題材としては、「RDBを利用し、フォームからのデータ登録と登録データの閲覧ができるもの」を選び、開発言語はトライコーンの開発において比較的メジャーであるPHPを選択しました。

まずは基礎的な内容を学んでほしいこと、フレームワークを使いたくなる規模でもないことから、フレームワークやライブラリを原則使わないという制約も入れました。
これは社内でフレームワークを統一しているわけでもないため、特定のフレームワークの作法を学ぶメリットも小さいと判断したためです。

ミドルウェアのセットや擬似的なデプロイを盛り込むことを検討したものの、消化不良になることを懸念し、コーディングのみに絞ることに。そのあたりのセットアップは教育担当が行いました。

その他、日常的な取り組みとして、教育担当と新入社員が朝と夕方に軽くMTGを行う時間を毎日設けており、これは研修が終わった現在でも継続して行っています。ちょっとした疑問の解決や、困っていることについて相談、その他雑談等のための時間としています。研修中はまとまった時間を取り、画面を共有してもらいながら一緒にプログラミングをすることもありました。

基礎教育

基礎教育については、他社で公開している教育資料(S社、C社などなど、本当に有り難い限りです)の読み込み、またProgateを活用したPHPやSQLの学習から入ってもらいました。新メンバーごとの個人差は教育担当にフォローしてもらいます。

IT知識に関する深い定着は目的としていません。あくまでもWeb開発の世界観に触れてもらうことを主眼に置きました。

個人開発

個人開発課題では仕様書を書くことから始めてもらい、フォームでのデータ登録、閲覧という要素を含めさえすれば細かい設定は自由としました。
中にはストーリーから細かく作り込んでくれたメンバーもいて、色々発想力が伺えて面白かったです。
ただ、作り込み過ぎで実装に手間取るケースも見受けられたので、統一した仕様を提示し、実装に集中してもらった方が良かったかなとも考えています。

また、クロスサイトスクリプティングやSQLインジェクションなど、有名な脆弱性については解消しておくことも要件とし、実際に作ってもらったアプリケーションに対して教育担当が攻撃を行い、脆弱性の指摘まで実際に行っています。

チーム開発

個人開発課題の成果物の中から一番良いと思ったコードを教育担当が決め、そのコードをもとにチーム開発に取り組んでもらいました。チーム開発を最初から行うことも検討したものの、課題にふさわしいコードベースがなく、新入社員だけで一から新たなアプリケーションを立ち上げてもらうのも話がややこしくなり、ハードルが高くなりすぎると考えたためです。
具体的な課題については教育担当が開発者としての経験から様々な改修要望を出し、それらをメンバー間で分担して開発担当してもらう形を採りました。題材になったテーマはデータの更新・削除機能、検索機能、ログイン機能、自社プロダクトの autobahn MTAのAPIを利用したメール送信などでした。

他の人のコードを改修することになったメンバーはそれなりに苦労があったようです。とはいえ、一からコードベースを起こすよりも既存のコードに手を加える機会のほうが多いため、そういった意味でも教育効果があったと思います。また逆にチーム開発でベースとなったコードを作った人は他のメンバーにソースコードを解説するという経験も得られました。
メンバーの経験やキャッチアップのスピードも個人差がありますが、そこは適宜教育担当が技術的な内容やコードを読む上で気にすべき点をサポートしたり、チーム間でコミュニケーションをとってもらうなどして円滑に進められたのではないかと考えています。

研修その後

研修の終了後、教育担当から新メンバーに対して直接フィードバックを行ってもらっています。実装全体の話や脆弱性、エラーハンドリング等、大小さまざまな観点でのコメントがありました。教育担当の中には、具体的に指摘をしたいがために忙しい中合間を縫ってこっそりと自分で課題に取り組みコードを実装している人もいたりして、新メンバーには今後の開発で活かしてもらうことを期待しています。

逆に新メンバーからは研修に関する感想やフィードバックをまとめてもらいました。今後の教育に取り入れていきます。

(研修への感想・フィードバックの一部)
・自分のコードとは違うコードを読む機会があり、参考になった
・ファイルやクラスを分ける意義を理解できた
・計画を立てて進めることの重要性が理解できた
・今までフレームワークに頼っていてあまり理解できていない部分があることがわかった
・もう少しちゃんとチームで話し合って進めるべきだった
・最初からチーム開発のほうが良かった
・推薦参考書籍などがあると良かった

7月からは各サービスに配属となり、それぞれの習熟状況やサービスごとの開発状況に合わせ、OJTの形で引き続き研修を続けています。

おわりに

来年以降どうするかはまだ何も決まってませんが、荒削りながら自前で研修をやってみたことで、得られた知見は色々とあったように思います。
どうすれば新人エンジニアをスムーズに戦力化できるか、既存の業務も滞りなく進められるかなど、限られたリソースの中で考慮すべき問題はたくさんですが、改善に向けて引き続き試行錯誤していく所存です。
単に技術力だけでなく、今までの経験が人それぞれ異なるため、どこまで教えるか、どこまで自力で頑張ってもらうかといった塩梅も難しいところではないでしょうか。

3月から在宅勤務が始まり、現在でも多くの社員が在宅で業務をする状況となっています。技術系のメンバーは在宅勤務でほとんど困ることがないため、普段は全員在宅で業務をしています。
ただ、社内であれば横目で新メンバーの状況を見ることもできますが、リモートだとなかなかそうもいかないため、お互いにコミュニケーションを取る意識を高く保つ必要があることは論を俟たないでしょう。
意識だけでは難しいところもあるため、まずは朝夕のMTGを原則行うといったところから取り組んでいます。今後、より効果的な仕組みや施策を積極的に考えていくべき重要なポイントだと実感しました。

社内全体でもコミュニケーションに関する課題に向き合っており、さまざまな企画が総務部門主導や部署間、有志間で生まれています。日常でも、以前より積極的に社内チャットで発言する人が増えてきた印象があります。

新メンバーが実際の開発・運用に関わり始めるこれからが本番、といった感じですが、引き続きよいあり方の模索を続けていきます。

ozaki

Posted by ozaki