Opt Technologies Magazine

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

エンジニア新卒向け技術研修2019を行いました

alt

弊社には今年19新卒のエンジニアが6名入社しました! オプトテクノロジーズで新卒研修を受けたのち、現在はそれぞれのチームに加入しています。 今回は研修を受けたメンバーのうち3名から受けてきた新卒研修についてのレポートをお届けします。

ライタープロフィール

v2okimochi)
オプトテクノロジーズエンジニア2019新卒のv2okimochi(写真中央の青い服)です。
社内向けツールの開発チームに所属しています。 spacemacsに入信しました。

natsuume)
オプトテクノロジーズ19新卒のnatsuume(後列右から2番目の人)です。
学生時代はテキストをこねくり回したりしていました。先日からData Intelligence Teamに所属しています。
ちなみにJavaとオブジェクト指向が好きです。

山下)
オプト(以下略)の山下(前列右側パーカー眼鏡)です。
研修が終わってからはデータテクノロジー開発部でADPLANの開発に加わっています。
ハンドルネームは「ぷろろろ」でやっていきたいのですが、githubアカウント等統一できていないのが悩みのタネです。
Webてくのろじいを極めて幸せな世界を作りたい。

新卒研修の概要

山下 ぷろろろ)
新卒研修は5月7日から7月19日までのおよそ2ヶ月半に渡り実施されました。 最初の2週間は以下のようなWeb開発に必要となるトピックをオムニバス形式で学びました。

  • アプリケーションの裏側の基礎的な仕組み
    • 「計算機」、「インターネット」、「Web」、「RDB」、「インフラ」等
  • CSSやJavaScriptの書き方
  • git・githubの使い方
  • セキュリティの基礎
  • スクラム開発

その後の2ヶ月間は「Scala研修」を通じて、Scala言語の基礎、例外処理、Play Frameworkを用いたウェブアプリケーションの開発、データベースとの接続、共同開発等を学びました。

個別の研修の紹介

JavaScript

natsuume)
JavaScript研修では2日間かけて基本的な文法や概念を学びました。
内容は1日目は座学、2日目では各自で演習というスケジュールです。
なお2日目の演習ではGlitchと呼ばれるプラットフォームを利用しました。

1日目の座学では変数やデータ型などの基本的な内容から関数、オブジェクト、クラス、プロトタイプなどJavaScriptにおけるオブジェクト指向の概念まで取り扱います。
そのほか、DOMに関しての基本的な説明とJavaScriptでのDOM操作の基礎についても学びました。
新卒の大半がJavaScript未経験でしたが、初学者向けに分かりやすく解説して頂き理解を深めることができました。
また、他言語経験者向けに他の言語とJavaScriptとの違いなどの解説を挟んで頂くことで理解の助けになりました。

2日目の演習では各自Glitch上でライツアウトと呼ばれるゲームの制作を行いました。
最低限満たす必要がある「基本仕様」と、時間があれば実装する「追加仕様」の2つが与えられ、それに沿って制作を行います。

  • 基本仕様
    • クリックするとクリックした場所 + 隣接マスの5箇所が切り替わる
    • 開始時に点灯しているライトの数と位置はランダム
    • クリア時に何かメッセージを出す
  • 追加仕様
    • クリア不可能な初期配置は除外する
    • ライトの総数を変更可能にする

これらを満たした上で時間が余った場合は自由に機能を追加することになっており、ヒント機能やマウスオーバー時に切り替わるライトを表示する機能などを実装している人もいました。

ちなみに私が作成したものは下記ですが、クリック数をスコアとしてカウントする機能、ゲームスタート時の初期配置にリセットする機能の2つを実装しました(実は微妙にバグがありますが……)。
おまけでCSSのサイズ指定でvminを使用しておりウィンドウサイズに応じてサイズが変化するようになっています。

alt
ライツアウトゲーム画面(Glitch)
ソースコード(GitHub)

