Opt Technologies Magazine

オプトテクノロジーズ 公式Webマガジン

2020 年度のリモート新卒研修を振り返ってみた

alt

あいさつ

皆様、こんにちは。2019年度に入社した水島です。現在は、社内の技術教育や社内の技術アドバイザーとしてなど、チームを横断して技術に関する問題を解決する立場で、試行錯誤しながら業務を進めている今日この頃です。

これまでの記事でも書かれているように、弊社では昨今の情勢を鑑みて、原則リモートワークで業務を進めて行く方針となっています。それは新卒研修も例外ではなく、2020年度新卒研修も全てリモートで行いました。その中の、新卒エンジニア研修については特に私が全体統括という立場で、研修のプログラムを設計・実施しました。この記事では、弊社の2020年度新卒エンジニア研修を、講師の立場から振り返って行きます。

新卒エンジニア研修の概要

弊社では例年、4月の全社的な研修が終わった後、5月~6月にかけて新卒エンジニア研修が行われます。今年は8名の新卒エンジニアに向けて約2ヶ月の研修を実施しました。研修は概ね以下のスケジュールに従って実施されました。

  • 5/11(月):マシンのセットアップ、コンピュータ入門
  • 5/12(火):コマンドライン入門
  • 5/13(水):インターネット入門、Web入門
  • 5/14(木):HTML/CSS入門
  • 5/15(金):バージョン管理入門
  • 5/18(月)~5/20(水):プログラミング入門
  • 5/21(木)~5/22(金):データベース入門
  • 5/25(月):インフラ入門
  • 5/26(火):アジャイル・セキュリティ入門
  • 5/27(水)~6/4(木):Scala入門
  • 6/05(金):AWS入門
  • 6/08(月)~6/12(金):Play2入門
  • 6/15(月)~7/03(金):Webアプリケーション開発実践研修

マシンのセットアップやコンピュータの基礎についての座学から始まって、チームに分かれてWebアプリケーションを開発する実践的な講義まであり、知識と実践の両方が伴うように研修プログラムを組みました。

以下の項では、2020年度新卒エンジニア研修で行われた各講義の概要について説明致します。

セットアップ

新卒エンジニア研修が始まった段階では、まず、必要なソフトウェアが新卒の仕事用マシンにインストールされていないため、最初の段階でマシンのセットアップをする時間を別途設けました。当初は、開始時に全員が支給PC(Mac Book Pro)を配布されている前提だったため、MacOS前提で考えていましたが、新型コロナに伴うトラブルもあり、実際には新卒エンジニアの内半数以上に対して、支給PCの配布が間に合いませんでした。

そのため、macOSが2名、残りがWindowsという状況になり、急遽、VirtualBox上にUbuntu 20.04をインストールしたイメージを配布するという形態に切り替えました。Windows PCが配布されている新卒にはWSL(Windows Subsystem for Linux)をインストールしてもらう事も検討していましたが、docker周りでのトラブルがあることを懸念して、最終的にはUbuntuに統一することにしました。

この辺りは、来年度はあらかじめUbuntu環境でと統一するなどした方がトラブルを回避出来て良かったかなと反省するところです。

コンピュータ入門

コンピュータ入門では、現代のコンピュータの基礎について座学で学んでもらいました。特に、

演算装置、制御装置、入力装置、記憶装置、出力装置

という分類から始まって、主記憶や補助記憶といった概念について、具体的なハードウェアと関連付けて学んでもらいました。

コマンドライン入門

Unix-Likeな環境上で作業をする上では、コマンドラインに慣れ親しんでもらう事が必要です。この講義では、

  • ls
  • cd
  • mkdir
  • rm
  • touch

などの、基本的なコマンド群について、実際に手元で打ち込んで実行結果が予想通りになることを確認してもらいました。この講義で学ぶ内容については、概ね事前に知っている新卒エンジニアが多かったですが、リモートで研修が進んだため、現在どこまで課題を終えたのかについて工夫が必要でした。

今回は、Slackで、「lsの課題を終えた人はリアクションしてください」という形で、リアクションを活用して進捗状況を把握しました。なお、この講義で試してみた「Slackによる進捗把握」は以後の講義でも基本になりました。

インターネット入門

弊社は、インターネット広告代理店であり、作成するプログラムもインターネットに関するものですから、インターネットの基礎知識は必須と言えます。この講義では、TCP/IPやIPアドレスの概念について座学で学んでもらいました。

Web入門

