出力を入力へ

プログラミングに関する自分が考えた事を中心にまとめます

2020年のふりかえりと2021年の抱負

2020年のふりかえり

2020年は転職して(転職自体は2019年だけど)さまざまな経験を積めた1年だった。 コロナ過によるフルリモート体制への移行やこれに伴う開発・コミュニケーション方法の試行錯誤など なかなか上手くいかない点も多かったけど、それも含めていろいろな学びがあった。

コロナ過による生活の大きな変化のあるなかで、 運動機会が減ったこと、そもそも外出が減ったことは健康面であまりよろしくなかった。 まだコロナが終息する気配はないので、できることは限られているけれど できる範囲で改善していきたい。

できたこと

本番サービスの構築・運用

転職の主目的であった本番サービスの構築と運用に深く携われることは非常によかった。 特にスタートアップにありがちと言われている事業の拡大と開発の混乱を経験できたことは 今後の技術者としてのキャリアでも大きく活かしていくことができそう。

運用上必要だけど価値を生まないトイルな作業もまだまだたくさんあって、 トイルの撲滅はまだまだ道半ばであまり抜本的な改善にまで着手できなかったことは反省点。

ログ・リソースの可視化

インフラの改善の中で一番インパクトが大きかったのがログやサーバリソースの可視化。 従来はログ基盤が整備されておらずログの可視化が上手くできていなかったので、この改善が急務だった。 railsアプリケーションログの出力を構造化(json化)し、ログ分析基盤への投入・可視化を実現することで 開発者のだれもが簡単にログを参照できるようになったのはインパクトのある改善だった。

まだまだ十分なログ出力できないケースやログの監視が十分ではないので 2021年も引き続き取組まなくてはいけないけれど、 はじめの1歩としては大きな効果を上げることができた。

IaCの実践

terraformやansibleを用いた Infrastructure as Codeの実践も インフラの開発・管理の面では大きな効果があった。 従来の最新にアップデートされていないインフラの構築手順書を破棄し、 コードだけでインフラが構築できるようになったのはインフラの品質面でも管理面でも大きな効果があった。

一方でansibleやterraformを利用できる人が少なく、インフラ構築作業の属人化が進んでしまったので チームのインフラ技術力の強化という意味でも、だれでもansibleやterraformを触れるように推進して行きたい。

コンテナの導入

新規開発したサービスのインフラにDockerおよびECSを導入することができた。 継続的な改善が必要であること、どれだけ利用されるかわからないこと、 研究チームの成果なのでインフラを意識せずにリリースできるようにしたいといった要件から オートスケールなECS基盤を採用して構築・リリースした。 これらの取組みは非常によかったと思う。

転職前からDockerは積極的に利用していたのでその知見が活かせて技術展開に取組めたことはよかった。 一方でECSのオートスケールについてはもう少し改善したいし、 メインのwebアプリへのコンテナ技術の導入はこれからなので、まだまだ課題は残る。 引き続きコンテナ化やコンテナ技術の共有は進めていきたい。

インフラのセキュア化

地味だしあまり成果を外部に出せない部分ではあるけれど インフラのセキュリティ向上に向けた取組みも、内部的には大きな意味を持つ内容ではあった。 初めてインフラの構成を見たときにはびっくりするような状態だったけど もうそろそろ外に公開しても恥かしくない構成になったのかなとは思う。

セキュリティは今まで積極的に取り組んだことはなかったので、なんとなくの理解の分野が多かったけど、 実際にシステムをセキュアにするために取組むことで、改めて学び直すことも多かった。

OKRやアジャイルへの取組み

技術面ではないけれど、会社としてOKRやアジャイル開発の取組みを本格化した1年であり、 これを踏まえていろいろと勉強した1年だった。 特にOKRは自分としても初めての取組みで、いろいろ勉強しながらではあった。 その甲斐あって、一部メンバのみではあるけれどツールの導入や振り返りを実践するようになり、 社内でのOKRの理解推進に一役買うことができたかなと思う。

自分が1人インフラチームで開発に取り組んでいて アジャイル開発の観点からは課題が多かったり、1on1などは上手く実践できていないなどの課題もあるので もう少し自分たちにあったやり方を模索していきたい。

できなかったこと

成果のアウトプット

一番心残りなのが成果を社外にアウトプットできなかったこと。 これはセキュリティ面の取組みのように、社外に公開しにくい内容も多かったので 単純にアウトプットに適さなかったという面もあるけれど、 日々の開発に追われてアウトプットをサボってしまったという面も強い。

社内への知見共有として、社内記事としてのアウトプットはなんとか確保できたけれど もう少し社外へのアウトプットも取組みたかった。 なんとか会社のテックブログも始まったけど、あまり他の人はアウトプットに積極的ではなく 上手く運用できるか難しいので、少なくとも個人レベルでは社外アウトプットを強化したい。

VRの知見の深化

せっかくVR技術という面白い分野を扱っているのにもかかわらず、 このあたりの技術の理解を進めることができなかった。

もちろん、VR技術にもいろいろあって、自分たちが扱うVR技術はそのほんの一部でしかないのだけれど 自分たちが扱うVRにも、その周辺技術にも、世の中のトレンドとしてのVR技術にも ほとんど触れる機会がなかった。 インフラとの間で上手く抽象化されてアプリケーションを考慮する必要がないといえばその通りだけれど、 やはり自分たちが扱う技術くらいはきちんと把握しておきたい。

機械学習

機械学習を用いた画像処理なんかは、まさに自分が学生のときに取り組んでいたテーマであり、 さらには機械学習を用いたシステムの構築の機会があったにもかかわらず その理論や実装をほとんど深掘りすることができなかった。 また、MLOpsといった自分にぴったりなテーマもあるにもかかわらず これらを実践することができなかった。

