みなさん、こんにちは。品質改善推進ユニット クオリティエンジニアリンググループの平野です。 2020年4月に新卒で入社し、現在はセキュリティ/テスト自動化に関する推進、支援などを中心に取り組んでいます。
私事ではありますが、所属するグループでの業務の性質などもありプロダクトをゼロからしっかりと作るという経験をしたことがありませんでした。 そんな私がLIFULLでの新卒エンジニア2年目研修【SET】を受講して何を得たかについて、研修の紹介と合わせて説明します。
目次
SETとは
はじめに申し上げますと、ここでいうSETとは社内での造語で「Sophomore Engineers Training」の略です。 テストの自動化などを推進するエンジニアであるSET(Software Engineer in Test)とは全くの別物です。
LIFULLの「理想のエンジニア像」のひとつは、バックエンドからフロントまで一通りこなせるWebアプリケーションエンジニアです。 しかし、業務で触れるスコープが限られているケースが多く幅広く業務を行う機会を得られない、という課題もありました。 そのような背景から生まれたのがこの研修であり、開始から7年ほど行われています。
以下が研修の目的です。
- サービスをスクラッチから開発する過程を通してサービスを動かすために必要な要素を学ぶ
- 今まで触れる機会の少なかった分野を経験する機会を作り出す
研修では数人一組のチームでサービスをゼロから創り上げることが課題として与えられ、参加者は普段の業務から離れ集中的に取り組みます。
開発サービス紹介
今年の研修では私たちを含め計3チームおりましたが、私たちはQuoraを模したQ&Aサービスを開発しました。
Q&Aサービスを選んだ理由はいくつかありますが、一番の理由は設計が比較的容易かつ認証やデータベースなどWebアプリケーション開発で必要不可欠な技術に触れられるからです。
開発は大まかに以下の3つに分けて行い、私はその中でもバックエンドを主に担当しました。 なお、チームメンバーそれぞれが未経験の分野を担当しています。
- インフラ(AWSを利用)
- フロントエンド(Vue.js)
- バックエンド(Go+Gin+GORM)
インフラ
開発環境と本番環境の2種類を用意し、それぞれをAWSの提供するIaC(Infrastructure as Code)サービスであるAWS CloudFormationでコード化しました。
フロントエンド
Vue.jsを用いてSPAに対応させたことにより、質問や回答追加ページ、一覧表示ページをシームレスに遷移できます。 バックエンド(APIサーバ)へのPOSTリクエストは、JSON形式でデータが送信されます。
バックエンド
APIサーバを構築し、フロントエンドから指定したURL(質問追加、回答一覧表示など)にリクエストが来た際にJSON形式でデータを返却するようにしました。その際にDBを操作するORMとしてGORMを利用しています。
以下は回答一覧表示の返却値サンプルですが、results
の中に回答IDや回答内容、質問に紐づく回答IDなどを配列として入れることで一括返却ができるようにしています。
{ "results": [ { "user_id": 15, "question_id": 6, "question_title": "Vue.jsが分かりません", "question_body": "おすすめの学習方法はありますか?", "question_rate": 2, "answer_ids": [ 10 ], "n_answers": 1, "answer_id": 10, "comment": "ますは公式ドキュメントを読みましょう", "answer_rate": 3, "user": { "user_id": 15, "user_name": "homes-kun" } }, { .... } ] }
学び・反省点
学び
個人としては、研修を通して3つのノウハウを得ることができました。
- API設計の基礎
- アーキテクチャを意識した開発スキル
- DB設計・操作の知識
1つ目のAPI設計の基礎について、私自身APIの概要や良し悪しは把握していたものの実際に設計したことはありませんでした。 普段の業務でもこれまで触れることのなかった箇所にしっかりと触れることができ、大きな学びとなりました。
2つ目のアーキテクチャを意識した開発スキルについて、今回の開発では代表的なアーキテクチャの一つであるMVCを採用しました。 知識として基本的なことは知っていてもそれを利用した開発経験に乏しかった私にとって、実装は苦労したもののMVCの恩恵を身をもって享受できスキル向上につながりました。
3つ目のDB設計・操作の知識についても、座学で理解するだけでは得られないものを実践を通して得る良い機会となりました。
なお、チームメンバーからは以下のような声がありました。
- ちゃんとしたフロントエンドの開発がはじめてだったので、学びになった(フロントエンド担当)
- デプロイを意識した本番環境構築ができた(インフラ担当)
反省点
個人としての反省点は以下の2つです。
- つまずき調査する時間が研修期間の多くを占めてしまい、予定した箇所まで実装が完了しなかった
- フロントエンド側との連携がうまくできなかった
1つ目について、分からないことを調査すること自体は自身の学びにつながります。 一方で、調査に時間を使いすぎてしまい、そこでストップし続けてしまうのはよくありません。
今回は研修だったので期日までにすべて実装できなくても問題ありませんでしたが、実際の業務でそうはいきません。結果的に早めに相談した方がスムーズに進むということは多々あるかと思いますので、調査と相談のバランスをうまく取りながら今後の業務をしていきたいと強く感じました。
2つ目について、開発期間中はフロントエンドとバックエンドそれぞれで開発しておりました。 ですので、つなぎ合わせての動作確認を自身の担当だったバックエンドの開発がある程度進んでからしようと考えていたところ、開発の遅れから研修最終日にすることとなってしまいました。
いざつなぎ合わせてみると、フロントエンドから送られてくるデータとバックエンド側で受け取るデータの形式が違うことによるエラーなど単体では発生しなかった問題が複数発生しました。そして、設計の重要性を痛感するとともにもっと早くから確認できていればと感じました。このことは、今後の業務に活かしていきたいと思います。
おわりに
今回の記事では、LIFULLでの新卒エンジニア2年目研修【SET】の説明とそこで得たことについて紹介いたしました。
2週間超も普段の業務から離れてスキルアップに充てる機会をいただけたのは大変ありがたく、結果として多くの学びを得ることができました。今後も研修で得たことを忘れず、業務や自己研鑽等でスキルをアップし続け、一人前のエンジニアを目指していきます。
最後になりますが、LIFULLでは一緒に働く仲間を募集しております。よろしければぜひこちらのページもご覧ください。