見出し画像

【後篇】新卒エンジニア5人が紹介する、Webエンジニア研修2022

こんにちは!
2022年4月、チームラボにWebエンジニアとして新卒入社した安藤拓人です!この記事では2020年4月から1~2ヶ月間に渡り実施された研修の概要と、課題から何が学べたのかを、新卒エンジニア5人で分担してご紹介していいます。
今回は、後編になります。
前篇はこちらからご覧ください。

【前篇】
STEP1. 
ハンズオン・環境構築
STEP2.
バックエンド課題1「TODOリストの作成」
バックエンド課題2「RESTfulなAPIアプリケーション」
バックエンド課題3「OAuthを使ったソーシャルログイン」

【後編】
バックエンド課題4「認証つきのRESTfulなAPI」
バックエンド課題5「定期ジョブ機能」
STEP3.
追加研修1「AWS Solution Architect Associateの勉強」
追加研修2「Udemyを用いたフロントエンド研修」
追加研修3「競技プログラミングチャレンジ」

それでは、早速、後半の課題内容をご紹介していきます!

STEP2. 「認証つきのRESTfulなAPI」

■課題概要
課題3では、課題2で作成したAPIに対してAuthorizationヘッダを用いたBearer認証を追加することが目標になります。

・Bearer認証とは
HTTP通信時にヘッダーの1つであるAuthorizationヘッダーに事前に作成したアクセストークンというものを埋め込んでサーバーに送信し、サーバー側でトークンが有効かを判断して、有効であれば通信をするという認証方式です

■学べたこと
課題の中で、発行したBearerトークンは保存用のDBを作成して保持することになります。保持用のDBはこれまでの課題と異なり、自分で1から定義することになります。比較的シンプルな設計ですが、DBで保持しなければいけない値は何かを考えたりと、これまではドキュメント通りに設計してきたものを1からつくる必要があるため良い練習になりました。設計にあたってはヒント集を参照したり、調べたりして進めていました。
また、トークンチェックにFilterを定義して実装を行いますが、課題3で使用したInterceptorとの違いだったり、理解を深める必要がある項目に関しては周りの同期と議論したり、レビュワーの方に納得がいくまで質問をすることで乗り越える事ができました。
課題の初めの方では認証と認可の言葉の違いなどにも気をつけて理解するよう調べていました。

■所要期間
課題終了までの時間は、課題2と同様目安にはなりますがレビュー、修正を含めて2日程度かかりました。

■ヒント集
課題4のヒント集にはDB設計の取っ掛かりのヒントや、アクセストークンの発行・チェック処理の実装ヒント、割り込み処理であるフィルターの実装についてのヒントが書かれていました。

■課題3~4を通しての感想
課題を通して自分が意識していたことが以下の2つです。
・実装速度よりもコードの品質と、自分の理解度を重視する
・わからないことがあればまず検索をしてドキュメントを読む。

 それでもわからなければ、解決のために自分で試したことを踏まえた上で質問してみる

要件をコードに落とし込む上で、いかに自分の書いているコード1行1行で何をやっているかを説明できる状態で実装を進めることが大事だと感じました。意識するだけで理解度が大きく変わりますし、人に自分の実装を説明しなければいけない場面は、エンジニアとして過ごす中でこれから多々あると思います。良い練習の機会になりました。
また実際の案件に入る中で、エンジニアにとって「検索力」と「問題解決力」は大事な力のうちの2つだと思っています。わからないことがあればうまく検索し、見つけたドキュメントを読み込んで解決策を探す、それでもわからなければうまく周りの人を頼ること(ただ答えを聞くことは避けること)はこの「検索力」と「問題解決力」を養うための良い練習になりました。この力を養うために必要な、「すぐに同期やレビュワーの方に質問できる環境」がチームラボにはあるため、課題を通して大きく成長できたと実感しています。
席が近かった同期や、レビュワーさんにはとてもお世話になりました、、、!


STEP2. 「定期ジョブ機能」

新卒エンジニアの荒川侑哉です!
僕のパートでは、いよいよSTEP2最後の課題である課題5「定期ジョブ機能」についてご紹介します。