今後機械学習システムの運用は対応が必須になってくるし、 研究チームとのやりとりも、むしろwebチームより頻度高く行っているくらいなので、 ぜひともこのあたりの知見は強化していきたい。

論文

学会レベルでの最新技術動向の収集も大きく遅れてしまった。 論文を読むどころか学会誌すら確認できておらず、学会のスケジュール把握もままならない状況。 コロナ過で無料でカンファレンスを公開しているケースも多かったみたいだけれど、それらを活かすことなくスルーしてしまった。

転職前から投稿はできていなかったので、論文投稿まで行うことは想定していなかったけど せっかく研究出身なので、自分の扱う分野くらいは動向ウォッチしていきたい。

競技プログラミング

これは業務で扱う技術ではないけれど、 趣味としての競技プログラミングもあまり時間を割いて取組むことができなかった。 年末に半年ぶりの復帰をしたのはいいけれど、当然普段の精進も行っていなかったので レートは落ちる一方だった。

世の中のレベルの上昇もあるので最高レート更新は難しいかもだけど、 なんとか現状のレートを維持したかった。

2021年の抱負

2020年にできなかったことをやるのはもちろん。 それに加え、2020年は目の前のタスクに追われていたので、 2021年は計画的・戦略的にやることを進めていきたい。

抱負としては盛り沢山の欲張りセットになったけど 今年もいろいろと取り組んでいきたい。

成果のアウトプット

まずは2020年にできなかった・一番の心残りであった成果のアウトプットについて取り組んでいきたい。 具体的にはブログ記事(またQiita/Zenn記事)の執筆、OSSへのコントリビュート、カンファレンス発表に取組みたい。 特にブログ記事を中心に、日々取り組んだことをアウトプットしたい。

また2021年は2020年に取り組んだ内容の深化・高度化を図っていきたい。 その中でOSSの積極的な活用を通してコントリビュートしたり、 ユーザカンファレンス等で取組みをアウトプットできるようにしたい。

運用・監視の深化

社内唯一のインフラエンジニアとして、SREの取組みをしている身として、 運用は自分がメインで取り組んでいる内容なのでここをしっかりと頑張りたい。 2020年に自分のシステム運用の取組みが始まったばかりなので、この高度化に取り組んでいきたい。 障害まわりの対応はもちろん、リソースの監視や脆弱性まわりの対応など、 やることはいろいろとあるけれど、1つ1つ深掘りしていきたい。

一方で1人で運用するのは限界があるので 自分がボトルネックにならないよう、燃え尽きないようにできる範囲で頑張りたい。 インフラの構築まわりも当然に求められるので、 開発の遅れにならないよう、なんでも抱え込まないように気をつけたい。

DB知見の深化

運用・監視を行う上で対象の知見が一番不足しているのがDBであり DBの知見を特に深めていきたい。 DBとしてはRDBMSにMySQL、NoSQLにRedisとMongoDBを利用しているので どれも欠けることなく知見を蓄積していく必要がある。

MySQLはパフォーマンスの問題が発生しているので SQLを中心としたパフォーマンスチューニングできるように知見を蓄積したい。 Redisはシステムがレガシー化しつつあるので、 最新バージョンへの追従に向けた知見を蓄積したい。 MongoDBは機械学習などで活用が見えているので、 新しいシステムを構築するために必要な知見や、機械学習とどのように使っていくか、知見を深めていきたい。

スケーラブルなインフラ

ユーザビリティの向上やコスト最適化に向けてスケーラブルなインフラを実現したい。 オートスケールはECSまわりの新しいシステムでしか実現できていないので、 既存のシステムにおけるオートスケールも実現したい。

これを実現するためにはメインのwebアプリもコンテナ化したり、 そもそもオートスケールを実現するために監視の仕組みを構築しないといけない。 これが単にリソースの利用状況を見るだけでなく、 アプリの仕様を踏まえた監視の仕組みを作り込む必要がある。 redisまわりの仕組みもきちんと理解する必要があるので 監視やDBの知見深化と合わせて取り組んでいく。

CI/CDの強化

CI/CDは転職前は自分の好きな技術領域としていろいろ取り組んでいたはずが 現職ではなぜか技術を発揮することなく放置されている残念なところとなっている。 特にCDまわりの仕組みは自社の弱いところなので、このあたりを整備していきたい。

メインで利用しているCircleCIに加え、 利用を開始したGitHub Actionsや今後利用を想定するCodeBuildといった 各種CIサービスについての知見を蓄積することも必要。 それ以上にCIを上手く活用するために各種静的解析の導入やCIの高速化、 およびCDとしてのリリースの高度化のための知識を取り入れていきたい。 インフラのCIなんかもできていないのでやりたいところ。

マネジメント

OKRや1on1およびアジャイルなど 仕組みについては広く公開されているものの、組織によって適切なやり方が異なるものについて どうすればの適切な方法になるか取組みを模索していく必要がある。 特にリードエンジニアの立場として、自分の作業を効率化するだけでなく 組織自体の強化と組織全体の効率化ができるよう 若手を引っ張って・盛り上げていきたい。

正直なところ、ピープルマネジメントは苦手な分野ではあるけれど そういった苦手な面も積極的に取組みたい。

フロントエンド技術入門

ここまで挙げてきたテーマは自分の得意分野を伸ばす取組みだけど 苦手な分野の強化としてフロントエンドまわりの基礎を身に付けたい。 自社で採用しているVue.jsの知見を深めるのはもちろん、 TypeScriptやNext.jsのような新しい技術についても、 少なくとも世の中の流れが把握できる程度には理解を深めていきたい。

また、VRにおけるフロントエンドは面白い分野だと思うので 自分が新しい取組みを行うまではいかなくても、会社の取組みに取り残されないようにしたい。