さいとブログ

2022年に触れた技術や学んだことなどを雑に振り返る

2022年に業務やプライベートで興味を持って、触れた技術の棚卸しします。  
ざっと学んだことを羅列すると、パブリッククラウドやIaCなどインフラよりのインプットとアウトプットが多かった一年でした。

  • コンピュータサイエンスの基礎
  • ネットワーク関連の基礎
  • AWS(主にECS,RDS,S3,CloudFrontなどの一般的なWeb構成)
    • 資格取得: SOA, DVA, SAP, DBS, SCS
  • TerraformでAWS環境の構築
    • ECS, CloudFront, S3, WAF, KinesisFirehoseを主に構築した
  • 監視について学ぶ
    • Datadogで外形監視・モニタリングやログのアラート閾値を決定するために
    • どういう考え方でどの項目を監視するか学ぶために読みました
  • Golang+gRPC
    • 業務で必要+個人的にGoでCLI自作したいため意欲的に学びました


それぞれ、もう少し振り返ってみます。

振り返り

コンピュータサイエンスの基礎

プログラムがどう解釈されてハードウェアで出力されるか、メモリとは何なのかというエンジニアとして  
基本的な部分が疎かになっていると感じたため、再学習しました。(基本情報を持っているがふんわりとしか理解していないため)  
主に以下3冊を中心に学びました。


型宣言によるメモリ上の占めるサイズや、配列によるメモリ確保の動きを脳内でイメージできるようになったため学んでよかったと思います。  
また、メモリアドレスについて理解したため、参照渡しや値渡しの仕組みの違いやGolangのpointerを学ぶ際に役に立ったかと思います。

swapが発生するとなぜパフォーマンス劣化が起きるかをHDDとメモリへのアクセス速度、I/O性能に差があるためと理解し、監視の仕組みを構築する際に役立ちました。

ネットワーク関連の基礎

後に、インフラ構築を担当するためにTCP/UDPとDNSについて知っておくことで、よく知らないから怖いという状況を脱するために以下の2冊を中心に知識を補填しました。


特にDNS本はdigコマンドでの名前解決方法など障害調査する際に使いそうなコマンドの実践方法が記載されており、勉強になりました。  
また、DNSレコードについてそれぞれの意味を理解し、Route53でドメイン設定する際に役立ちました。

AWS + Terraformのキャッチアップ

モチベーション

  • Terraformでのインフラ構築を担当してTerraformよりもAWS自体の理解が浅いことを自覚したため
  • 自信を持って設計構築の意図を説明するスキルが欲しかった(記事に書いてあるからやりましたレベルを脱するため)
  • インフラ構築するからにはちゃんとしたものを作りたいため


得られたもの

  • ドキュメントを読むための前提知識が手に入ったこと(AWSのドキュメントが自分にとっては理解しづらいため大きな収穫でした)
  • AWSが怖くなくなった(ドキュメント読めば何とかなるんじゃないと思えるようになった)
  • クラウド破産に遭遇しないためのアカウント保護や検証終わったらterraform destroyすればいいという安心感が得られた
  • 資格取得を社内チャットに書き込んでいたら、社内でAWSに詳しい人というブランディングができた(度々相談が来るようになった)


利用したAWSサービスをよく理解することができたのは、Terraform + AWS CLI(プロジェクトの縛り)で構築から検証まで行う必要があり、自分は一切マネジメントコンソールにログインできない環境だったのも要因としてあるかと思っています。  
中々、ハードでしたがTerraformのドキュメントがわかりやすいのとAWS CLIで出力された項目を理解するために必死にAWSのドキュメント漁ったおかげでより一層理解が深まったと思います。

監視について

モチベーション

  • 業務でDatadogを利用してモニタリングやアラートの環境を作るために必要な考え方や目的、優先順位を一通り知っておきたいため


得られたもの

  • 死活監視が最重要であるという考えを得られた!!
    • ログのERRORや外形監視での500系のステータスが返った場合にアラートを出すなど
  • 異常なメトリクスが取れた場合でも正常レスポンスかつレスポンスタイムが想定内なら、それはアラートに出さなくても良いという考え方
  • developerとして安定稼働の意識が高まった


Golang + gRPC

モチベーション

  • プロジェクトで使うため必要となった
  • Goについては、いつか学習したいと思っており、意欲的だった
  • cliやweb開発など活躍の範囲が広いことや主にcli作って色々遊びたかった
    • フレームワークに頼らないことやポインタがあることでphp+laravelから入った自分にとってプログラマとして成長させてくれる言語だと思ったため


所感
公式によるフォーマッター、リンターが提供されていること(gofmt,gopls)やgomockやtestingライブラリによるテスト周りのライブラリも充実しており、開発のみならず開発環境やプログラムの質を担保するための必要な要素が詰まった言語だと感じた。  
シングルバイナリをサポートしているためdockerイメージの軽量化をしやすいのも好きなところでした。
また、人気のある言語だからか各種SDKでのサポートが充実している気がします。

gRPCについてはフロント<->サーバー間の通信で採用しており、理解していることとしては4つの通信形式というかストリーミング方法が確立されている。  
スキーマ駆動で開発できる+スキーマからコード生成できて初動が早くなるくらいの認識しかできていません。  
これがマイクロサービス間の通信でよく使われて、どういうメリットがあるのかいまいち理解できていないです。(機会ができたら学習します)

2023年は何をやるか?

まず、2022年はインプットが多めでGitHubの草生やす活動が少なかったのでなるべく手を動かすことを意識したいです。  
上記を踏まえた上で仕事で必要なことを吸収するプラス

  • 英語学習
  • アルゴリズム + atcoder
  • 定期的な技術アウトプット(Zennなど)


あたりに取り組んでいこうかと思います。

英語については、一次情報を素早く吸収するために必要だと感じるのと最近翻訳するのが煩わしくなってきたため日本語レベルに直感的に理解できるようになれればいいなと思ってます(多分ムリ)  
アルゴリズムについては、開発者として有事に計算量を意識したアルゴリズムを考える力がほしいのと考察力を強化して課題解決能力の向上に繋げたいと考えるためです。

最後に

年越してしまったけど、振り返ってみるとサーバーサイドよりもSREに近いことをやり始めたように感じた。  
おかげでリリース後の運用を意識して開発する意識が高まりました。  
また、社内でAWSに詳しい人というポジションを確立できて、メンバーのサポートできるようになったのも取り組んでみてよかったなと感じました。

プロフィール

profile icon

saitoです。
ソフトウェアエンジニアとして働いています。
web開発に関する学びを当ブログに書き残しています。