21卒ソフトウェアエンジニア|入社2年目の振り返り
はじめに
以下の記事の2年目バージョンです。
業務は、1年目から引き続きWebサービスの開発を担当しています。
DBデータ移行ツール開発(2022年4〜5月)
入社1年目の2021年11月頃に、オンプレのサーバー群をすべてGoogle Cloudへ移行する大規模PJTが始まりました。
PJTのキックオフ直後は技術検証などをしていましたが、この時期からは、オンプレにあるDBデータをCloud SQLに移行するにあたって必要となるツールを開発していました。
開発したツールは以下の2つです。
ツール名 | 開発言語 |
---|---|
スキーマ変換ツール | PowerShell, SQL |
DDL自動生成ツール | Go |
スキーマ変換ツールは、旧DBのスキーマから新DBのスキーマに変換しつつDBデータを移行するツールです。こちらは、PowerShellとSQLを使用して開発しました。
一方、DDL自動生成ツールは、Excelで管理されているテーブル定義ファイルを入力として、DDLが記述されたSQLファイルを出力するツールです。
こちらはGoで開発したのですが、Goでの開発経験がほとんどなかったため、以下の2冊を読みました。
また、将来的にマイクロサービス化を計画しているため、キャッチアップのために以下の書籍を読みました。
Google Cloud上にサーバー構築(2022年6〜7月)
DBデータ移行ツール開発が一段落したあとは、移行先のサーバーとなるGoogle Compute EngineをGoogle Cloud上に構築する業務をしていました。
我々のサービスでは、Google Cloudのプロジェクトが4環境あり(Dev, Test, Stage, Prod)、かつ必要なサーバーの種類・台数も多かったことから、 IaCツールであるTerraformを使用してインフラ構築工数の削減を試みました。
具体的には、まずDev環境に各サーバーを1台ずつ手動で構築してマシンイメージを取得しておき、 そのマシンイメージを残りのTest環境、Stage環境、Prod環境にTerraformを使用して自動複製する戦略をとりました。
今振り返ってみると、サーバー構築にTerraformを使用したという選択は大正解でした。Terraformを使用したことでPJTをオンスケで進めることができたといっても過言ではないと思います。
Terraformは書き方に少しクセがあり、プログラミングができるからといってすぐにコードが書けるわけではないので、学習のために以下の書籍を読みました。
また、近い将来にコンテナ技術を使用した開発業務を任されることが予想されたので、Dockerの学習をするために以下の書籍を読みました。
Clean Architecture勉強会(2022年7〜9月)
この時期から、メインで取り組んでいた移行業務と同時並行で、開発チームとしてソフトウェア設計の勉強をするために、Clean Architectureを題材として輪講を始めました。
自分たちで「夏休みの宿題」と題して、夏季休暇を利用して自身の担当箇所を読んで内容をまとめてくる、といった取り組みをしていました。
これまでソフトウェア設計の書籍は読んだことがなかったため難易度は高かったですが、 保守性・理解容易性・変更容易性を高めるための、以下に示すソフトウェア設計の原則を学習することができました。
- SOLID原則
- 責務別にレイヤー化する
- 依存の方向を一方向に制限する
これらの知識を知っているか否かで、コードの理解力がかなり変わってくると思うので、早い時期に設計の知識を得られたのは大きいなと思っています。
次期リリースに向けた技術開発スタート(2022年10月)
このあたりからGoogle Cloudへの移行業務が少し落ち着いてきたため、移行後を見据えた技術検証を開始しました。
このとき私が任されたのは、以下の2つの開発業務でした。
業務 | 使用技術 |
---|---|
Webフロントエンド開発 | TypeScript, React, Next.js |
REST API開発 | Go, Docker |
ツール開発やCloud FunctionsなどでGoでの開発経験はありましたが、モダンフロントエンドに関する知識がほとんどなかったため、 最初はモダンフロントエンドの概要を把握することを意識していました。
モダンフロントエンド開発は周辺ツールが多くあり、名前は聞いたことはあるものの、 それぞれのツールがどのような目的で使用されているか理解していなかったため、それらを整理するために以下の書籍を読みました。
その後、UdemyでJavaScriptやReactに関するコースを数コース学習しました。ここでReactの概観はなんとなく把握できた気がします。
コンテナ版REST API開発(2022年11月〜2023年1月)
10月は主にモダンフロントエンドのキャッチアップに注力していましたが、11月頃からはREST APIの開発を本格化させました。
今回開発するREST APIの概要は以下のとおり。
項目 | 内容 |
---|---|
開発言語 | Go |
アーキテクチャ | Clean Architecture |
コンテナ技術 | Docker, Docker Compose |
クラウドリソース | Cloud Run, Cloud SQL, Cloud Storage |
ベンダーにお願いをしてプロトタイプを作成していただいていたため、まずはそのコードリーディングから始めました。
設計が良いコードを1行ずつ処理の流れに沿ってコードリーディングしたことで、Clean Architectureに準拠したプログラムの書き方や、GoでのREST API開発の方法を学ぶことができました。
コードリーディングでプロトタイプの全体像を把握し、どのレイヤーにどの処理を実装すれば良いかの判断もできるようになってきたため、 プロトタイプを参考にしつつ、今回の要件を満たすREST APIの開発を進めていきました。
今回のフェーズの目的は、商用コードを書くことではなく技術検証であったため、PMや他部署の関係者と仕様を詰めつつ、 その仕様を満たすREST APIが今回の技術スタックで本当に開発できるかのフィジビリティの確認作業をしていきました。
このとき参考にしていた書籍は以下の2冊です。 2冊ともかなり実用的で、Goを使用した開発のベストプラクティスや便利なパッケージの実装例がたくさん載っているため、とても参考になりました。
他には、Web API開発のベストプラクティスを学ぶために以下の書籍も読みました。
また、技術検証業務と並行して社内のLTイベントに登壇して、我々のチームがGoogle Cloudへの移行業務においてTerraformをどのように活用したかについての発表をおこないました。
発表の準備等で工数は少しかかりましたが、知見の共有と形式知化ができたのは良かったかなと思います。
Goを使用したCGI開発および初リリース(2023年1〜2月)
Google Cloudへの移行時にWebサーバーのバージョンアップも同時に行っていたのですが、 その影響でとあるレガシーなCGI(2003年にC++で開発されていたもの...)が正常に動作しなくなってしまいました。
そこで、私が既存のCGIと同等の機能を有したCGIをGoで作り直すことになりました。
これまでは移行や技術検証業務が中心でしたので、自分1人でフルスクラッチで開発したプログラムが世の中にリリースされるという経験は入社以来初めてでした。
今回リリースしたCGIは大した機能を担っているわけではないですが、 自分が書いたプログラムが今この瞬間も誰かに使ってもらえているという感覚はやっぱり良いなー、と感じています。
Webフロントエンド刷新(2023年2〜3月)
CGIも無事にリリース完了し、REST API開発の見通しもある程度立ってきてからは、徐々にWebフロントエンドの刷新業務へと軸足を移しました。
事前に以下の2点が揃っている状態だったので、プロトタイプのコードリーディングをして動作の仕組みを理解したあと、 新デザインを新技術スタックで開発して、フィジビリティを検証するという形で進めました。
- TypeScript, React, Next.js を用いたプロトタイプコード by ベンダー
- 新デザイン案 by デザイングループ
新デザイン案については、デザイングループの予算が余っていたということで、ユーザーテストを実施しました。 一般の被験者20人ぐらいにオフィスまで足を運んでいただいてA/Bテストを受けてもらい、我々はモニター越しに被験者の動線を見守っていました。
これから結果のレビューなどをして、新デザインを固めて、フロントエンドの開発を進めていくことになりそうです。
Reactについては、以下の書籍を購入して読んでいます。
また、裏では2024年度に向けての技術検証もすでに始めており、そこではドメイン駆動設計を扱うため、キャッチアップのために以下の書籍を読み始めました。
まとめと今後に向けて
今年度はなんと言っても、入社して1発目の大規模PJTとなったGoogle Cloudへの移行プロジェクトを丸1年の時を経て大成功で終えることができて、 チームで大規模なPJTを成功させる経験ができたのはとても良かったです。
最近はモダンな技術を学習してインプットしながら、プログラミングでアウトプットをして技術開発を進めている日々です。 フロントエンドからバックエンドまで幅広い技術を扱っているため大変ですが、その分いろいろと知見は溜まってきており、商品開発に向けた準備が着々と進んでいます。
来年度は、技術開発フェーズを終えて、いよいよ商品開発フェーズへと移ります。 とりあえず、何事もなく穏便にリリースを成功させて、ユーザーに新機能を届けることが当面の目標です。
リリースが無事に成功すれば、B to Cサービスの醍醐味である、「自分が技術開発からガッツリ携わった新機能たちが数百万人の人に使ってもらえる」ということを経験できるため、 それを楽しみにしつつ引き続き目の前の業務を進めていければなーと思っています。