あの時の新人は今? 3年目エンジニアの今までと、これから

こんにちは、カズシです。早いもので、私が新卒でアトラスに入社して今年で3年目、システム開発グループに配属されて2年と少しが経過しました。未経験で入社した私ですが、今ではなんとかシステムエンジニアの端くれくらいにはなれたかなと思っています。今回は私がこれまでどのような業務に携わり、どう成長してきたのか紹介したいと思います。

今までの業務内容

早速これまでの業務内容を紹介していきます。配属後どのようなタスクをアサインされ、スキルアップしていくかは、その時のプロジェクトの状況や、本人の希望などによっても異なりますので、あくまで一例として捉えていただければと思います。ちなみに私は月1回の上長との面談で新しいことにどんどんチャレンジしたいと伝えています。

コーディング

配属後は機能拡張案件にアサインされ、アトラスでの開発について学びました。外部研修で学んだJavaを実践するぞ!と意気込んでいましたが、フレームワークや既存のシステムの理解、開発フローなど学ぶことがたくさんあり、とても苦戦しました。そんな中、先輩方の多大なるサポートもあり、担当した機能を無事にリリースすることができました。リリース後は拡張の背景や機能の概要、プロジェクトに携わったメンバーなどが社内SNSで周知されるため、開発チーム以外の方々にも「〜の機能を作った◯◯さん」のように覚えてもらえるようにもなりました。その後もこれまで4回の機能拡張案件を経験し、今ではAWS LambdaやAPI Gatewayといったミドルウェアの構築まで1人でこなせるようになりました。最近ではKotlinを使うプロジェクトも始まったので、鋭意勉強中です。

コードレビュー

レビューしない日は無いと言っても過言ではないほど、毎日レビュー依頼が来ます。最初の半年くらいは誤字脱字くらいしか指摘ができなかったのですが、他のレビュワーのコメントや自分へのレビュー指摘を通して言語・システムへの理解が深まり、「仕様のこの部分を満たしていません」や「この書き方はどうでしょうか?」など、徐々に自信を持って指摘や提案をできるようになってきました。また、私にとってコードレビューは経験豊富な先輩方からスキルを盗むチャンスでもあります。業務上で必要なコーディングスキルを身につける近道だと考えているので、他のタスクで忙しい日も、しっかりと時間を確保するようにしています。

リリース

機能拡張案件に慣れてきた配属半年頃からリリース作業も担当するようになりました。リリースにはLinuxでのサーバ作業、EC2・ECSといったAWSサービスの知識に加え、CI/CDツールであるCircleCIの理解が必要になります。最初のうちは手順書にある作業を機械的に実行するだけで、どのような仕組みでリリースされているのかイマイチ理解できていませんでした。しかし、回数をこなす中で点と点が結びついていく感覚があり、一度仕組みを理解すると、少しのトラブルやイレギュラーにも落ち着いて対処できるようになりました。またリリース作業を通して、全体のサービス構成を掴むことが出来たのは大きな収穫でした。

インフラ保守、運用

リリースで様々な作業を経験したことをきっかけに、徐々にインフラ関連の作業も任されるようになってきました。具体的には、脆弱性対応のためにソフトウェアやライブラリのバージョンアップ、サーバのスケーリング作業、CI/CDの調整などがあります。リリース作業と違い、作業内容がケースバイケースなので、対応力が身に付きます。

新メンバーのサポート

この1年で多くのメンバーが新しく開発チームに加わりました。そして、開発フローの説明など、新メンバーのサポートも担当するようになりました。新メンバーとは言っても、私より経験豊富なエンジニアなので、初回の説明では少し緊張しますが、チームでの経験年数は自分の方が長い!と自己暗示して自信を持って説明するように心がけています。また、説明する上で「このドキュメント足りないな」「今のルールに合っておらず、内容が古いな」と感じることが増えてきたので、ドキュメントの作成や加筆修正にも積極的に取り組んでいます。さらに「なぜこのルールで運用しているのだろう?」という疑問が生じたり、「こうすれば、もっと便利にできそう!」など開発フロー全体にも目が向けられるようになり、開発の効率化のためのツールをGoogle Apps Script(GAS)で作成して開発フローの改善にも取り組んでいます。

ミーティング

参加している定期的なミーティングとしては、毎朝の朝礼とチームやプロジェクト単位の進捗確認会があります。いずれも最長1時間、議題がなくなれば予定の時間を待たずに終わるので、他のタスクを圧迫することはありません。その他、フロントエンド・デザインワーキングやConfit勉強会にも自主的に参加しています。Confit勉強会ではシステムがどのように利用されているかが実例と共に紹介されるので、ユーザ目線を忘れないための良い機会であり、開発した機能が使用されているというモチベーションにもなっています。ミーティングに限らず、現在の私の業務は開発チーム内で完結するものが多いため、お客様と接する機会はなく、他のチームの方々と接する機会も少ないです。そのため、社外打ち合わせの議事録やメールのやり取り、社内のSlackでの会話など、公開されている情報は時間を見つけて目を通すなど、情報収集も心がけています。

その他

1年目の冬から春にかけては、開発チーム以外の業務として、忘年会の企画と新卒社員のOJT準備も経験しました。普段の業務では関わりの無いチームの方々と仕事をするのは、とても新鮮でした。また、エンジニアの新卒採用では、カジュアル面談にも参加しており、今この記事を読んでいるあなたともお話しする機会があるかもしれません。

身に着けた知識、スキル

習熟度は異なりますが、これまでの業務で使用した言語やサービスは以下の通りです。

  • Java, Kotlin, PostgreSQL, JavaScript, GAS
  • Linux
  • AWS (EC2, ECR, Lambda, API Gateway, CloudFront etc…)
  • CI/CD (CircleCI, Docker)

振り返りとこれから

入社前は開発業務のイメージがついておらず、エンジニア≒職人のような印象もあり、1人前になるまで仕事させてもらえないのでは?という心配もありました。しかし実際は、1つのタスクに慣れる頃には新しいタスクがアサインされ、期待に答えなければというプレッシャーも感じつつも、チャレンジングな日々を過ごすことができています。また振り返ってみると、木を見て(機能拡張)、森を見て(リリース作業)、また木を見る(インフラ)の流れで業務範囲が広がっていて、理解が深まり易いようにマネジメントしていただいていたのだなぁと感じます。この秋からはフロントエンドの開発にもチャレンジしていて、エンジニアとしての幅をさらに広げています。今後はスキルの幅を広げつつも、スキルを深めていくことも意識して、フルスタックエンジニアとして進化を続けたいと思います。