2021年のふりかえり
2021年は2020年と比べて失敗経験を積めた年だった。 2020年は新しい環境で、今までにない経験を積むことができたのに比べて、2021年は今までの取り組みをより良くするために試行錯誤してきた。結果、上手くいったものもあれば、上手くいかないものもあった。 残念ながら課題の多い1年だったけど、これを糧に2022年をより良い1年にしたい。
できたこと
成果のアウトプット
アウトプットは一定の成果を出せたが満足行くものではなかった。及第点という感じか。
- 登壇: 1件
- 個人ブログ: 11件
- Qiita+Zenn: 5件
- 会社ブログ: 1件
一番よかったのは目標であったカンファレンスでの発表を実践できたこと。カンファレンスでの発表はエンジニアキャリアの中でも目標の1つだったので、ひとまずそれが達成できたのがよかった。 とはいえ、久しぶりのプレゼンで話をするのが下手になっていたので、発表には満足できておらずそれは残念だった。 もう少し気軽に5分LTから経験してと考えていただけに、いきなり&久しぶり&初の社外向けの発表で15分はやり過ぎだったか。15分くらいは大したことないと思っていたので、今後どのように発表していくかは考えどころ。
OSSへのコントリビュートも、実装レベルでプルリクを作成することはできなかったが、不具合のissue報告などは取組むことはできた。 しかし件数がたった2件と圧倒的に足りていない。もちろん数の問題ではないが、普段利用しているOSSの数や利用量から考えるとコントリビュートするという目標に対して少ない。 github actionを作成・公開することはできたが、それも1件かつ作成後ほとんどメンテできていない。
メインとなるはずのブログやQiita/Zennなどの記事執筆も量的には満足できないものだった。 2021年前半はある程度順調にアウトプットできていたと思うが、後半には社外へのアウトプットが途絶えてしまった。 社内でのアウトプットは継続できており、社内Qiita、GitHub Wiki、Google Docsとさまざまな形で実施できていた。 業務で得た知見はすべてが社外に公開できないものではないので、これを社外に公開できないのは反省点。 個人での学びも2021年後半は減りはしたものの止まったわけではなかったのでもっとアウトプットに時間を割くべきだった。
CI/CDの強化
CI/CDはいろいろと取り組むことができたのでよかった。
- GitHub Actionの作成と公開
- コンテナアプリのCI/CD環境としてGitHub Actions (CIサービス)の利用
- lambda関数のCD活用
- railsアプリのCodePipeline適用
- インフラまわりのCI/CD活用(ansible-lint, Terraform Cloud活用, ImageBuilder活用)
CI/CDサービスとしてはGitHub ActionsやAWS Codeシリーズなどを本格的に活用できるようになった。 対象アプリとしても、コンテナアプリ、lambda関数アプリ、その他のアプリ、インフラと幅広く扱うことができた。 社内のCI/CDインフラもだいぶ改善したし自分の知見もいろいろと蓄積することができた。
もちろん課題も多くある。 1つは、CircleCIまわりのメンテ・サポートがほとんどできなかった。 Webエンジニア側にまかせてもいいかと判断した点はあったけど、せっかくCI/CDに注力するとしていたのだからもう少し手を出してもよかった。 2つ目がDevSecOpsの導入で、具体的にはSonarCloudを検証・導入したが、残念ながらあまり上手くいっているとは言えない。 このあたりは導入モチベーションをきちんと共有できないことが失敗の原因だった。どちらかというとマネジメントの問題。 最後にインフラまわりのCI/CD。Terraform Cloudの活用がどんどん進んだことはよかったが、 ansibleはlint止まりでテストは導入できず、terraformもtrivyを検証まで行ったが導入までいかなかった。 AWS Image Builderもなんとか動作するようにはなったがまだまだ課題が多い。
運用・監視の深化
運用監視はまだまだ課題はありつつも、大きく進歩した1年だった。
具体的にはWebエンジニアを巻き込んだダッシュボードのふりかえり定例会議が開催されるようになった。 ここでの確認を通してダッシュボードや監視の仕組みの継続的な改善が行われるようになった。 これを通してダッシュボードの修正や監視メトリクスの追加・修正なども行われるようになった。 加えてWebアプリの修正にも反映されるようになったのでよかった。
一方で課題としては、SLI/SLOの導入失敗が挙げられる。 これはできなかったことにも挙げているがマネジメントの失敗で、十分にSLI/SLOのメリットや導入目的を共有しないまま進めてしまったことが失敗の原因にある。 そりゃSLI/SLOやエラーバジェットなんて知らない人の方が多いのだから、もっと導入意義を納得してもらってから進めるべきだった。
セキュリティ対策強化
苦手だと思ってあまり深追いしてこなかったセキュリティ分野は、必要に迫られる形でいろいろ取組むことができた。
Webアプリの脆弱性診断を主導することができたし、CIの中でセキュリティを意識し始めることができた。 DevSecOpsはtrivyを通してインフラに対しても適用検討することができた。 こういった取組みを開始して形として残り始めたのはよかった。
一方で、まだまだ対応については満足できていない。 本来は対応すべき内容を優先度の観点から保留しているケースもあり、 2022年はセキュリティ面でも安心できるようにしたい。
できなかったこと
マネジメント
正直なところ、2021年で一番失敗したと思うのがマネジメント、というよりリードエンジニアとしてエンジニア組織を引っ張るところ。 具体的には、エンジニア全体で取組むべきと自分が考えた事について十分に理解を得ずに進めようとした結果、空回りしてしまった。
やりたい理由・モチベーションを十分に共有してから進めるべきだった。 また、上手くいかない状況に焦ってより悪い振舞いをしてしまったのよくなかった。 モチベーション共有にはデザインドキュメントを採用してみたが、これも上手くいっているかは判断できない状況。 デザインドキュメントの導入自体も押し付けであるとも考えられるので、自分1人で試しているが上手く運用に乗せることができるかは2022年次第。 振舞いの改善はどうすればよいかはまだ悩み中。自分で気付いたときには振舞いを改めるようにしているが、大抵の場合は議論の最中には気付けない。
逆にタスクマネジメントについてはある程度上手くいったのでこちらは継続していきたい。
スケーラブルなインフラ
インフラのスケーラビリティについてもビジネス的な必要性がないことから対応できなかった。
自分たちでリソースを管理する必要のないマネージドなサービスを選択できている一方で、 リソース管理が必要な部分ではまだまだ無駄が生じている。 コストまわりはやっと課題として認識されてきたので、2022年こそは取組めるはず。 2021年にもいろいろと検討できているので、その検討結果をリリースまで取組みたい。
DB知見の深化
DBまわりも結局詳細な検討にまで取組めなかった。
RDBはパフォーマンスモニタリングまでは取組めたものの、改善には着手できなかった。 スロークエリやDB負荷については認識を共有できたと思うので、着実に改善に繋げていきたい。 また、Redisは未対応だしMongoDBまわりも結局置き換えてしまった (これはむしろ良い判断だった。ただし、MongoDBまわりを検証する機会は失った)。
DBまわりは今後も課題がたくさん残されているので、継続して取組みたい。 RDB負荷については負荷試験のための取組みを取組みたい。 Rails6の複数データベースまわりの知見は間違いなく必要になるのできちんと検証しておきたい。 Redisの対応は必要になるだろうがMongoDBは必要になるだろうか?その分Elasticsearchのような全文検索の仕組みは必要になりそう。 いろいろなデータレイク・DWHを試して知見を蓄積したい。
フロントエンド技術入門
結局フロントエンドまわりはほとんど取組むことができなかった。
できたのは node.jsでバックエンドを構築するくらいで全然フロントエンドではない。 Vue.jsやTypeScriptを学ばなければ、と思いつつも本当に触っただけに終わった。 Railsのアセットパイプラインについては学ぶことはできたが全然フロントエンドではない。
ここは自分の興味であるVRに範囲を絞って取組むべきだった。 それ以外のフロントエンドまで含めてしまうと自分の興味から外れてしまうので取組むモチベーションにならなかった。 もしくは、アプリケーションの実装という中でフロントエンドにも触れる、くらいを目指すべきだった。
クラウドネイティブな技術のキャッチアップ
これは元々目標ではなかったけれど。 年々業務に必要な知見にのみ注力してしまい、Kubernetesやその周辺知識のキャッチアップが疎かになってしまった。
AWSの新規プロダクトを通して知見を増やすことはよいが、もっと上流(と言えるかは不明だが)のOSSまわりや他社含めた動向にも目を通すべきだった。 CNCFもそうだが、USENIXなどの学会系も含めた最新技術の動向や、他社のアウトップトを通しての実践例を学び、 自社にない技術についても知見を深めていきたい。
2022年の抱負
2022は継続と完結をテーマにしたい。
一時的な興味だけに終わらず、継続して取組むことで目標達成まで到達すること、完結させることを大切にしたい。 調子の良いときに成果を出すのはもちろんだが、調子が悪いときに無理なく取組めるか、継続できるかを意識して頑張りたい。 やるべきこと、やらなくてよいことの取捨選択を行い、いつかやるで保留せずにやらない判断を下して物事を完結できるようにしたい。
個人成果の追求
良い意味でもっと自己中心的に、自分個人の取組みに注力していきたい。 組織をリードする点も止めるわけではないけど、それが理由で個人の成果を犠牲にはしないようにしたい。
組織のリードについては、会社組織が拡大してきたこともあり、自分が何でもリードする必要はなくなってきた。 言いたい事ややりたい事を少し我慢してでも、特に別チームの事はそのチームに任せ、 エンジニア全体として取組むべきでも合意を得ることが難しいようであれば諦めることも選択肢に入れたい。 エンジニア全体の改善よりは、多少局所最適になっても自分のことに注力したい。
また、業務にばかり時間を掛けずにもっと個人的な興味に時間を使いたい。 自分の興味や好みにリソースを割いて、自分が楽しむことを優先していきたい。
成果のアウトプット
2021年はもの足りなくても2020年よりは上手くいった。 2022年は2021年よりさらに意識して取組みたい。
カンファレンスでの発表ももっと増やしていきたい。発表するという目標から、自分が満足できる質で発表できることを目指したいし、発表回数も増やしていきたい。 OSSへのコントリビュートや自作OSSの公開などは特に注力したい。 できれば実装修正のプルリクを投げられるようにしたいが、そうでなくても不具合再現のためのissue起票などをできるようにしたい。 自分が利用しているOSSをしっかりと使い込んでいきたい。 ブログ記事等の執筆は2021年前半のペースでよいので継続していきたい。 どちらかと言うと、ブログ記事は内容にこだわって書けなくなるよりは、小ネタでも継続して書けるようにしたい。 その際はQiita/Zennなども活用してアウトプットしていきたい。
xR技術
せっかくVRの会社で働いているのだからxRの技術について理解を深めたい。 VRはもちろんだけど、個人的にはARにも興味はあるのでARにも取組みたい。
VR技術としては、three.jsなどのフロントエンド技術もそうだし、blenderやOpenCV、Unityなどを通して3DCGモデリングについても理解を深めたい。 またVR動画(というか360度動画)まわりにチャレンジしたい。正直なところ、動画まわりは配信技術としてインフラまわりに特に興味があるのでそのあたりも含めて検証したい。 できれば、Androidアプリなどを通してARにも挑戦したいし、いろんなデバイスについても試してみたい。
テスト
テストまわりの知見強化と実践に取り組んでいきたい。 2021年はCIという形でテストに触れてきたけど、よりテストにフォーカスしたい。
アプリケーションのテストとしては静的解析/動的解析やセキュリティおよびリファクタリングまわりも含めて取り組んでいきたい。 このあたりはインフラエンジニアとしてではなく、SETやQAなどのロールとしても動ける程に知見を深めていきたい。 また、その流れとしてシステムテストとその自動化まわりにも取り組んでいきたい。
アプリ以外にもインフラのテストについて取り組んでいきたい。 インフラのテストをどう実践するかはまだ具体化できていないが、2021年の課題に感じていたところなのでいろいろと実践していきたい。 IaC自体のテストはもちろんだが、システムテストにまでいかない、上手いテストのやり方を模索していきたい。
低レイヤ技術
業務ではOSに近い低レイヤ技術にあまり触れる機会がないので、個人的な形ででも取組んでいきたい。 HWに近いいわゆる低レイヤ技術だけでなく、オーケストレーションツールやGPUまわりなど、今より1つ低いレイヤに取組みたい。
Amazon Linux2022の検証という形でFedoraディストリビューションは試していきたいし、その他ディストリビューションやlinux kernelレベルの知見を深めていきたい。 途中で止まっている自作OSの取組みもできれば再開していきたい。 自宅サーバの運用もほとんど動きが止まってしまったのでアップデートしていきたい。 xR技術に取組む中でGPUやIoTデバイスなどをいろいろ扱っていきたい。