電通総研 テックブログ

電通総研が運営する技術ブログ

若手社員が社内アプリケーション開発でフルサイクルエンジニアとして成長できた話

みなさんこんにちは、X(クロス)イノベーション本部 ソフトウェアデザインセンターの鈴木です。
12月も折り返しを迎えて、今年も終わりが近づいていますね。 電通国際情報サービス Advent Calendar 2023 の15日目の投稿です。

この度2023年3月から9ヶ月かけて開発した、社内のGitHubやJiraのアカウント・権限管理を行う社内アプリケーション「Icarus」のリリースを無事迎えられました。本記事ではプロジェクトの内容と本開発で得られた経験をまとめていきたいと思います。

前半では開発についてまとめます。開発の背景、技術スタック、開発体制や開発ツールについて紹介します。
後半では新卒3年目で初めて、開発案件にアサインされた筆者目線で本案件を振り返ります。本案件に配属される前は、主に管理系の仕事をメインに働いていましたが、開発案件への異動希望を上長に伝えて開発系の本案件にアサインしていただきました。そのため、本開発への期待と得られた学びや経験をまとめていきたいと思います。

開発について

開発の背景と概要

私の会社では社内標準の開発ツールとしてGitHubとJiraがあり、そのアカウント・権限管理を行う社内アプリケーションがもともとありました。しかし、従来の社内アプリケーションは以下2つの問題があり、「Icarus」はその問題を解決するためのリプレース開発としてスタートしました。

  • データベースにはAmazon DynamoDB(NoSQL型データベース)を採用していた。しかし、利用ユーザーの増加やパーティションキー以外での検索要件が出てきたことでフルスキャンをせざるを得ないケースがたびたび発生した。それによりレスポンスタイムやコストが悪化していた。
    → データベースをリレーショナルデータベースに変更する。
  • アプリケーションはAWS上に構築されていたが開発の経緯上、利用者向けアプリケーションと管理者用アプリケーションで別々のVPC上に構築されていたことで余分なコストがかかっていた。
    → 利用者向けアプリケーションと管理者用アプリケーションを統合する。

また開発メンバーは比較的若手で構成されており、フルサイクルエンジニアとしての知見獲得・スキルアップの機会としても期待されていました。

以上のようにアプリケーションの問題を解決してフルサイクルエンジニアとして成長をするため、フロント部分を含めてアプリケーションを刷新することとなりました。

技術スタック