現在では、多くのサービスがWorld Wide Web(Web)の上に成り立っています。弊社が作っているサービスもその例外ではないため、エンジニアにはWebの基礎知識は必須と言ってもいいでしょう。この講義では、World Wide Webの概要やWebサーバやWebブラウザといった構成要素に加え、HTTPの基本について座学で学んでもらいました。

f:id:opttechnologies2015:20201130163821p:plain
Web入門で使われたスライドのキャプチャ。ここではWWWとは何かについて書かれている。

HTML/CSS入門

現在のWebページがHTMLやCSSで記述されている事は言うまでもないことでしょう。この講義では、ハンズオン形式で、HTMLやCSSを使ったページを実際に構築してもらいました。

バージョン管理入門

現代のプログラミングにおいて、バージョン管理システム(VCS)が必須であることは言うまでもないと思います。特に、GitHubをはじめとしたホスティングサービスで使われるGitを学ぶ必要性は高いです。この講義では、GitおよびGitHubについて座学形式で学んでもらいました。また、それ自体はバージョン管理ではないものの、実践的に必要性が高い、継続的インテグレーション(Continuous Integration: CI)や継続的デリバリ(Continuous Delivery: CD)についても軽く触れました。

プログラミング入門

弊社の新卒エンジニアは多かれ少なかれ、プログラミング言語は触って来ていますが、この講義では改めて、JavaScriptを使って、一からプログラミングを学び直してもらいました。プログラミングは座学だけでは身につかないため、講義で習ったことはその都度、実際にプログラムを打ち込んで実行結果を確認してもらうようにしました。

実践では、RunKitを使って、講義テキスト内に埋め込まれた入力領域にプログラムを打ち込んで走らせてもらう形を取りました。テキストを読み進めながら、プログラムの実行結果を確認できるのは、JavaScriptを入門用の言語として採用したメリットの一つといえるかもしれません(もちろん、それ以外の言語でも可能ですが、ブラウザがほぼ必ずサポートしている言語であるJavaScriptだからこそ容易だとは言えます)。

データベース入門

Webアプリケーションのサーバーサイドの多くでデータベースシステム(特にRDBMS)が使われるのはごく普通のことになっています。弊社でも、サーバサイドでのプログラミングにRDBMSを使います。というわけで、この研修では、RDBの基礎やSQLの基礎について、実践を交えて学んでもらいました。

インフラ入門

Webアプリケーションエンジニアであっても、インフラ層の事を全くしらなくていいということはありません。というわけで、そもそも「インフラって何?」から始まって、Linuxの操作やLinuxの基本、そして最近は普通に使われるようになってきているDockerの基本について、実践を交えて学んでもらいました。

セキュリティ入門

特に、ネットワークにつながるデバイスが当たり前になって来た現在において、開発者において、セキュリティは教養の一つと言えるでしょう。この講義では、

  • ユーザ向けセキュリティ入門
  • 開発者向けセキュリティ入門

に分けて、Webアプリケーションにおけるセキュリティの基本を学んでもらいました。開発者向けセキュリティ入門では、クロスサイトスクリプティング(XSS)を実際に体感してもらうといった事も行いました。

アジャイル入門

弊社では、主にアジャイル開発手法の一つであるスクラムを採用しています。この講義では主に座学で、アジャイルの概要について学んでもらいました。

Scala入門

この講義では、弊社のプロダクトで利用されているプログラミング言語の一つであるScalaについて、Scala研修テキストを使って学んでもらいました。弊社ではScala以外にも多様な言語を採用しているため、Scalaに限定する必要はありませんでしたが、特に、Scala研修テキストの主要執筆者が私自身である事もあり、テキストの執筆コストや講義のコストを考えて採用しました。

AWS入門

近年では、Amazon Web Services(AWS)やGoogle Cloud Platform(GCP)をはじめとした、いわゆるクラウドサービスの利用が一般的になっています。弊社でも、サーバーは主にクラウドサービスを利用していますが、この研修では特にAWSに的を絞って、1日かけてAWSの基本を学んでもらいました。

Play2入門

この講義では、Scala入門で学んだことを生かして、Scala製のWebアプリケーションフレームワークであるPlay2を使ってWebアプリケーションの作成について、手を動かして学んでもらいました。題材としては、簡易的な掲示板アプリケーションを発展させていくという感じで、

  • メモリ内に書き込み内容を保存する
  • データベース内(RDBMS内)に書き込み内容を保存する
  • JSONによるWeb APIを作成する

