Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

名古屋初のEightの内定者インターンをしてきた話

はじめに

Sansan中部支店 初のエンジニア内定者インターンの23卒のウチウゾウです.約半年間,Eightのイベント事業に関するプロダクト開発に携わり,チーム開発における「いろは」を学びました.

今回は,私が中部支店での内定者インターンを通して,何に向き合い,どのように成長したのかを紹介します.これからエンジニアとして,名古屋で働きたい方やEightのイベント事業を盛り上げたい方の助けになれば嬉しいです.

内定者インターンの目的

Sansan 内定者インターンでは,「Sansanのカタチ」のValues「意思と意図をもって判断する」とあるように,内定者の意思が尊重され,目的は人それぞれです.私のインターンの目的は「はやく一人前になる」ことです.具体的には以下のことを意識していました.

  • 入社後のイメージを掴む
  • 足りないものを知り,学ぶ
  • 能力を伸ばしながら,実績を積む

業務と学び

Sansan中部支店のEightのエンジニアメンバーは,イベントや広告に関する運用・開発に携わっています.その中で,私が開発に携わったのは,Eightのイベント事業のプロダクトです.実際の開発チームにジョインしていましたが,週2勤務ということもあり,スクラム開発のスプリントバックログのタスクではなく,独立したタスクに取り組んでいました.

チュートリアル: 簡素なTODOアプリの開発

インターン開始直後は,私がRailsとReactの実務経験がなかったため,簡素なTODOアプリを作成しながら,コンポーネントの分け方・RSpecの書き方を学習しました.

自身の課題が見えてきたはじめての実務

その後,新しい形式のイベントが直近に控えていたため,動作確認をしながらプロダクトについて理解を深めていきました.そこでリリース前に見つけたバグの修正も行いましたが,なかなかプルリクエストがマージされませんでした.そこで,リードタイムの長さが自身の課題として浮き彫りになりました.

自身が中心となって取り組んだ新機能開発

イベント後は,新しい機能の設計を開始しました.この新機能の開発を通して,仕様の詰め方や適切なコミュニケーションの仕方,データベースのテーブル設計について学びました.

まず,自らPdMとコミュニケーションを取りながら,機能要件の洗い出しや優先度の確認を行いました.はじめはPdMの方のバックグラウンドや,エンジニアに求められていることがわからず,うまくコミニュケーションを取ることができませんでした.しかし,先輩社員からアドバイスをもらい,自身の中で答えをもってコミュニケーションするように心がけました.そうすることで,比較的に円滑なやり取りができるようになった気がします.

次に,チームのエンジニアの方と相談しながら,運用しやすさやスピードとの兼ね合いにも気をつけながら,仕様を詰め設計を進めてきました.データベースのテーブル設計においては,私は新しくカラムを追加すれば良いと考えていました.しかし,新しくテーブルを作成することで,Modelクラスの責務が分けることができ,可読性が高くなること,データベースに余分なデータやnullが入るのを防ぐことができることを学びました.また,運用中のプロダクトにおいては,大きなテーブルの一括更新におけるデッドロックにも注意を払う必要があることを知りました.

リファクタリング

次に,ある機能を異なるエンドポイントから呼べるようにする実装を行いました.しかし,この機能のServiceクラスがControllerクラスと密結合になっていたため,ControllerクラスのロジックをServiceクラスやQueryクラスに分離することからはじめました.また,イベント種別によって求められる値が異なるのですが,イベントに関係なく同じ値を取得する実装になっていました.そのため,不要な取得していたり,値が足りない場合にはN+1問題が起きていたりしていました.そこで,イベント種別ごとに必要な値のみ取得するように,リファクタリングを行いました.この実装を通して,オブジェクト指向の多態についてやActive RecordのN+1問題を防ぐメソッドについて,理解を深めました.

パフォーマンス改善

続いて,ほかの機能のパフォーマンス改善を行いました.そのページでは,全件表示を行っていたため,表示には時間がかかり,サーバーにも負荷をかけていました.パフォーマンスの改善に向け,Active Recordを用いたN+1問題の解決はもちろん,ページネーション表示への変更を行いました.加えて,全件表示でなくなったことを踏まえ,使いやすさが低下しないよう,検索機能も追加しました.これまでの学びを生かし,比較的スムーズにプルリクエストをマージまでもっていくことができるようになりました.

最後に

私のインターンの目的に対して,

  • 仕事の進め方やプロダクトとの向き合い方といった入社後のイメージを掴みました
  • Railsの理解を深めることはもちろん,プルリクエストの出し方や適切なコミュニケーションの取り方といった自身に足りていなかった「チーム開発力」を学びました
  • 上記のタスク以外にも,個人開発では触らないような技術に触れることができ,課題解決における打ち手が増えました

入社後は,これまでのような独立したタスクではなく,スクラム開発のスプリントバックログのタスクを進めていくことなるため,タスクの依存関係を気にしながら業務を進めることや他の人のプルリクエストのレビューといった「チーム開発力」がより求められます.プロダクトの品質・スピード・効果が最大化できるよう,技術力はもちろん,チーム開発力も身につけて参ります.

© Sansan, Inc.