新入社員研修の内容を過去の自分に紹介しよう！～技術編～

# はじめに
こんにちは、GxPのあさかです。
この記事は[グロースエクスパートナーズ Advend Calendar 2023](https://qiita.com/advent-calendar/2023/gxp)の2日目の記事です。

突然ですが、時は就活生時代にさかのぼります。
僕はIT系の仕事をしたいと思っていたのでいくつかの企業の説明を受けました。業務内容や社内で使用されている技術、給与形態などさまざまなことを聞いた覚えがあります。
しかし、入社後のスケジュールや先輩社員へのインタビューなどでは「新入社員研修が〇〇か月かけて行われる」「新入社員研修は楽しかった」等の内容は説明される一方、新入社員研修の詳しい内容を説明されることはほとんどありませんでした。

コーディングはしたことあるもののアプリ開発経験やそのあたりの知識が一切ない僕は「『文系や未経験でも歓迎』という文言は今やいろいろな企業様の説明欄で見ることはできるが『どのようにサポートされているので文系や未経験でも歓迎です』というようなことを細かく書いているような場所はめったに見ないし、どのようなことをしているか気になるな」と思いました。

そこで、過去の自分と今まさに同じようなことが気になっている就活生のあなた！に向けて僕が実際に入社してから受けた研修の内容を書いていこうと思います。

# 入社前(11月～3月)
GxPでは内定者向けに行われる約4か月のインターンが存在します。ここではJavaやJavaScriptの基本的な文法や、後ほど説明するGitなどを週1回5時間のペースで学びます。困った際には先輩社員に助けを求めることができます。
3月にはグループで作ったものを発表する成果物発表の場が設けられ、それぞれのグループが個性豊かな作品を発表していました。
しかし、僕は学業を優先したため内定者インターンは泣く泣く不参加でした。(上の内容は参加した同期からのヒアリングです)

# 入社後(4月頭～4月中旬)
4月の頭に入社式があり、そこから2週間は社内研修となります。
これから自分が使うパソコンのセットアップをするところから始まり、将来自分たちが配属となるGxPの各グループの説明を受けたり、役員の講話を聴いたり、社会人マナー研修を受けたり、ZOOMで全社配信される自己紹介の時間が設けられたりもしました。

# 外部研修(4月中旬～5月末)
本格的な技術研修はここから始まります。
開発経験のある一部の同期はOJTという形で実業務のチームに参加して研修ということをしますが、半数以上の同期はオンラインで開催される外部研修に参加します。
今後開発を行う上で最低限必要となるツールや知識をここで学びます。スケジュール上は1か月半あるのですが、学習する量がそれなりに多いので復習が大変でした。学習した内容は以下のようなものです。

### Git
Gitとはソースコードのバージョンを管理するシステムのことです。
実際の業務で開発するWebページやアプリケーションは長い年月をかけて様々な機能の追加や削除をします。当然これをひとりでやるわけではないので、ほかの人とコードの共有もしなければいけません。
Gitにはそれを簡単に行うことができるような機能がたくさんあります。「いつこのファイルにどのような変更をしたか」といった内容が保存されていて、なにか問題が起こった場合はそのときの状態まで戻るといったこともできます。
Gitには上のような機能を実行するコマンドや、コマンドを打たなくても実行できるツールがたくさん存在しますが、**それぞれの機能がどのような働きをするか**を覚えることが大事です。僕は中途半端な理解で機能を使ったら環境がぐちゃぐちゃになったという経験がこの半年でも何回かありました...

### データベース/SQL
データベースというのはその名の通り「データを格納しておくもの」のことを指します。
「データ」とひとことでいっても様々なものがあります。氏名や住所だけでなくログインIDやパスワード。あなたが今読んでいるこの文章もデータの1つです。
データベースではそのような様々なデータを管理しています。そして、アプリケーションはその様々なデータを受け取ったり渡したりします。

SQL(Structured Query Language)というのは「データベースに値を追加したり取り出したり、データベースそのものを変更したりする命令をするための言語」です。
上でも紹介したようにアプリケーションでは様々なデータを扱います。そのデータを探し出したり編集したりするのは人間ではありません。「2000年生まれのユーザーのメールアドレスをすべて取得してください」「会員番号が1234-5678番のユーザーが東京都に引っ越したのでデータの変更をしてください」という命令(つまりSQL)を書いてコンピュータに実行してもらうことになります。実業務では条件分岐がもっと複雑なものになるため、記述するSQLはそれに応じて複雑なものになります。

つまり、アプリケーション開発をするうえでデータベースは必ず使うことになるのでSQLの基本的な文法を押さえておくことは非常に重要です！

### HTML/CSS
HTML(Hyper Text Markup Language)とは「Webページを作成するための言語」です。文字を画面上に表示させるといったことや入力欄を作る、ボタンを作るといったことなど皆さんがよく見たことのあるWebページはだいたいがHTMLによって作られています。

CSS(Cascading Style Sheets)とはHTMLで作成した画面にデザインを付け加えるものです。文字の大きさや色を変える、動きを加えるなどのことができます。
僕の中では「HTMLで骨を作り、CSSで肉を付ける」といったイメージを持っています。

### JavaScript/React
JavaScriptはHTMLやCSSだけでは実現することができなかった動的な機能をWebページに追加することができる言語です。例えば「ボタンを押すとポップアップが表示され、そこに名前を入力してもらい、その値を変数に格納する」といったようなことはHTMLだけでは行うことができません。

ReactはWebサイト上のUIパーツを構築するためのJavaScriptライブラリのことです。
ボタンやメニューなどのたくさんのパーツが用意されていてなおかつ直感的に変更を加えやすいので、CSSで色や大きさを調整するよりもReactの機能を使ってWebページを作る方が楽だったなと個人的には思いました。

### Java/Spring Boot
Javaはオブジェクト指向のプログラミング言語です。同じソースコードでもWindowsやLinuxなどのOSに依存せずに実行できるという特徴があります。

Spring Bootの説明の前にSpring Frameworkの説明をします。Spring FrameworkとはWebアプリケーション、データベースアクセス、バッチ処理、セキュリティなどの多様な機能を持ったフレームワークのことです。Spring Frameworkは便利な反面、環境構築が大変であるという欠点がありました。そこで、それらを使いやすくするようにまとめられたものがSpring Bootです。

僕は現在Spring Bootを用いた案件に配属されています。便利な機能がたくさんあるので、かなりの頻度で「それ自分で書かなくてもいいんだ」という場面に遭遇します。その一方、使いこなすためには使い方やルールを知っておく必要があるので、既存のコードを読んで真似たり、先輩にアドバイスをいただいたりしながら学びつつ実装をしています。

### 実践
外部研修の最後には上で紹介した外部研修で学んだことを総動員して4,5人のチームで簡単なWebアプリを作りました。習いたての技術ばかりだったのでかなり大変でしたが、他の会社の方と同じチームとなって開発を進めることができてとても楽しかったです。

# 社内研修(6月頭～6月中旬)
外部研修が終わり、再び社内での研修に戻ります。
役員の方の講話を聞いたり、自分たちが考えたビジネスモデルを発表するといった一見するとIT関係なさそうなおもしろい研修もありました。

# 社内研修(6月中旬～7月頭)
新卒メンバーがランダムで4人のチームを組み、約4週間かけて1つのWebアプリを製作しました。お題も「Webアプリならどんなものでもいい」といったフリーな感じで、作るアプリのアイデア出しから役割分担、使う技術などほぼすべて自分たちで決めて開発に取り組みました。
外部研修での開発演習の期間が2日間だったのに対して、こちらは十分すぎるほど長い期間をかけて取り組むことができたので、設計、実装、Gitの運用、コミュニケーションなど実業務に近いフローを体験することもできました。

僕はこの研修を通して初期段階の設計の大切さを学びました。
機能の仕様やメンバー内での認識合わせがあいまいなまま開発を進めると、他のメンバーに頼んだタスクが自分の想定していたものとは異なる形で仕上がってしまい、その修正やそこからの認識合わせなどで結局たくさんの時間を消費してしまうということに気づきました。

# 社内研修(7月頭～7月中旬)
スプリント開発演習というものを行いました。新入社員研修としては実質最後のプログラムです。

そもそも開発手法(プロジェクトの進め方)は大まかにウォーターフォール開発とアジャイル開発の2つに分けられます。
ウォーターフォール開発は要件定義→設計→開発→テスト→リリースという一連の流れをさかのぼることなく進めます。
一方アジャイル開発は、計画→開発→リリースを1週間などの短期間で行い、それを繰り返すことで最終的なものを完成させます。アジャイル開発の計画からリリースまでをスプリントと言います。

この研修では2日を1スプリントとして合計4スプリント行いました。
2日で1つの機能を完成させて、それが終わったらまた別の機能といった流れで、非常にスピーディな開発研修でした。AngularJSというJavaScriptのフレームワークを使っての開発でしたが、どちらかというとアジャイル開発のスケジュールを体験しようという内容でした。

これが終わると、とうとう実案件のチームに配属です。
優しい先輩方に囲まれて現在進行形でたくさんのことを学ぶ日々で、先輩方のような一人前のエンジニアになれる日はまだまだ先のように感じています...

# さいごに
先ほど書いたように僕は現在Java/Spring Bootを主に用いたバックエンドの開発チームに所属しています。もちろんJavaだけ書いていればいいというわけでもなく、上に書いた内容をまんべんなくほぼすべて業務で扱っており、さらにはExcelの操作やコンピューターの基本的な知識を求められることもあります。4か月弱というそれなりに長い期間をかけていろいろなことを学んだので、それらに対して毎回「CSSってなんですか？」といった超基本的な内容を質問することはあまりないです。
つまり「実案件で活きる知識やスキルをすべて教えてもらったり習得したか」と言われるとNOですが、「実案件に参加するだけの最低限の知識やスキルを身に着けたか」はYESだと思います。

GxPでの新入社員研修の流れ・学ぶ内容はざっくりと理解していただけたでしょうか？
扱う内容や期間に細かな違いはあれど、未経験でIT企業に入社した新入社員はだいたいこのような研修を受けているのではないかなと思っています。

現在絶賛就活中で未経験だけどIT企業に興味のある方の参考になれば幸いです。