といった内容を学んでもらいました。余談ですが、この講義は特にリモート研修の難しさを痛感させられた講義でもありました。OSS版のIntelliJ IDEAを使ってコーディングをしてもらったのですが、新卒エンジニアが、トラブルに遭遇した時に、Google Meetでの画面共有やチャットだけでは、トラブルの内容を伝えきる事が難しく、私自身が俗に言う目デバッグをする羽目になった事もあります。来年以降は、VSCodeのLiveShareなどを使って、コーディング途中の内容を共有するといった施策が必要だと感じています。

Webアプリケーション開発実践研修

この講義では、それまで学んだ事の総まとめとして、大まかな仕様を与えられた美容室予約Webアプリケーションを、4名 * 2チームに分かれて作ってもらいました。当初、新卒エンジニアの質問に対応するために、毎日交代で人が張り付いていましたが、実際には大きなトラブルもなく、予想以上に早くアプリケーションを完成させていて驚いた記憶があります。

研修を実施してみての雑感

今回、「新卒エンジニア研修」という枠組みを昨年度の担当者から引き継いで、一から設計した上で、講義を担当したり、講義担当者と意思疎通したりしましたが、新型コロナウイルス感染症のこともあり、リモート研修になったのは想定外でした。また、それに伴って、研修内容自体も当初とは違った形で実施する必要があり、かなり苦労しました。特に、リモート研修では、進捗状況を把握しづらいという点が難点で、各講義担当者含め、苦労していました。手を動かすタイプの講義でこの問題点が表面化した印象があります。

一方で、座学についてはリモート研修でも、思ったほどには支障が出なかったというのが正直な感想です。ひょっとしたら、座学についてはリモート研修の方が効率が良いかもしれないとすら思います。

工夫した点

今年は全面リモートで研修が進んだため、様々な面で、研修を円滑にするための工夫が必要でした。

たとえば、既に書きましたが、特定の課題を終えた人がどれだけ居るのかを把握するために、「この課題を終えた人はリアクションしてください」という形で、リアクションを活用して、講義理解度の把握に役立てました。オフラインの研修であれば会場全体を見渡せばなんとなくは雰囲気がわかるものですが、リモートではそれは出来ないので、四苦八苦でいしたが、「リアクションを活用する」というのは割とうまく行った点ではないかと思います。

それ以外でも、たとえば、「プログラミング入門」がそうでしたが、Webブラウザ上に課題を埋め込んで、JavaScriptをブラウザ経由で実行して、自動でテストを走らせる仕組みも、パスしたかどうかを受講側が簡単にチェックし出来るので、うまく行ったのではないかと考えています。

ただ、全体としては、来年に向けて、もっと改善していきたい点が目立ったというのが正直な感想です。

反省点

私が新卒研修を統括するのが初めてであったことや、急遽リモート研修になったため、反省点はそれこそ山のようにあります。来年に向けて、特に改善したいのは、次のような点でしょうか。

  • 時間を割り当てすぎた講義がある:急遽、リモート研修になった影響もありますが、一部の講義については時間を割り当てすぎたせいで、新卒エンジニアの一部にとっては退屈と感じられた部分もあったようです。余裕を持って教えられる事も重要ですが、研修を受ける側が退屈にならないように、時間を調整したいところです。
  • トラブルシューティングに手間取った:これは、研修受講側の状態を画面越しにしか知ることが出来なかったためです。そのため、トラブルシューティングのために、画面共有をしてもらいつつ、声で指示をするという形を取りましたが、特に環境面でのトラブルは,環境を共有出来ないとつらい事を実感しました。来年度は、Visual Studio CodeのLive Shareなどの機能を使って、コードベースなどの環境を講師側と受講側で共有出来るようにした方が良さそうです。
  • 開発環境の統一がうまく行かなかった:これは、研修受講側が利用するPCは通常MacBook Proであるところ、研修開始前に受講側全員に支給PCが行き渡らなかったため、代替としてWindows搭載のPCを利用した受講生がいたためです。

おわりに

というわけで、弊社における、2020年度新卒エンジニア研修を紹介させていただきました。研修の実施側にとっては、特に、急遽リモート研修になったことによる苦労は大きかったですが、これまで対面でしか出来ないと思われていた研修について、リモートでも案外出来るというのを実感したというのが正直なところです。来年度は、今年度の教訓を踏まえてより上手く研修を実施したいですね。

この記事が、エンジニアの新卒教育に携わっている人等の参考になれば幸いです。