22新卒 荒川侑哉

課題5では、「定期ジョブ機能」というタイトルで、ログ出力や定時バッチ処理などを行うという課題で、今までの課題2〜4の集大成としての立ち位置でした。
課題を始める時は、ログというものもよくわかりませんでしたし、定時バッチ処理については、聞いたこともない状況からのスタートでした。笑
そんな状況からのスタートだったので、躓くことも多かったですが、その分得るものの多い課題でした!

・定時バッチ処理とは
「一定量あるいは一定期間のデータを、あるスケジューリングされた時間に一括で処理する仕組み」のことです。
アプリケーションで行われる通信のログの集計などでよく使われます。
参考 https://www.imkk.jp/blog/what-is-batch-processing.html

■課題概要
課題内容は大きく分けると、以下の3つでした。

  1. 課題2、4で作成したRestful APIの実行結果をログ出力する。

  2. そのログを1日1回の定時バッチ処理にてデータベースに格納する。

  3. ログの集計結果を課題3で作成した画面にて確認できるようにする。

1.のログ出力機能については、
・ログを出力するクラスを一つにまとめること。
・ログを出力したファイルは30日間保持したのち、消去すること。
・決められた情報のみをログファイルにtsv(タブ区切り)形式で書き込むこと。

2.の定時バッチ機能については、
・毎日決まった時間に決まった処理が走るようにすること。
・DBの設計を行う。
・ログファイルを取り込んで、それをDB(MySQL)に保存すること。

3.のログ集計結果を画面表示させる機能については、
・開始日と終了日を設定して、その間のログを検索できること。
・課題2で作成したログイン後の画面に表示されること。

などの要件があり、それらを満たすように実装していきます。

■学べること
この課題4で学べることは非常に多かったのですが、
特にログ、バッチ処理についての理解を深めることができたというように思います。

ログについては、
・ログの出力の際には、どのようなことに気をつければ良いのか。
・Java、SpringBootの技術セットの際にログ関連の設定はどのように行うのか。
・そもそも、ログはどのように使うのか。
などで、

バッチ処理については、
・バッチ処理とはなんなのか。
・定時処理とはどのように実装するのか、何に気を使う必要があるのか。
などについての知見が深まったように思います。
 他にもファイルに何か出力する方法や、逆にそれを読み込む方法など、多くのことを学ぶことができました!

■所要期間
この課題5にかかった時間ですが、1週間ほどだったと思います。
出社して課題に取り組んでいたため、近くにいつでも質問することができるメンターさんがいらっしゃったので、つまり過ぎることはなく課題を進めることができました。
また、周りの新卒の課題を行っているメンバーと、一緒にわからないことを教え合うなどして、課題に取り組めたことも非常に楽しかったです!

■この課題で用意されたヒント集

  1. 横断的にログ出力するクラス(1つだけ)はフィルターを使いましょう。

  2. ログ出力内容に処理時間があるのですが、StopWatchクラスというものを使うと綺麗なコードで書くことができます。

  3. ログ出力内容に、URLとメソッド(GETやPOST)などの組み合わせによってAPI名を出力するというものがあるのですが、その実装をif文やSwitch文で行うと冗長なものになってしまうので、ENUMを使いましょう。

という3つのヒントがありました!
3.のENUMというのは、列挙型のクラスのようなもので、非常に綺麗に処理を書くことができます。


■自分が取り組んだ感想
この課題は、唯一「ログ」というものに触れる課題でした。
小さな規模での個人開発しか経験していない人にとって、このログというものはとっつきにくいものだと思います。かくいう私もその一人でした、、、。
しかし、業務としてチーム開発をするにあたってログを扱えるようになることは、テストやデバッグなどを円滑に行うためにとても大切なことで、ログを扱えるようになる第一歩として、この課題5はとても秀逸だったのではないかと思います!!
他にもログを集計する定時バッチ機能や、課題の最後に書く詳細設計書など、業務に役立つものがこれでもか!というほど詰め込まれた課題で、難しい反面、エンジニアになったという実感が得られる非常に楽しい課題でした!!!!