2日目の演習は事前に受けていたHTML/CSS研修の復習にもなったほか、研修の最後で各自が作成したプログラムの解説を行うことでそれぞれの書き方の違いなどを知ることもでき非常に学びの多い研修となりました。

スクラム

v2okimochi)
1日間のスクラム研修は、主に以下の内容でした。

  • アジャイルとスクラムの考え方(何のためにやるか?)
  • スクラムの用語解説(スプリント、バックログ、…)
  • 紙飛行機を用いたワークショップ

スクラムでは短期間に予測・開発・振り返り(いわゆるPDCAサイクル)を行い続けながら、開発の進め方などを洗練していきます。
その一例として紙飛行機のワークショップが行われました。

2チームに分かれて製品「紙飛行機」を開発します。
新卒ではないエンジニアも交えて行いました。

チーム内の話し合い

床に飛行機が散らかっているのは、「ちゃんと飛ぶ品質の紙飛行機か?」を試験したからです。
各チームで予測をしてから製品を作り、予測と実績のズレが小さくなるように話し合って次の予測を立てていきます。

予測と実績の記録

制約の中で予測精度を上げていく試みが楽しかったです。
各チームとも終盤はずっと笑顔が溢れていました。

Scala

ぷろろろ)
Scala研修は2ヶ月間とボリュームのあるプログラムでした。

最初の2週間は株式会社ドワンゴの資料を用いてScala言語の基礎を学びました。
Scalaは関数型プログラミングをオブジェクト指向の観点から再解釈してできたような言語です。
私はオブジェクト指向の考え方に馴染みがなく、特にトレイトの多重継承やトレイトと抽象クラスの差についての理解が難しかったです。
また、研修生の中には関数型プログラミングに馴染みがない方も多く、 for 式などで苦労していました。

その後は小さなアプリケーションの開発を通じて、実業務で必要となりそうな諸々の技術を体験しました。
諸々の技術というのは、例外処理、サブプロジェクトへの分離、コードレビュー、Dependency Injection、Play Framework、データベースとの接続、マイグレーションといったものです。

そして、最後の3週間では仮想の美容室の予約サービスを2、3人のチームで開発する課題に取り組みました。
この課題では大まかな仕様だけが与えられます。
私達は今まで学習してきたことを総動員して、設計から実装・テストまでを自分たちで行いました。
ある程度できたと思ったところで Merge Request を出して講師や先輩社員にレビューをしてもらいます。

私個人の感想ですが、チーム色がはっきり出ていたことが印象に残りました。
私のチームでは動作するものを早く作成することに重点をおいて開発を進めましたが、
v2okimochiさんとnatsuumeさんのチームでは設計をしっかり詰めてから実装に取り掛かっていました。
もう一つのチームではテスト駆動開発を実践し、品質と拡張性を重視していたようです。

先輩からのキビしいレビュー

受講者は皆Scala初心者でしたが、Scalaを使ったアプリケーション開発ができるようになっていました。
私自身も、かなり楽しくScalaとWeb開発について体得できたと感じています。

まとめ

v2okimochi)
約2ヶ月半にわたる研修は、単純な知識としての学びだけでなく、講師との関わりや研修環境といった面でも非常に有意義なものでした。

研修内容はオプトテクノロジーズのエンジニアたちが作り、それぞれ担当を決めたものです。
私たちは研修を通して講師役のエンジニアとコミュニケーションをとるため、研修を行いつつお互いのこともチョットワカルようになったかもしれません。

特にScala研修の後半は時間の使い方も各チームに委ねられていたため、チーム内の意思疎通や自己管理もしやすい環境だったと思います。
新卒側もそれぞれ自分が学んだことを積極的に発信していました。

これらの研修を受講できたことに感謝しつつ、本稿の筆を置くこととします。

最後に

Opt Technologiesでは、エンジニアを随時募集しています(Scala, Clojureなどの関数型言語を活用してプロダクトを開発したいという方も大歓迎です!)。エントリーはこちらから。