マネーフォワード新卒エンジニア(SRE)の6ヶ月の振り返り
はじめに
自己紹介
はじめまして!2024年4月にマネーフォワードにエンジニアとして入社した、24卒の88888888_kotaです。
現在は、Site Reliability Engineer (SRE) として働いています。入社して半年が経過しましたので、本稿ではその振り返りを行いたいと思います。
入社理由などについて興味のある方は、入社エントリも書きましたので、ご覧になって下さい。
想定読者
想定読者は次のとおりです。興味のあるセクションを読んでいただければと思います。
- SREに興味のある方
- エンジニア1年目の心構えを知りたい方
- 英語環境での開発に興味のある方
キャリア戦略
自分は最初のポジションとしてSREを選んだわけですが、この選択は少数派かなと思います。この選択をした背景には色々と自分なりの理由(戦略)があるのでそれを言語化しておきます。
スキルの偏り
学生時代、バックエンドエンジニアとして多くのインターンに参加していました。しかし、次第にバックエンド開発に対して退屈さを感じ始めるようになり、このまま続けていくと自身の成長が限られるのではないかと考えるようになりました。
具体的には、大学卒業時点でGoを使ったバックエンド開発の知識に偏っており、このままバックエンドのポジションに就いた場合、KubernetesやAWSといったインフラ周りの知識を得る機会がほとんどないと懸念していました。特に、社員数が数千人規模の企業では、バックエンドとインフラの責務が明確に分かれていることが多いためです。
シニアやスタッフレベル以上のエンジニアとして活躍するには、インフラの経験が不可欠であり、今がその経験を積む絶好のタイミングだと思いました。
ライバルの少なさ
インフラ寄りのポジションはバックエンドに比べて競争が少なく、特に若手には多くのチャンスがあると感じました。
これらの理由だと、SREである必要はないのですが、新卒を募集しているチームの中で戦略にマッチしているのがSREチームだったので、そこに配属希望を出し、今に至ります。
なので、初めからSREを狙っていたわけではありません。
仕事内容
次に、この半年間何をしていたのかを紹介します。SREの仕事に興味のある方は読んでいただけるといいかと思います。
自分のチームについて
自分のチームは、主に、toB 向けプロダクトの可用性や信頼性を担保するためのチームです。
- マネーフォワード クラウド会計
- マネーフォワード クラウド確定申告
- マネーフォワード クラウド請求書
あたりが守備範囲になります。また、それぞれがマイクロサービスとして構築されているので、10個以上のサービスを担当していることになります。
Kubernetes Custom Controllerの開発
詳細
概要
- オンプレミス環境に構築しているKubernetesからAWSリソースに安全にアクセスするための認証情報管理を改善しました。具体的には、EKS Pod IdentityとIAM Roles Anywhereを組み合わせて、セキュアな認証情報の提供を実現しました。
期間
- 2024年5月〜8月
内容
- 開発全般を1人で担当しました。
- Proof of Conceptの段階では、まずミニマムな実装を行い、達成したいことが実現できるか、どのように実現するかの検証を行いました。この過程では、必要なコンポーネントをkubebuilderを用いて自前で実装しました。その後、検証結果を基にチーム内で議論を行い、実装の改善や追加のテストをしたうえで、本番環境へ導入しました。その際、コンポーネントを自前で実装するのをやめ、EKS Pod Identityをフォークし、必要に応じてカスタマイズを行うことでクオリティを上げました。
苦労したポイント
-
aws-sdk-go-v2 や EKS Pod Identityのソースコードリーディングに苦労しました。
- ただ、aws-sdk-go-v2は大部分がSmithyによって自動生成されており、パターンを掴めば、理解に苦しまないと思います。
- EKS Pod Identityについては、KubernetesのAdmission Controllerがどのように動作するのかを理解することが、ソースコードを深く読み込む助けになりました。
技術
- ArgoCD, AWS, Docker, GitHub Actions, Go, Kubernetes, Terraform
余談
余談ですが、配属前にどういったタスクをしたいかをメンターと1on1をしたのですが、その際、自分のキャリア指向にあったタスクを振ってくれたのが印象に残っています。
- メンター:「どういうキャリアを描いているの?」
- 自分:「守備範囲をバックエンド→インフラに寄せていきたいですね〜。技術で言うとKubernetes、AWSを触りたいです。あとは、技術を突き詰めたいです!」
- メンター:「じゃあ、このあたりのタスクがいいんじゃない?」
みたいな感じです。そのようにして決まった、社会人最初の「仕事」が、Kubernetes Custom Controllerの開発でした。
オンプレKubernetes→EKSの移行
詳細
概要
- とあるサービスのオンプレKubernetes→EKSの移行
期間
- 2024年9月〜11月
内容
- プロジェクトメンバーの一員としてさまざまなタスクを行いました。
- GitHub ActionsやCircleCIを用いたパイプラインの構築や、依存するマイクロサービス間のネットワークテスト、さらには、モニタリングの改善などを行いました。
苦労したポイント
- サービスの依存関係の洗い出しに苦労しました。
- アーキテクチャ図はあるものの、ところどころ不備があったので、開発者に対してヒアリングを行うという泥臭い解決策を取り、乗り切りました。
- 海外拠点との共同プロジェクトであり、ステークホルダーとのコミュニケーション負荷が高かったです。
- この辺りは慣れだと思っているので、次はもっと上手くできると楽観的に考えています。
技術
- ArgoCD, AWS, CircleCI, Datadog, GitHub Actions, Kubernetes, Ruby, Terraform
割り込みタスク
詳細
概要
- 上記プロジェクト以外に、日々の割り込みタスク(自分のチームのPRレビュー・他チームからの依頼処理などなど)があります。
- 当番制なので、担当の人は、割り込みタスクを優先的に処理します。
期間
- 2024年5月〜11月
内容
- 割り込みタスクの優先的な処理
苦労したポイント
- ありとあらゆるリクエストが飛んでくるのですが、すぐに答えられないので、自分の技術力の無さに無力感を覚えました。
- その時は、チームメンバーに聞くことで乗り切っています。
技術
- ArgoCD, AWS, CircleCI, Datadog, Docker, GitHub Actions, Go, Kafka, Kubernetes, Linux, MySQL, Ruby, Terraform
やってよかったこと
マインドセットを矯正しよう
何よりもまず、自分のマインドセットを見直し、矯正することが成長の第一歩です。技術の習得はその後で構いません。正しいマインドセットがあれば、成長のスピードが飛躍的に向上します。
ここでは、マインドセットの矯正に役立つ、おすすめの本を紹介しておきます。
オレオレベストプラクティスを作り、育てよう
業務でよく出くわすシチュエーションに対して、自分なりのベストプラクティス(ルーティン)を用意しておくとよいです。そうすることで、大事な部分にリソースを割けます。そして、それを日々改善していくことも重要です。毎日1%の改善を1年間続けると、効果は38倍になります。
意図的に英語を話す機会を増やそう
これは英語環境で働いている人で、英語力を伸ばしたい方向けの内容ですが、積極的に打席に立つことをおすすめします。1on1やMTGのファシリテートなどを進んで行うとよいかと思います。
積極的に意見を言おう
自分のチームやエンジニア組織全体に対する質問や、改善点、違和感があればためらわず言うべきです。新人であるが故に気付けることも多いです。
生産性オタクになろう
毎日使うツールの設定にはこだわった方がよいと思います。便利ツールがあれば積極的に取り入れ、さらに、便利ツールに対するアンテナを常に張っておくとよいと思います。
おすすめ生産性爆上げツール10選
本を読もう
読書は、コスパよく成長できる数少ない手段です。僕の場合、月1冊は読むようにしています。
仕事をキープしない
Slack返信、PRレビューなど、自分のターンで仕事をできるだけ止めないようにするほうがよいと考えています。即レスを意識。できない場合は、「あとで見ます〜」と言っておく。それか、別の人に仕事を振るといい気がします。
適度な休憩を取ろう
エンジニアは想像以上に休憩していないです。ずっと座っています。1時間に1回はトイレに行ったり水を飲んだり、場所を変えるなどしてリフレッシュすることを心がけるとよいです。
やればよかったこと
積極的に1on1をお願いしよう
成長の機会を最大化するために、メンター以外の方とも1on1の場を積極的に設けるべきです。チーム内での1on1はもちろん、他部署の人と話すことで、より広い視点や新たな気づきを得られる可能性があります。この場を活用して、自分自身に対するフィードバックや、チーム全体の課題点についての意見を求めることで、業務やスキルの改善につなげられます。
チームや部署のゴールを理解しよう
自分のタスクをする前にまず、チームや部署のゴールを理解すべきです。そして、自分の役割を明確にし、したい仕事よりもすべき仕事、価値の高い仕事に集中すると質の高いアウトプットを出せます。
初歩的な質問でもサッと聞きましょう
15分と言わず、数分調べて欲しい情報が見つからなければ、質問したほうがよいです。そして、回答を待っている間は、別のタスクをしましょう。
やらなくてよかったこと
他人の過大評価・自身の過小評価
まず、大前提として人のパフォーマンスは環境や体調によって上下します。他人のMax値だけを見て自分と比較すると、辛いです。
重要なのは安定して高パフォーマンスを出すことです。例えば、常に80%のパフォーマンスを維持できれば、自分より優秀な他のエンジニアB、Cよりも良いアウトプットを出せます。
業務に関係のない技術の勉強
業務に直接関係しない技術を学ぶことは、趣味や自己満足としては良いかもしれませんが、業務で成果を上げるためには必ずしも必要ではありません。
業務に関連する技術やスキルを優先して勉強することが、最も効果的な成長につながります。
英語環境で働いた感想
半年間、英語のみの環境で働いてきましたが、ようやく慣れてきたと感じています。最初の3か月間はリスニングもスピーキングも満足にできず、正直なところとても辛かったです。しかし、時間が経つにつれて次第に適応できるようになりました。
客観的な指標としては、PROGOSのスコアがA2からB1 Highに上がりました。どのように慣れたかという点については、とにかく実践の場に立ち続けたことが大きかったと思います。使い続ければ自然と慣れるものだと実感しました。
英語学習に関しては、まだ試行錯誤の段階であり、ベストプラクティスを見つけられてはいません。ただし、効果を実感した学習方法については、いずれ改めて紹介したいと思います。
今後の目標
Tech
信頼性の高いサービスを提供すると共に、開発者体験の向上、開発生産性の向上に取り組みます。具体的には、CI/CDの高速化、SLI/SLOの導入、モニタリングの改善、それらの設定で標準化できる部分は標準化を進めます。また、SREの普及にも一役買います。
English
配属から6ヶ月経ち、だいぶ英語に慣れました。ただ、まだまだ瞬発力(戦闘思考力)が低いので、英語を使う機会を意図的に増やしていきます(1on1やMTGのファシリテートなど)。
Discussion