【2018年度新卒エンジニア研修】新卒エンジニア研修で手を動かしつつ学んだこと

こんにちは。
GMOアドマーケティング、18新卒エンジニアのS.S.です。
新卒エンジニア研修を終えたので、そこで学んだことについて紹介したいと思います。
新卒エンジニアは次に挙げる3つの研修を受けました。

それぞれの研修でどのようなことを学んだか順に説明します。

テックイノベーションPJT基礎研修

この研修では開発を行うために必要な基礎的な内容を学びました。

  • 自社プロダクトも含めた、アドテク事業についての概要
  • Git
  • Linux基礎
  • コーディングスキル
  • SQL
  • 言語研修(Java)

はじめに自社プロダクトやアドテク事業に関して、プロダクトに関わっている方々から説明をいただきました。
研修を受けてアドテク事業についてレポートとしてまとめてみることで理解が進みました。
Git・Linux基礎・コーディングスキルなどの研修では、開発を行うにあたって基本的な内容を学びました。
SQLに関しては働き始める前はふわっと知っているくらいでそれほど複雑なクエリも書いたことがなかったこともあり、業務で出てくる問題を解決するためのSQLを書く前にまとまった時間をとって基本的な操作を身につけられたのはよかったと思います。

言語研修(Java)

ここからはJavaの言語研修で学んだ内容を紹介します。
この研修ではJavaを使った開発について学ぶことに加えて、
題材であるアドサーバーの実装を通して広告配信の仕組みについても理解を深められるものとなっていました。
ここで出てきたアドサーバーとは媒体社が自社のサイトに広告を掲載する際に、
表示する期間の設定や広告の差し替えなどを柔軟に行うための仕組みです。

今回作成した、アドサーバーにおける広告配信の流れは次のようになっています。

  1. Webページの表示
  2. 広告タグの読み込み
  3. サーバーから表示する広告を返却する
  4. 返却された広告がブラウザで読み込まれる(Imp)
  5. ユーザーが広告をクリック(Click)
  6. 遷移先のウェブサイトで会員登録や商品購入などのあらかじめ決めておいた行動を行う(CV)

ユーザーがウェブページを表示してから広告をクリックするまでの流れを次の図に示します。

 

JavaのServletの仕組みを使い、各ステップの処理を担当するAPIを作成しました。
広告を返却するAPI、表示の通知を受け取るAPI、クリックおよびCVのAPIの4つを順に実装していきました。

いくつか実装上、注意した点を挙げていきます。
1点目は広告の表示通知を行うタイミングについてです。
今回の実装では広告が表示されたと判定するのは、サーバーから広告が返却されたときではなく、
返却された広告に含まれる通知用のタグの動作時に送られるリクエストを配信サーバーが受け取ったときとしています。

2点目は配信ログの不正判定に関するものです。
当然ではありますが、ユーザーが閲覧しているウェブページに表示される広告を目にしてクリックし、
広告主のサイトを訪問後にCVに至るという流れを経ていないものはCVとしてカウントできません。
そのほかにも広告の表示から一定時間が経過してあとのクリックやCVなど、
広告の効果であるとみなせないものについてカウントしないケースがあります。

実装した機能はデータベースAPIの呼び出しなども含めて、テスト時にインスタンスを用意するのが難しいクラスに依存するものとなっていますが、モックを作るためのライブラリを使ってテスト用のコードも追加しました。
後半は効率的にリクエストを処理するための工夫について、KVSを利用する方法などを学びました。

Javaで広告の配信システムを開発するにあたって必要となる基礎的な知識を、この研修を通して身につけられました。
まだ足りない部分はこのあとのOJT研修などを通して補っていくことになります。

OJT研修

6月からのOJT研修では、ReeMoという弊社の広告配信アプリケーションの開発に少しずつ参加しました。
この研修では配信アプリで使っている仕組みなどについて、担当の開発チケットの対応を行いながら学んでいきました。
テックイノベーションPJT基礎研修で触るコードは課題を進めながら自分で実装したものがほとんどですが、
OJT研修以降ではプロダクトのコードベースを少しずつ理解しながら不具合の修正や機能の追加などを行なっていきます。
開発を行いながら少しずつどこに変更を加えるべきか推測がつくようになったり、
レビューに出すにあたって意図が伝わる書き方を意識するようになりました。

開発に関する短時間のミーティングは立ちスペースで行うこともあります。

GMOテクノロジーブートキャンプ

この研修はGMOインターネットグループ全体の新卒エンジニアの技術力向上などを目的として、
5月の半ばから約二ヶ月半にわたって毎週金曜日に行われているものです。
講義は各社の経験を積んだエンジニアが担当します。
研修の最後に二日間の合宿があり、研修で学んだことをもとにチームで成果物を作成します。

この研修で学んだトピックの一部を次に挙げます。

  • インターネットの歴史
  • セキュリティ
  • オブジェクト指向
  • Linux
  • Git
  • 仮想化技術
  • ネットワーク
  • アプリ開発(CSS, Javascript, PHP)

この中から一つ選んで紹介しますと、セキュリティの研修では演習形式で手元に用意した脆弱性のあるウェブアプリーケションに対して不正な操作を加えながら、
SQLインジェクションやXSSといった、いくつかのよく知られているタイプの脆弱性について学びました。

研修の後半では、この項の冒頭で触れたチームでの成果物作成に向けて、どのようなアプリを作るかをはっきりさせていくために、
ユーザー像を考えたりプロトタイプを設計してフィードバックをもらうこともありました。
その検討をもとに、開発合宿では新入社員を想定ユーザーとして嗜好をもとに店をおすすめし、
一緒に新しい店を開拓することを助けるためのアプリケーションを作成しました。
このアプリケーションでは一人のユーザーが店につけたスコアから未訪問の店につけるであろうスコアを補完して、
それをもとにおすすめの店を選びます。
つながりのあるユーザーの中から共通の店がおすすめされているユーザーを見つけて、
その店とともにそのユーザーを提示するという仕組みになっています。

この研修全体について振り返ると、初めて知るトピックの演習で苦労するところからはじまり、
Web開発における標準的なトピックの他にもたくさんのことを学び、エンジニアとしての幅を広げられた部分がありました。
さらに最後には、チームで成果物として作るものを決めて合宿でそれを完成させるところまで一通り取り組んで、
きちんとアウトプットを出せるようになったので、エンジニアとして成長できた部分もあったかと思います。

まとめ

入社して直後に受けたこの3つの研修を通して、エンジニアとして開発に関わっていく上で必要な知識を学びました。
技術的なことのほかにもエンジニアとしての働き方に関する内容のお話を聞いたり、
グループ横断で他の新卒エンジニアと関わりを持つことができたのもよかったと思います。
研修で学んだことを活かしつつ、足りない部分は補いながらエンジニアとしてこれからも頑張っていきたいと思います。