tomoriのブログ

tomoriのブログ

自由気ままに日記をつけていきます

内定者アルバイト3社目おわったよ

11月と12月の2ヶ月間、メディア事業部のピグで内定者アルバイトを経験してきたので、その体験記を書いていきます。

週2勤務だったので就業日数は少なめでしたが、それでも十分満足できる内容でした。

ちなみに今回はフルリモートです。

それでは本編へ ٩(ˊᗜˋ*)و

配属先

配属先はメディア事業部のピグで、期間中はピグの中のピグパーティーと新規サービスの2つの開発に携わっていました。

ピグのチームは、サーバーとSREの垣根があまりなく、どちらのエンジニアもアプリ側とインフラ側を触る機会があるという、両方をやりたい自分にとって望ましい環境でした。

また、チームの雰囲気は””人間関係のラフさ””と””技術面の充実感””のバランスがよく、正直今のところ一番好きな環境だと感じています。

取り組んだこと

2ヶ月間で主に下記の4つに取り組んでいました。

  • サークル検索機能の改善
  • 新規サービスのdev環境構築
  • 負荷対策用のk8sパラメータの調整
  • k8sのSecret管理ツールの調査・検証と導入フローの整備

受け入れ面談の際にSREっぽいタスクに取り組みたいと伝えており、その要望を汲んでいただいた結果、インフラやKubernetesに関するタスクをメインで振っていただきました。

それぞれ見ていきます。

サークル検索機能の改善

従来のサークル検索では、検索キーワードの部分一致を表示するものとなっていたため、「youtube」と検索をした際に、「YouTube」といった文字列を含んだサークルが表示されない仕様になっていました。

この検索ワードの大文字と小文字の区別をせずに検索できるようにする、という改善を1番最初のタスクとしてアサインしていただきました。

詳細は割愛しますが、ピグパーティーではデータベースにMongoDBを使用しているため、検索ロジックが見慣れたRDBのものとは異なるものでしたね。

実際に取り組んだ内容としては、検索ロジックの変更と、既存データが持つ検索用キーワードの修正の2つだけでした。

このタスクでは、今までのアルバイトで得た知見が活きる場面が多く、かなり早くPR作成まで持っていくことができましたね。

(どちらかというと、アプリ側よりもテスト作成の方が時間がかかりました)

新規サービスのdev環境構築

新規サービスのdev環境の構築を一部分だけ担当していました。

具体的に自分が担当したものは下記の3つです。

環境構築は基本的にTerraformを使用し、DNSのところだけRoadworkerを使って実装しました。

内容自体は既存のサービスの環境と似たようなものが多かったため、複雑さはほとんどなかったのですが、今まで環境構築を実践の場で行う機会がなかったため、貴重な経験をできてラッキーだと思っています。

余談ですが、今までGCPの方に触る機会がなかったのですが、こっちの方がAWSよりも断然触りやすいと感じました。

GCPがシンプルなのか、単純に触ったサービスが少なかったからそう感じたのか、どっちなんでしょうね。

負荷対策用のk8sパラメータの調整

負荷対策用のKubernetesパラメータの調整をいくつか行いました。

自分が調整した内容は下記の2つです。

  • 日付が変わるタイミングでレプリカの最低個数を増やす
  • 年末年始のPodのリソースを増やす

レプリカの最低個数を増やす、というものに関しては、すでにそれ用のCronJobが作成されていたのですが、それでも足りない時があるということで、そのパラメータを調整するという内容でした。

また、日付が変わるタイミングの中でも、特に月初はアクセスが多いということで、月初とそれ以外のタイミングで場合分けしてレプリカの個数を変えるという実装も行いました。

パラメータの選定は、過去のリソース使用量のログを集計して、その結果をもとに適切な値を設定していました。

実はこのタスクをきっかけに初めてKubernetesに触れたのですが、入門としては非常にちょうどいい難易度でよかったです。

ちょうどいい難易度とは言ったものの、k8s特有のワードや事前知識はもちろん必要とされる内容だったので、同時並行でインプットも進めながらタスクに取り組んでいました。

バイト期間でかなりKubernetesに関する知識がついたので最高です。

Secret管理ツールの調査・検証と導入フローの整備

KubernetesのSecretリソースを管理するためのツールである「Sealed Secrets」の調査・検証と実際にプロジェクトへ導入するところまでをまるっと担当していました。

実際に取り組んだ一連のフローはこちらです。

ツールの詳細については割愛します。

  1. ツールの使い方や機能、注意点の調査(ドキュメントにまとめる)
  2. test環境に導入し、各機能の動作検証
  3. Helmで管理するための設計
  4. 半自動化するためのスクリプトの作成
  5. 既存のSecretをSealed Secretsへ置き換える

この中では、特に半自動化スクリプトにこだわりを持って実装を進めていました。

Sealed Secretsには、Helmで管理するための機能があまり用意されておらず、そのまま使おうとすると、利用者側にある程度ツールに関する事前知識が求められる状態でした。

そこで、リソース変換のフローをmakeとシェルスクリプトを使って半自動化することで、事前知識なしでツールを使用できるように整備しました。

KubernetesやHelmに関する知識がある程度必要となるタスクでしたが、最終的に就業期間内にプロジェクトへ導入し、デプロイするところまで見届けることができたので、とても達成感を味わえるタスク内容でした。

(どういう形になるかは未定ですが、この辺の話は技術記事として別途執筆する予定です)

追記:2023/02/09

Developers Blogの方で執筆・公開させていただきました🙌

developers.cyberagent.co.jp

振り返り

今回の内定者アルバイトでは、今までの就業先とは異なり、アプリケーション側以外の側面でのタスクが多く、非常に充実した内容だったと感じています。

特にKubernetesに関して開発ベースで学ぶことができ、既存の設定の調整だけでなく、新しいツールを導入する一連の流れなど、経験できたことの幅が広かった印象です。

また、就業期間の初めの方に目標の一つとして、「安心してタスクを任せてもらえるように立ち回る」というものを設定しており、この点もトレーナーさんに評価していただいたのでよかったです。

一方で、タスクの見積りの甘さは今回の課題だったと思います。

ある要件に対して、「どこまでやってそれを達成したと言えるのか」ということに関しての見積りが甘く、想定していたやるべきことと実際にやるべきことに齟齬があり、見積もった期限内でタスクが終わらないということがあったので、こちらが反省点です。

おわりに

就業日数は少なかったものの、充実した2ヶ月間でした。

また、ランチの際は割とプライベート全開の話もでき、常にリラックスできていたので、居心地はかなりよかったです。

もともとメディア事業部はあまり視野に入れていなかったのですが、今回の就業を通して、なんなら一番自分に合っている気がしてきたので、就業してきて本当によかったと思っています。

1月は以前就業したことのある部署へもう一度参加してくる予定なので、この結果をもとに最終的な希望部署を決定しようと思います。

では、今回はこの辺で。

Bye👋