見出し画像

2020年の振り返り

もうすでに新年に入って10日以上立ってしまっているが、せっかく書いてあるので昨年の振り返りを投稿しておこうかと思う。

自学・趣味などでやったこと

1. 英語の勉強

学生時代から英語は大の苦手で、苦手意識もあり勉強せずにほったらかしていた。(TOEICを受験中、どんどん体調が悪化していくぐらいには苦手意識があった。。)

とはいえ、流石に英語ができないとまずいなぁとずっと思ってはいたので、テレワークなって時間ができたのを機に英語の勉強を始めた。

下記の本を買ってしっかり基礎からやろうと決断し、少しづつ進めていた。しかし、昨年は途中から忙しくなってできない事が増えてしまい、半分もできなかった。。

それでも、勉強前よりは英語が読めるようになったので確実に成果は出ているなぁと感じている。
今年こそはやりきりたい。

2. Webアプリの作成

下記構成でGoogleカレンダー風のWebアプリを作ってみた。

・バックエンド:Go言語&コンテナ
・フロントエンド:Vue.js

この開発では、ログやエラー設計、アーキテクチャの勉強を兼ねて色々盛り込んで作ってみた。

以前にも色々作ってはいるが、クリーンアーキテクチャ寄りで設計したために、また新たな気づきがあった。例えば、プログラミング言語の思想とアーキテクチャ設計の思想が衝突した際にどのようにすべきかなど。
具体的には下記など。

・ エラーの粒度は?ラップするべき?
・ 出力はどこのレイヤーで担う?
・ 拡張性担保のためにどこまで抽象化する?などなど

作ってみて設計の反省点などが多々出ているので、再度それを生かして別のアプリを作ってみたいと考えている。

ちなみに、このアプリを作った際に考えたことなどは下記にまとめている。

3. 各種技術要素の勉強

下記技術について主に勉強した。ただ、まだまだ実践で活用しきれておらず、身になっていないことが多すぎるので、継続的に勉強・実践していきたい。

・ TypeScript
・ CI/CD
・ 監視について
・ ログ設計について
・ レイヤードアーキテクチャについて


お仕事の振り返り

昨年は、とにかく色々なチームの支援に入ることが多かった。それも、特に年の後半は、短納期で自分に話が来たときにはあまり余裕がない状況ばかりだった。。
それでも、可能な限り力を尽くしなんとかしてきた。
昨年は色々新たなことをやりつつもせわしなかったなぁ。

1. チャットボットシステムの開発

Amazon Lexを用いたチャットボットシステムの開発を行った。

チャットボットの処理部はLambdaやAPIGWを用いており、初めてサーバレスなシステムを1から設計し構築することになった。

各サービスの連携は非同期が基本なため、エラーや遅延を考慮してシステムを作るのに苦労したのを覚えている。

2. ClientVPNを用いたテレワーク環境の構築

コロナ禍になったために急遽テレワーク環境の構築を依頼され、すぐさま作ることになった。

スピード重視なこともあり、ClientVPNを用いてサクッと作った。
開始から2週間たたずに利用可能な状態にできて、SaaSって便利だなぁと改めて感じた。

3. 監視などが全く無かったシステムの改修支援

試験環境と言っても過言ではないほど、とにかくアプリが動けばいいやみたいな環境を渡されて、「本番公開が近くてどうしていいかわからないからなんとかして!」と言われて唖然としたのを覚えている。

監視なし、権限管理なし、バックアップなし、etc.. な環境だったので、問題があった際にどうするつもりだったのだろうと首を傾げた思い出が。。

Well Architectedや今までの知見を元に、とにかくセキュリティ関連や監視、バックアップ、ログの有効化などを優先的に追加し、本番運用に耐えられる形にまで構築し直した。

4. IAMユーザ管理の自動化

とあるAWSアカウントのIAMユーザの管理がほとんど手作業だったため、毎度管理作業のたびに結構めんどくさいかつ間違えやすかった。

そのため、管理の自動化のための仕組みを設計し構築した。ユーザの情報はファイルで管理していたのでGitOpsのCI/CDをベースとした自動化システムにした。

これにより手作業はほとんどなくなり、なおかつ更新のミスなどがなくなりとても快適になった。

5. システムのマルチアカウントでの再設計

TransitGatewayなどが東京リージョンで使えるようになったことなどをきっかけに、単一アカウントで実現していたシステムをマルチアカウントで再構築したいという話が上がり、その支援に入った。

アカウント間の接続はTransitGatewayを用いて、オンプレとの接続にDirectConnectを用いる構成を設計した。のちにアカウントが増えることが確定だったため、拡張性を可能な限り保持したまま設計するのに苦労した。

6. ECS・EKSを用いたシステム構築

昨年はコンテナ関連のAWSの設計だけで4件も支援することになった。
主に、コンテナでシステム作っているので動く環境の設計・構築をお願いしたいといった話が多く来ていた。
しかし、コンテナの利点やその際のベストプラクティス、注意点などを全く考慮せずにアプリを作ってしまっているチームが多く、その問題点を説明するところから始まることが多かった。。
ただ、説明の甲斐も虚しく、ほとんどのチームが時間がないからと言って改修しない選択を取っていたのが悲しかった。(なんのためにコンテナにしたのだろう。。と常に思っていた)

一番ひどかったのが、セッション情報を外部に出していない問題。このおかげでALBでセッションを保持しなければならなくなり、設計がとてもいびつなものになった。。
何度も下記問題点を説明したのだが、全くアプリ側を改修してくれなかった。。

問題点
・ オートスケーリングしても既存のコンテナに通信が集中する
・ アップデート時や一部コンテナが死んだ際にセッションは破棄される
・ などなど、、

この件は特に、本番公開まで時間がない状態で支援に呼ばれたのだが、その時点で上記も含めインフラ側が全く設計されていない状態であり、唖然としたのを覚えている。。

なんとか間に合わせるために、残業マシマシの無茶苦茶なスケジュールでやりきることになった。(完成後に体調を崩し、もう二度とあんなスケジュールで仕事しないと心に誓った。。)

もし、この文章を見ている方で、システム作ろうかなと思っている方がいれば、ぜひ各技術要素のベストプラクティスなどを調べておいてほしい。後でなんとかするのはとても大変なので、例えばコンテナならコンテナのお作法に従うことを意識してもらいたい。。


おわりに

昨年はコロナの影響もあり、当初の予定通りにはいかないことが多かったが、それでも多くのことを経験し学べたと感じている。

今年も新たなことに挑戦しつつよりできることを増やしていきたいなと思う。

この記事が気に入ったらサポートをしてみませんか?