主要な技術スタックは以下のとおりです。

  • フロントエンド・バックエンド
    • Next.js
    • React
    • TypeScript
    • Axios
  • データベース
  • インフラ(AWS
    (可能なものはAWS CDKでIaC化しました)
  • CI/CD
    • GitHub Actions
    • AWS CodeDeploy(ブルー/グリーンデプロイ用)

開発スケジュール

開発スケジュールはおおまかに以下のとおりです。
ちなみに私は2023年3月から本プロジェクトに参画しました。

schadule

開発体制

初期開発メンバーは比較的若手の社員4名で構成されました。
(7月ごろから体制が縮小され、2名で開発していました)

開発手法としてはスクラム開発を採用しており、2週間のスプリントで開発・テスト・リリースを繰り返していました。

本案件の振り返り

冒頭でも記載した通り、本案件は希望を出してアサインさせていただきました。さらに幸運なことに、配属先の部署は全社的な技術力を牽引するトップクラスの技術者が集まるこの上ない環境でした。
以降では、私がなぜ開発案件を希望したかと本開発で得られた経験と学びについて記載させていただきます。

Icarus開発へアサインされた経緯

私は新卒入社後の初期配属として開発案件への配属を希望していました。理由としては、今後のキャリアを考えた上で自分でシステムを開発した経験をしておきたかったからです。

後々はアーキテクトやPMでキャリアを積んでいきたいと考えており、そのためには自分で動くものを実案件で実装したかったという思いがあります。実際に手を動かした経験があることで、対内・対外問わず説明に説得力を持たせられたり精巧なアーキテクチャ設計ができたりするのではないかと考えているからです。
学校の部活で例えると、学生時代に野球を全くしていなかった顧問より、学生時代に野球部に所属していた顧問の方が指導に説得力や効果がありそうということです。(もちろん学生時代に野球を全くしていなかった人でも素晴らしい指導者はいますが)

しかし事業部の都合もあり、初期配属の希望は叶わず管理系をメインとする案件にアサインされることとなりました。もちろんそのプロジェクトでも大きな学びはあったのですが、やはり若手のうちに開発経験を積んでおきたいという意向を上長に伝え続けた結果、「Icarus」の開発案件にアサインしていただけることとなりました。

もちろん事業部の状況や都合もありますが、社員の意向を叶えようとしていただけるとても良い会社だと思いました。

期待と得られた経験

本案件へ参画するにあたり、個人的に以下の期待がありました。

  1. WEBアプリケーションをフロントエンド・バックエンド・インフラ問わず全般的に開発できる、フルサイクルエンジニアとしての知識と経験の獲得
  2. AWSの基礎知識とWeb3層アーキテクチャの実装経験の獲得
  3. CI/CDやIaCなどの開発効率化に関する知識と経験の獲得

以上3点の期待に対する結果をまとめます。

1. フルサイクルエンジニアとしての知識と経験の獲得

「Icarus」の開発では機能単位で開発を行っていたため、フロントエンドとバックエンドを一貫して実装することができました。またインフラの実装全般を担当させていただき、AWSを用いたインフラ実装も経験することができました。

アプリケーションを全体的に実装することで、どのようにWebアプリケーションは動作するのかをより深く理解することができました。
また開発の過程で同じ部署の方々に指導していただき、セキュリティ周りや低レイヤーの知見、技術者としての心構えなどたくさんのことを教えていただきました。

2. AWSの基礎知識とWeb3層アーキテクチャの実装経験の獲得

以前入っていた案件では主にフロント側を担当しており、クラウドの知見を獲得するためAWSによるインフラ実装を経験したかった次第です。

クラウド技術が可用性やコストの面で強力な技術であることは知識としては知っていましたが、実際に学習・実装してみると身に沁みて強力さを実感しました。実装してみて特に強力だと思ったのは以下の3点です。

  • ELBやAWS FargateやAmazon RDSなどAWSのサービスを用いることで、簡単に高可用構成を実装できる。
  • マネージドサービスを活用することでサーバー管理などが不要になり、開発に集中できる。
  • AWS CDKやAWS CloudFormationを活用することでインフラをコード化でき、構成管理が可能で環境の展開・削除が迅速に行えるようになる。

また、AWS知識を広げる中で「AWS Certified Solutions Architect - Professional」の資格を取得することができました。合格体験記を作成したので興味があればお読みください。
AWS Certified Solutions Architect - Professional

AWSは本当に多くのサービスがあり、いろいろなサービスを試したくなりました。特に学習する中でAWS Lambda+Amazon DynamoDBなどのサーバーレスアーキテクチャ構成に興味が湧いたため、個人的に実装してみようと思いました。

3. CI/CDやIaCなどの開発効率化に関する知識と経験の獲得

効率的でモダンな開発をする上でCI/CDやIaCは必要だと認識していました。特にCI/CDについては以前担当していた案件で、CIで自動テストが実装されていなかったことによるソースコード修正のハードルの高さであったり、CDが実装されていなかったことによる手動デプロイによる操作ミスがあったりと必要性を感じていました。

CIについては単体テストをJestというテストフレームワークで実装して、GitHub Actionsでリポジトリへプッシュした際に自動テストを回しています。それによりバグ発生のリスクを極力抑えながら迅速にソースコードを修正することができました。
CDについては、GitHub ActionsでAWS環境へのデプロイを自動化しており、操作ミスを減らして迅速なデプロイができるパイプラインを整備しました。

IaCについては、AWS CDKでインフラをコード化してAWS環境の迅速な作成を可能としていました。特に実感したのは本番環境の作成時で、検証環境作成時にAWS CDKでIaC化していたため、本番環境の作成は調整やデプロイパイプラインの実装を含めて一人で4~5日程度で完了することができました。

このように自動化やコード化できるものは各種ツールを活用することで、開発効率をかなり向上させることができ、人的ミスを減らすことができるのだと身をもって理解しました。

まとめ

今回は、社内アプリケーション「Icarus」開発についてとそこから得られた学びや経験をまとめました。
記事の途中でも記載した通り、本案件のアサインを通じて社員の意向を叶えようとしていただけるとても良い会社だと改めて感じました。また、ご指導いただいた配属先の方々には大変お世話になりました。

この開発から技術者として知識面・経験面ともに、フルサイクルエンジニアとして大きな成長を遂げることができました。今後はこの知識と経験を活かして顧客の理想を叶えるシステム開発ができるよう、一層精進していこうと思います。

最後までお読みいただきありがとうございました。


私たちは一緒に働いてくれる仲間を募集しています!

フルサイクルエンジニア

執筆:@suzuki.takuma、レビュー:@yamashita.tsuyoshi
Shodoで執筆されました