STEP3.「AWS Solution Architect Associateの勉強」、「Udemyを用いたフロントエンド研修」、「競技プログラミングチャレンジ」


新卒エンジニアのゆっきーです!
僕のパートではバックエンド課題終了後、希望者向けに実施されたSTEP3で行う課題3点についてまとめてご紹介させて頂きます。
・AWS SAA取得勉強
・フロントエンド研修
・オンラインプログラミング研修

AWS SAA取得勉強

5日間丸々もらって、それぞれが自由な方法でAWS Solution Architect Associate(SAA)の勉強を行いました。
SAAとは、AWS上で分散システムを設計・実装する能力を認定する資格です。AWS上のサービスの多くが出題範囲になっているため、この資格の勉強をすることでAWSのサービスを網羅的に学習することができます。
資格勉強といえば、一人ではモチベーションが続かなかったり、わからないところで躓いてしまいがちですが、他の新卒メンバーとわからないところを教え合ったり、わかりやすい教材を共有したりすることで効率よく勉強することができました。また、用意されていた何回でも受けられる模擬テストのおかげで、いつでも気軽に腕試しすることができました。自分は市販の書籍とこの模擬テストをベースに学習を進めました。
この研修で得た知識は実務で役に立っている他、実際にSAAも取得して資格手当もいただけたので、大変お得な研修でした!

※ちなみに、チームラボには「資格取得応援制度」という制度があり、特定の資格を取得すると受験料2回分の金額がインセンティブとして支給されます。(2022年7月現在)

フロントエンド研修

Udemyを用いてTypeScriptとVue.jsを勉強したのち、学習したフロントエンド技術でTODOリスト課題の画面表示を再現しました。
Udemyとは100,000以上の講座があるオンライン学習プラットフォームです。ここでは教えたい人が講座を開き、学びたい人が学ぶことができます。
Vue.jsには各種ディレクティブやemitといった他の宣言的UIフレームワークにない機能があるのですが、これらが理解できず、実は学生時代に一度挫折していました。しかし、Udemyの講師の丁寧な解説のおかげで、今度は仕組みレベルでちゃんと理解することができました!
学習後は学んだ内容を生かしてTODOリスト課題の画面表示を再現しましたが、一度挫折した技術とは思えないほどスラスラ書けるようになっており、成長を実感しました!

※2023年度以降はVue.jsからReactに変更予定です。(2022年7月現在)

オンラインプログラミング課題

最後の研修では、社内競プロガチ勢の考えたプログラミングテストを満点が取れるまで繰り返しました。
問題の形式は、10問の問題に60分以内に回答するといったものでした。求めた答えのみを入力すれば良いので、使用する言語は自由で、またソースコードの提出は不要でした。
自分は好きな言語であるJavaを使って挑んだのですが、メモ化やエラトステネスの篩といった競技プログラミングで用いられるテクニックが求められる問題や、BigIntegerを使わないとオーバーフローする問題など、一筋縄ではいかない問題の数々に苦戦しました。しかし、これらの難しい問題を他の新卒メンバーとテクニックを教え合ったりしながら繰り返し解くことで、効率的なプログラムを書く勉強になりました!

おわりに

長い文量をお読み頂きありがとうございました!

本記事は、チームラボのWebエンジニア職に興味をお持ち頂けた皆様向けに、入社後にお取り組み頂く課題をご紹介する目的で書きました。
少しでも、チームラボに入社した後のイメージや、学んでおくべき技術について知って頂ける情報にっていれば嬉しいです。

実際の開発環境で使用する言語やフレームワーク、DBなどについては、Webアプリエンジニアの求人をご確認頂けると幸いです。


チームラボの理念、働き方、開発実績などについてをまとめた説明スライドも作成しました。是非一度ご覧頂けると嬉しいです!


最後になりしたが、チームラボでは、一緒に新しいものを作っていける仲間を通年募集しています。技術を活用したものづくりにご興味をお持ちの皆様、ご応募をお待ちしています!!

採用に関する情報はTwitterでも発信中!
フォローよろしくお願いします!


みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!

最後まで読んでいただきありがとうございました! ぜひ一度オンライン説明会にもお気軽にご参加ください🙌