はじめまして!
2023年5月に1ヶ月間、インターンシップ生として働かせていただきました、栗原佑弥(@kurichi97)です。
普段はハッカソンなどに参加しているのですが、実務は今回のインターンシップが初めてでした。
今回のインターンシップでは恋活・婚活マッチングアプリ「タップル」にて、サーバーサイドエンジニアとして現行システムの保守や機能実装を担当させていただきました!
ブログを書くのは初めてで、拙い文章ですが最後まで読んでいただけるとうれしいです!

 

 

インターンシップ概要

今回私が参加したのは「CA Tech JOB」という通年行われている1ヶ月間の就業型インターンシップです。「CA Tech JOB」では面接や面談を通してやりたいことを相談し、それぞれにあった部署に配属していただき、配属先ではトレーナーさんを筆頭とする社員のみなさんと実際の業務に取り組みます。

 

業務について

配属先

今回、私は「タップル」のサーバーサイドチームのうちの1チームに配属していただきました。
同チームではエンドユーザーに対してセールやバナー等のコンテンツ配信を行うマイクロサービスの開発を行っています。そのうち、コンテンツを入稿する管理画面を担当させていただきました。

 

タスクの進め方

「タップル」ではNotionによるタスク管理を行っていました。また、配属先チームではトランクベース開発を試験的に導入しており、プルリクエストの粒度や生存期間をシビアに意識していました。従ってタスクの進め方としては、Notion上でアサインされたタスクを細分化し、プルリクエスト毎の粒度まで区切った方針をレビュー頂いてから進めていました。

 

担当したタスク

 今回担当させていただいたタスクは主に以下の3つです。

  • リファクタ
  • 入稿ツールで使用しているサービスの調査
  • 入稿ツールの機能実装

 

リファクタ

初日からコードリーディングやアーキテクチャの理解を含めた簡単なタスクとして、リファクタを行いました。担当したマイクロサービスには2つのAPIが存在します。これらのAPIのロジックは異なるものの、同じ階層に書かれているものがあり、それぞれadmin配下、api配下に分割するというリファクタが以前から行われていました。私はadmin側の1つのエンドポイントのリファクタを担当しました。admin側は処理が簡潔であり、リモデリングの必要はなかったため比較的簡単なタスクでしたが、アーキテクチャの理解やプルリクエストの粒度について考える際に予想以上に時間を要しました。ただ、このタスクによりアーキテクチャを理解することができ、これ以降のタスクをスムーズに進めることができるようになりました。

入稿ツールの調査

続いて行ったタスクは入稿ツールの調査・検証です。入稿ツールは、同じIU事業部の株式会社CAMが開発しているOSSである「viron」を使用しています。vironは、OpenAPI Specification(OAS)を基にして管理画面を生成するサービスであり、フロントエンドの実装をすることなく管理ツールを実装することができる特徴を持っています。
しかし、vironの仕様に関してドキュメンテーションで網羅されていない機能など完全に把握できていない部分があったため、vironの機能を活用してより簡潔な実装が可能な箇所や、ソートやフィルタ、画像アップロードなどの実現したい機能が実装可能かどうかなどについて調査を行いました。
具体的な調査方法としては、実装したい機能をリストアップし、それを実現する方法を考えました。関連するコードについては、デモを試してみたり、サンプルコードを読んだり、OSSの実装を調査したり、実際にコードを変更して試してみるなどの作業を行いました。
このような調査を通じて、vironの機能をより理解し、実装に役立つ情報を収集することができました。これにより、効率的かつ機能的な入稿ツールの開発に向けて、具体的なアイデアや手法を検討することができました。

入稿ツールの機能実装

前述した入稿ツールの調査や、ビジネスの方の使用時の感想などを元に以下の3つの機能実装をしました。

  • 監査ログにユーザーIDを追加
  • コンテンツの複製機能
  • コンテンツのソート機能

監査ログにユーザーIDを追加

以前から挙げられていた問題点の一つに、監査ログにおいてユーザーIDがわからないというものがありました。結論から言うとヘッダーに含まれるトークンがミドルウェアで検証され、検証結果がクッキーにセットされていたのですが、localhostでは認証を行わないためトークンの検証がスキップされておりデバッグに苦戦しました。最終的にはデバッグログを大量に仕込んだコードを開発用のコンテナにデプロイしていただき、ログをもとに調査、実装しました。

コンテンツの複製機能

コンテンツを入稿する際に、特定のプロパティの値だけが異なる場合でも、新規データとして全項目を再度入力する必要がありました。この方法は時間がかかるうえ、ミスも起こりやすいという問題がありました。

この機能の実装はほとんどOASの軽微な変更だけだったのですが、正しく動いているか、OASの変更による影響が他に出ていないかといった検証に多くの時間を要しました。

コンテンツのソート機能

viron側で用意されているものの担当したマイクロサービスのAPIが対応しておらず動作していない機能の一つとしてソート機能がありました。この機能についても実装自体はとても簡単でしたが、複数のコンテンツで同様の方法を用いてソートを行うため、汎用的なヘルパー関数のような形で実装することなどに工夫しました。また、デフォルトの並び順は何基準が良いかなどについては実際にツールを使用するビジネスの方へリサーチしながら進めました。

 

成長できたこと

インターンシップが始まる前に設定した目標の1つに、「大規模サービスの保守・運用において、課題の発見、解決策の検討、実装、リリース、結果の監視、数値の集計など、一連の流れを経験する」というものがありました。今回のインターンシップでは、機能の検討から実際のリリースまで行い、その機能をビジネスの方に利用してもらい、フィードバックを得ることができました。この経験を通じて、トランクベースの開発について知識を深めることができましたし、機能を考える際にはビジネス的な価値も考慮するようになりました。
その他にも、質問や意見交換などのコミュニケーションを積極的にとった事により自身の発想や考え方が磨かれたと感じています。

 

最後に

今回のインターンシップ期間中、私の意見を尊重していただきとても有意義な1ヶ月を過ごすことができました。例として、私はUXを考えることや、コードリーディングをして理解したり検証したりすることが好きなのですが、今回与えられたタスクはそういったものが多く楽しかったです。その他にもチームで行っている朝会、夕会では私にも発言の機会が多く与えられ、発した意見に対しても対等な形で議論していただけました。自分の意見を採用していただけた時はとても嬉しかったですし、意見に足りない視点などについても教えていただき成長にもつながりました。
また、毎日ランチに連れて行っていただき、「タップル」内外のいろいろな方とお話しすることができました。その中でみなさんがサイバーエージェントを志望した理由や働く楽しさなどをお聞きすることができ、サイバーエージェントに対する理解度があがりました。皆さんありがとうございました。