こんにちは。4月にClassiへ新卒で入社した伊森です。
私は4月から8月上旬までの約4ヶ月、Classiのエンジニアとして働くための新卒研修を受けてきました。
今回はその研修期間を経て、大まかな内容の振り返りや身についた考え方を紹介していきます。
入社前の状態
大学生時代はPythonを使用した画像処理を主に勉強しており、これまでWeb上で動くものを開発する世界に踏み込んだことはほとんどありませんでした。
そのため、Webの基本的な概念であるHTMLなどはぼんやりとした理解に留まっており「触ったことはあるがそれでゼロから何かを作成したことはない」状態でした。
具体的なことを何も知らなかったのでWebに関連する技術はとにかくなんでもやってみたく、そのため入社前面談では「フロントエンドもバックエンドもとにかくやってみたい!」ということを伝えていました。
2024年度の新卒入社は私1人だったのもあり、その意向を汲んで今年度の研修カリキュラムを作成していただきました。
研修内容の概要
以下が研修内容となっています。研修項目を完了することで、Webサイト上で動作する最低限のWebアプリケーションが構築できるようになっています。
4月にはWebアプリケーションエンジニアの基本的な知識としてGit&GitHubの使い方やフロントエンドに関する知識を身につけ、5, 6月にはバックエンドを含めたより専門的な知識をフィヨルドブートキャンプを筆頭に学んでいきます。そして、7月には身につけた知識をもとにWebサイト上で動作するアプリケーションを構築する万葉カリキュラムを行います。
4月
Git & GitHub研修
フロントエンド研修 (HTML, CSS, JavaScript, Angular)
AWS Cloud Quest を用いたAWS研修
自己紹介ページの作成
5・6月
フィヨルドブートキャンプ で外部研修
HTML & CSS
JavaScript
Ruby, Ruby on Rails
データベース
Webセキュリティ
そーだい塾
RubyKaigi2024
7・8月上旬
QA研修
万葉カリキュラム
フロントエンド: Angular
バックエンド: Ruby on Rails, PostgreSQL
Dockerによる開発環境の構築
AWS上に本番環境を構築
上記の研修の中でも、今年度初の試みとなる研修2つと、その経験が特に生きたと感じられた研修1つの計3つを紹介していきます。
AWS研修
Classiの従来のAWS研修ではUdemyという動画教材を参考に、実際にインフラを構築する研修をされていました。
今年は趣向を変え、昨年10月に日本語化の対応されたAWS Cloud Quest: Cloud PractitionerでAWSの基本的な概念を学びました。
以下ではAWS Cloud Questについて簡単に紹介していきます。
AWS Cloud Questとはゲーム形式でAWSのサービスについて学ぶことができる教材です。ゲームのコンセプトとしては、街で困っている人をAWSのサービスを通して解決していき、目標のクエストを全て達成するとゲームクリア!となっています。
Cloud Practitionerコースでは12個のクエストが用意されています。内容としては、S3, EC2, RDSなどのAWSの基本的サービスについての紹介から、アクセス集中や天災に対する耐障害性などのAWSの利点について学ぶことができます。
各クエストは学習・計画・実践・DIYの4つに分かれています。学習・計画ではクエストを達成するための前提知識の紹介とクエストのざっくりとした流れが紹介されます。実践・DIYでは実際にAWSコンソール上で手を動かしていきます。実戦ではこれからやることが順番に示されるのでその通りに手を動かし、DIYでは実践の内容を踏まえたお題が出され、クリアするとクエストが達成となります。
以上を踏まえ、AWS Cloud Questを用いた研修の良かったところ、逆にここは物足りなかった…と思ったところについて紹介していきます。
良かったところ
AWSが各クエストに特化した環境構築をしてくれるので、特定の内容だけに絞って学びやすくなっている
クエスト達成の可否は構築された環境上で所定の動作を踏めているかをAWSが監視して判断してくれるため、基準がわかりやすい
GUIでのAWSの操作に慣れることができるため、サービスに対して親しみを持ちやすい
物足りなかったところ
Cloud Practitionerでは各要素について広く学ぶことができるものの、サービスを構築するための具体的手順はあまり学べなかった
例えば環境構築の際にはEC2インスタンスの作成方法まではわかるが、次にどうやってインスタンス内部に構築するかなどの手順は学べなかった
AWS Cloud Questの強みは何よりも環境構築をしてくれることです。AWS全くわからない…という人にとっては手軽にサービスに触れるための環境が用意されているのはとても初心者に優しい仕様です。
一方で、AWS Cloud Quest: Cloud Practitionerでは一つのWebアプリケーションを作成する際のAWSのサービス同士の連携方法は学べませんでした。サービスの全体を知るにはAWS Cloud Quest外のドキュメントなどを読む必要があります。
総括としては、Cloud Practitionerコースは基本的なサービスの学習ができるので、AWSに対する知識を0から1にするには非常に優れた教材です。今回こちらで学習させていただいて、大きく知識を身につけることができました。
そして、AWS研修の最後には学んだことを発表する会を設けていただきました。学んだAWSのサービスの網羅図を作成し、多くの方に見ていただきました。
発表の際に作成した網羅図 (当時のまま) です。改めて見ていると当時指摘いただいたことがわかったり、例えばルーターはネットワークのトラフィック処理をするサービスであって、アクセス許可を制御するのはルートテーブルじゃないか?などの認識が間違っていた点を発見したりして味わい深いです。
AWS研修のまとめとして作成した図
5日間のAWS研修でしたが、始める前は知識ゼロだったことを考えると、AWS Cloud Questを通じてAWSのサービスに親しみを持つことができました。ぜひAWS未経験の方にやっていただきたいです。
QA研修
こちらも今年度から初の試みの研修となっています。研修内容についてはQAチームメンバーの方が記事を作成されているので、より詳しい研修の目的はそちらの記事をご覧ください。
私からはQA研修前後のQAに対する意識の違いについて述べていきます。
研修前の状態を正直に申し上げると、QAという単語自体が何を意味する言葉なのか知りませんでした。Question Answer…?という状態です。
その状態から始まった研修でしたが、QAとは?という講義から始まりClassiにおけるQAの体制を紹介していただき、日々の業務の流れやテスト項目の作成方法を学んでいく形式の研修はとても理解しやすかったです。
印象深かった研修内容は二つありました。それぞれ順に紹介します。
実際に手を動かすテスト項目の作成課題
この研修では、「macOS標準のリマインダーアプリに対してテスト項目を作成するなら?」というお題で、実際の業務で使われているテスト観点表を利用してテスト項目の作成を行いました。
この研修の良かった点は二つあります。
一つ目に、初日の段階では観点表の使い方を軽く紹介するだけに留められたことです。最初は手本を見ずに一人で考えてテスト項目を作成しました。こうすることで、翌日にQAメンバーの方が作成された観点表と比べると改善点が浮き彫りになるのが非常に面白かったです。
二つ目に、受けたフィードバックや考えたことを翌日の課題に反映できたことです。
この課題は計4日間実施され、前半は単体テストを、後半は組み合わせテストの観点表を作成しました。この形式にしていただくことで、前日作ってきた課題の反省点をすぐ翌日の課題に反映させることができました。
それによってフィードバックを受けてすぐにやり直すことができるスピード感が生まれ、さらにQAチームの方が作成された観点表に私が作成した観点表が近づいていくのは成長を実感しやすい仕組みでした。
「品質が高い」とはどの状態を指す言葉?というディスカッション
ここでは、QAチームの方が日々考えている「品質が高いこととは何をもって定義されるか?」を一緒に考えていきました。最初に品質の種類について紹介していただき、障害を起こさないためには?品質の責任の所在は?などを一緒に考えていく時間をとっていただきました。
このディスカッションを通じて、今まで私が考えていた「品質が高い」というのは、ユーザー目線に限定されていたことに気づきました。具体的には、「この機能が揃っている!」や「応答が早い!」などの視点しか考えられていなかったのです。
QAチームの方からご回答いただいた「品質を高める」ために実践されていることとしては以下の点がありました。
テスト項目を網羅的に作成し、リリースを細かくしてすぐに巻き戻しができるようにする開発の話
チームで品質に責任を持ち、品質の定義をみんなで考える意識の話
必要な時はエンジニアに仕様に対する説明資料を作成していただき、不明点の解消を図る見える化の話
この経験から、外部的な品質に対する視点だけではなく内部的な品質を評価する視点が増えたと感じています。
総括して、QAチームの業務について知る研修はソフトウェアエンジニアとして働く上で非常に重要でした。今回学んだことを活かして、テストの観点をQAメンバーの立場になって考えたり、製品の品質についてこれからも考えていきたいです。
万葉カリキュラム
オリジナルのカリキュラムは以下になります。
この研修はWeb上で動くアプリケーションを作成することをテーマにした、Classiの新卒研修では恒例となる研修です。今年はフィヨルドブートキャンプでプログラミングの技術について深く学ばせていただいたので、万葉カリキュラムではアプリケーションの機能面を充実させることよりもWeb上での実装を重視した研修となりました。
Web上で動くアプリケーションを作成するのは初めての経験だったため、Dockerの環境構築やCIを活用した開発もこの研修を通して学びました。最初は設定ファイルの書き方がわからず非常に苦戦しました。わからないことは尽きなかったため、他の人に対して質問をする力がつきました。また、今やっていることを発言しながら作業するWorking Out Loudの精神が育まれたと感じています。
また、アプリケーションを作成する際に古い書き方になっていないか?わかりにくい書き方になっていない?などをGitHubのPRでレビューしてもらうことで、事前に気をつけるべき点を意識するようになりました。以前はできなかった公式ドキュメントを参照する力も養われ、アドバイスをいただく際に信頼できる情報源を知ることができました。
この研修では、 開発と単体テストを同時に行うことを実践していました。この際にQA研修で作成したテスト観点表が役立ちました。具体的には、テスト項目を考えるときやテストの網羅性を検討する際に自然とテスト観点表が思い浮かぶようになり、考えるための土台になったと感じています。
最後にAWSへ構築した環境へデプロイを行いました。最初に構成図を作成し、それをもとに手順書とサービス構築を行いました。作成した構成図は下の通りとなります。
万葉カリキュラムのアプリケーションの構築環境を表す図
デプロイの際にはAWS研修でサービスについて学んだことでAWSに触れるハードルが大きく下がったように思います。GUIの画面やサービス構築方法を知っていたのはこの時の作業で非常に役に立ちました。
一方、AWS研修ではわからないことも多くありました。今回の実装はEC2インスタンスやRDSが1つしか存在しておらず、環境として特殊だったこともありますが、例えば「WAFのルールを適用させるためにALBを使う必要がある。ALBの環境構築には最低二つ以上のAZに分かれたサブネットが必要になる。」という所で複数のサブネットを用意していなかったためにつまづきました。
また、Rubyの環境構築の際に無料利用枠のt2.microインスタンスではCPU使用率が100%になって環境構築ができないことがありました。結果的にそれぞれのインスタンスのCPU性能などを知る良い機会になりましたが、この辺りでうまくいかずに苦労しました。
それでもデプロイが完了し、作成したアプリケーションがWeb上で動いているのを見るととても達成感が得られました。同じことをする上での今後の自信に繋がりましたし、ここまでの成果が4ヶ月間の集大成となると感じられるように作られている研修プログラムが非常に良かったです。
研修プログラム以外にも学んだこと
研修期間中にここが良かった!見習いたい!と思ったことを書いていきます。
良かった点の一つ目として、新卒だからと言って良い意味で手加減をされなかったことです。もちろん細やかな誘導はしていただいていたのですが、これもできるといいねという発展課題の提示や、ここは○○が理由で間違っているという指摘は妥協せずにしていただきました。細かい助言や指摘を受けることで関連知識を身につける機会が必然的に増えましたし、いきなり答えが提示されなかったことで問題解決する力を養えたように思います。
また、私が研修で気づいたことや知ったことを共有すると、メンターの方も知らなかったやり方や技術だったことがありました。そんな時にもメンターの方は素直に知らないと言って新しい知識を取り入れられたり、一緒に学んでいこうという姿勢を見せてくれました。この学びに対する姿勢はClassiのバリューにもあることですが、見習っていかなければと感じさせてくれました。
まとめ
Classiの新卒研修はフルサイクルエンジニアを目指す上でとても理にかなった研修プログラムでした。Git&GitHubの使い方やフロントエンド研修から始まり、フィヨルドブートキャンプやAWS、QA研修で細かな技術を学び、万葉カリキュラムではデプロイをしてWebでアプリケーションを動かせるまでになりました。スポットで開催していただいたそーだい塾や日々のやりとりを経て、エンジニアとして働くための心構えを身につけていきました。
フルサイクルエンジニアを目指す研修は私が入社前からやりたかったことです。この研修を通じて、Webアプリケーションについてほぼ何もわからなかった私が、ここまでできるようになったことにとても満足しており、エンジニアとして大きく成長できました。今後は実際の業務で恩返しや価値の提供をしていけるように頑張っていく所存です。
読んでいただきありがとうございました!