こんにちは、開発部22新卒で登降園・請求管理機能チーム所属の山家です。この記事では、チーム配属前に行われた2か月間の新卒エンジニア研修で、学んで良かったと感じる技術を三つ紹介します。
入社前は、エンジニアとしての実務経験はほとんどなく、独学でプログラムを学んだり、個人でフレームワークを用いたWebアプリを開発したりしていました。当時の私は、本記事で紹介する技術についての知識はほとんどなく、プログラムに関する知識はとても表面的なものだったと感じています。
そんな私が、入社後の新卒エンジニア研修で学んだ様々な技術から、特に学んでよかったと感じる技術を三つ紹介します。コドモンの新卒エンジニア研修内容や、新卒エンジニアがどのように技術を学んでいるのかが、少しでも伝われば幸いです。
Docker
学んで良かった技術一つ目はDockerです。個人開発では必要性を感じることがなかったDockerを学ぶことができて良かったです。研修前のDockerに対する理解は「ハンズオンを見て動かしてみたけど、なんだかよくわからん」くらいのものでした。
研修内容
研修では、なぜDockerを使うのかを理解し、Dockerの仕組みやコマンド、Dockerfileの書き方・読み方を学びました。どの技術にも言えることですが、「なぜその技術が必要なのか」という問いに答えられるようになったのが今回の研修での一番の収穫だと思っています。
「Dockerがなぜ必要なのか」という問いに対して、今回の研修で得た答えは、「チームのエンジニアが同じ環境で開発を行うための仮想環境を構築するため」です。
ひととおり基礎を学んだ後は、練習としてDockerを利用したLaravelの開発環境構築を行いました。個人開発で環境構築に苦労した経験もあり、いかにDockerを用いた環境構築が効率的であるかを実感しました。また、チームのメンバーが同じように環境構築をし、自分と同じ実行環境で開発している様子を見て、Dockerが実務で使われるイメージを持つことができました。
Dockerを学んで良かったと感じた理由
Dockerを使う本来の目的とは異なるかもしれませんが、Dockerはプライベートでの学習でもかなり役に立つと思います。
Dockerを利用することで、ローカルの環境構築なしに学習したい言語やフレームワークを動かすことができ、必要なくなればその仮想環境を削除することができるからです。
Dockerを使っていなかった頃は、学習に必要なパッケージをインストールしようとしても、ローカルの環境設定が原因でエラーが発生したり、過去に設定したものがそのエラーの原因となっていたりと、学習の前段階である実行環境を構築することに時間がかかっていました。
今後、プライベートで何か技術を試したいときには、今回の研修で学んだDockerの知識を活かして環境構築をしようと考えています。
オブジェクト指向
学んで良かった技術の二つ目はオブジェクト指向です。研修前の私は、 オブジェクト指向の三大要素について書籍で読んだものの、それらをなぜ、どんなときに使うのかといった実感を持てていませんでした。
研修内容
オブジェクト指向の概念と必要性を書籍で学んだ後、オブジェクト指向を活かしてじゃんけんプログラムやブラックジャックプログラムを実装しました。特にブラックジャックプログラム実装では、ゲームの仕様を実現することに加え、プレイヤークラスとディーラークラスの抽象化を実現することに苦労しました。
オブジェクト指向を学んで良かったと感じた理由
オブジェクト指向を学ぶことで、フレームワークや設計思想などの応用的な知識を理解するための土台ができたと感じています。そう感じた要因は、オブジェクト指向を学んだことによってコードの読み方が変わったことです。
研修前は「このコードを書くとこう動く」という表面的なコードの理解に留まっていました。オブジェクト指向を学んだ今では、言語やフレームワークで用意されている関数はあるクラスに属するクラスメソッドであり、そのクラスを継承することで私たちがその関数のロジックを意識することなく使用することができていると考えられるようになりました。
また、後述するドメイン駆動設計もそうですが、デザインパターンや設計思想といった応用知識の多くが、オブジェクト指向の考え方を元にして成立しています。なので、実務においても今後の技術学習においても、研修初期段階でオブジェクト指向を学べたことに大きな価値を感じています。
ドメイン駆動設計
学んで良かった技術三つ目はドメイン駆動設計です。 ドメイン駆動設計とはドメイン知識(プログラムを適用する対象となる領域)に焦点を当てた開発手法です。このドメイン駆動設計によって、変化に強いユーザーファーストなソフトウェアの開発を可能にします。
研修内容
研修では、ドメイン駆動設計を実現するための技術や概念を学んでから、ドメイン駆動設計とは何かを勉強しました。その後、ドメイン駆動設計で会社の書籍管理アプリケーションを開発しました。
学び始めはドメイン駆動設計を成立させるDIP・DIといった横文字に圧倒されていましたが、実際にドメイン駆動設計でアプリケーション開発を行っていくと、前述した横文字がなぜ必要なのかという問いに対し答えられるようになっていきました。また、オブジェクト指向研修で学んだインターフェースを使用して、DIP・DIを実現するという経験に達成感を感じました。
ドメイン駆動設計を学んで良かったと感じた理由
ドメイン知識をコードに落とし込むことが楽しいと感じました。チームで話し合いながら、実際の本や貸出表を手に取り、それらの構成要素は何かを考え、ペアプロでコードに落とし込んでいくプロセスが純粋に楽しかったです。
最後に、ドメイン駆動設計は私が研修前まで抱いていたアプリ開発の考え方をガラッと変えてくれたと感じています。研修前に個人開発をしていた当時は、画面上に表示したい情報やDBに保存したい情報を軸にアプリ開発を行っていました。そんな私にとって、現実世界とソフトウェアの捻れをなくし、ドメインに焦点を当てた開発はとても新鮮で魅力的でした。
最後に
新卒エンジニア研修でさまざまなことを学んできましたが、そのなかでも個人的に学んで良かった三つの技術を紹介しました。前述のとおり、今回の研修での一番の収穫は、「なぜその技術を使うのか?」という問いに対し納得感のある答えを持てたことだと考えます。
まだまだ技術に関して知らないことだらけですが、これからも「なぜ?」に焦点を当てて、一つずつ身につけていきたいと思います。