Speeeの新卒エンジニア研修について

はじめまして。16新卒エンジニアが3人衆の1人wataruと申します。 弊社は今年は初めて、新卒エンジニア研修としてTECH::CAMPを利用しました。

やったこと

私と同期のMKenta,omiは1ヶ月半の間に、

  • 前半戦
  • 「TECH::MASTER」を使用した基礎学習
  • 後半戦
  • TECH::CAMPメンターの方とグループ開発
  • 総括
  • 社内のエンジニア全員の前でプレゼンテーション

の順で、研修を行いました。

前半戦(04/11〜04/18)

前半戦は「TECH::MASTER」と呼ばれる専用カリキュラムでエンジニアとしての地盤固めを行いました。 「TECH::MASTER」は、8つの基礎カリキュラムと3つの応用カリキュラムで構成されています。 開発環境構築から始まり最終的にRails appが3つ完成するもので、私たちはこの「TECH::MASTER」を進めながら

  • Rubyの基礎
  • HTMLとCSSの基礎
  • 簡単なスクレイパーの作り方
  • Herokuへのデプロイの仕方
  • 基礎的なRails appの作り方

などをひたすらインプットしました。 1週間という期間でしたがカリキュラムをすべて終えることが出来ました。

「TECH::MASTER」は何度も何度も受講生の要望などを受けて更新されており、初学者にもわかりやすいコンテンツでした。この記事を書いている現在も更新され続けているので更に良い物になっていると思います。

後半戦(04/19〜5/26)

後半戦では、弊社のリードエンジニアからの

「Rails4系でSlackのクローンWebアプリを作成せよ」

という課題を基にメンターさんにお世話になりながら初めてのグループ開発に挑みました。 朝と夜に定例MTGを実施し、 タスクと予実をTrelloで管理しながら、 自分のタスクの現状、チームの現状、互いへの要望などを熱く語り合っていました。

プルリクエストの一つ一つにメンターの方や弊社エンジニアの

review

のような熱いレビューコメントが飛んでくる環境の中、ゴリゴリと開発を続けました。

今回のサービスを作るにあたって、最初に3人で設計や技術選定をする期間を設け、その後に実装までを行いました。 具体的には

  • フロントエンド
    • Reactを使用したリアルタイムチャットの実装
    • UI・UXのデザインとコーディング
  • バックエンド
    • Nginx + Puma + Rails環境構築
    • Itamaeを使用したサーバー設定の自動化
    • Capistrano3を使用したデプロイ環境構築
    • チャンネルの作成・更新・検索機能の実装
    • deviseを使用したユーザー認証機能の実装
    • Paperclipを用いたユーザーアバター機能実装
    • ダイレクトメッセージ機能の実装

などを行いました。

私が主にバックエンドのインフラ構築やチャンネル関連の機能の実装を行い、MKentaはReactを使用したリアルタイムチャットの実装を一人ですべて実装、omiはdeviseを使用したユーザー認証周りやデザインの実装を行いました。

初めてAWSを触りながら手探りでインスタンスを立て、ElastiCacheやRDSなど必要な設定を行ったところで「これでインフラは大丈夫かな」と思っていたところ、 弊社のリードエンジニアから「そんなところで満足されては困る、自動で設定出来て自動でサーバーを建てられるようになって初めて普通だ」と言われました! それからItamaeを導入し、Rubyのバージョン管理からNginxの起動までをコマンド一つで実行可能にすることを試みました。 しかし、

  • 環境変数が通らない
  • Redisが立ち上がらない
  • Nodeがインストール出来ない

……などなど様々な問題が発生しました。 同期達やメンターの協力を得ながらその一つ一つを解決し、なんとか『Itamaeによるサーバーの設定の自動化』を実現できました。

他にも

  • S3を使ったファイルアップロード機能
  • Webサーバを増やしELBを使ってのロードバランシング
  • チャット投稿やログを参照できるAPI

など実装したい機能、導入したい技術が沢山ありましたが私達の力不足で泣く泣く諦め後半戦を終えました。

実際のコードはこちら

完成したサービスのスクリーンショット

TOP

チャット画面

構成図

サーバー構成図

最終プレゼンテーション

最終成果発表

研修の総括として社内の全エンジニアの前でプレゼンテーションを行いました。 その時の資料がこちらです↓

このプレゼンテーションを行った際の質疑応答で

  • 「今回の研修で一番自信のあるポイントはどこですか?」

という質問に対し,

私は「テストコードを正確にかつ綺麗にかけたことです」 MKentaは「モダンなフロントの実装ができたことです」 omiは「デザインです」

と、三人がそれぞれスラスラと応えることができ、この研修の密度と充実度を実感しました。 その一方で、

  • 「このサービスを運用するための仕組みは何か有りますか?」
  • 「今回の研修の技術的な反省点を改善する具体的な方法は何か考えていますか?」

などの質問にちゃんとした答えが返すことが出来ず反省点も見えました。

学んだこと

私たちは前半戦でRubyの基礎文法と、Rails wayに則った設計・コーディングの手法を学びました。 Rubyを初めて触ったメンバーも居ましたが 「前半戦でしっかりと基礎固めが出来た」 と自信をつけていました。

後半戦では約6週間という長さを活かして、以前からやってみたかった技術であるReactやES2015に積極的にチャレンジし、業務に活かせる技術領域を広げることができました。

研修全体を通して RSpec を使用したテストを書き続け、DRYで正確なテストコードの書き方を学び、 普段自分のお金ではなかなか手が出せなかったAWSでのインフラ構築も、基礎的な知識を付けた上で自動化までチャレンジでき、とても嬉しかったです。 GitHub Flow + PullRequest駆動開発を行っていたお陰でGitHub活用ノウハウも大きく身につきました。

反省

今回の研修の反省すべき点は『難しい事』や『かっこいいこと』をやろうとし過ぎたことだと思います。 基礎の確認となる技術を中心に選定し開発を行うべきだったと思っています。 私達が今後の業務で開発するのは、『なんとか動かす事ができている』システムではなく『しっかり安定して動かすことができる』システムなので、基礎をしっかり固めるべきだったと反省しています。 ただ、技術的難易度の高いことにチャレンジし、なんとか実際に動くサービスを作ることが出来た事は良かったです。

これから

今回の研修で得た知識を足がかりにさらなる技術力を身につけ、いち早くプロダクトに貢献できるようになりたいです。 あの研修に行かせて良かったと言っていただける成果を挙げ続けていきたいと思います。

  • TECH::CAMP様公式ブログでも今回の研修について取り上げて下さっていますので、宜しければ合わせてご覧ください。

Speeeが新卒エンジニア研修をTECH::CAMPに託した「狙い」とは?