Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

エンジニアとしてサービスの全てに関わりたい ~ 新卒6ヶ月振り返り ~

サービスの全てに関わりたい ~新卒6ヶ月振り返り~

こんにちは。19卒でWeb チーム所属のエンジニアとしてRettyに入社した宇野です。

この記事では簡単な自己紹介をした後に、 内定者インターンと新卒合わせた一年の振り返り、これから挑戦したい事を紹介します。

自分はサービスの様々なことに関わりたいと思い、サーバーとフロントのサービス開発はもちろん、登壇や採用もやっています。 この記事を読んで、「Retty に入ったら、色々な経験ができて楽しそう」ってことが伝わればすごく嬉しいです。 😊

  1. はじめに
  2. 内定者インターンの振り返り
  3. 新卒半年間の振り返り
  4. 今後の抱負

1. はじめに

大学時代は情報系の学部でプログラミングの基礎を学びつつ、 Web 系のベンチャーインターンをしていました。また、大学院では大学の頃とは違う分野を勉強したいと考え、外部のネットワーク研究室に進学しました。

しかし、やってみたい研究が諸事情でできず「嫌々研究をやるより自分のやりたい事をやろう」と思い大学院を辞める事にしました。学生の頃から外食が好きで Retty も普段から使っていたので、自然と就職先の候補に上がりました。最後は Retty と Web 系の大手で悩んだのですが、 大手だと触れる技術の範囲が制限されるイメージがあり「サーバーからフロント、インフラまで幅広く触れるエンジニアになりたい」と思い Retty に決めました。

2. 内定者インターンの振り返り

内定者インターンでは、グルメニュースアーキテクチャのリニューアルをしました。

元々グルメニュースは、 記事を入稿するサービス記事を配信するサービス の二つに分かれているため、メンテナンスコストが倍になっていました。 また、グルメニュースのみを開発している人はいなくweb 開発をしている2人が、時間を見つけて開発をしているという状況もあり管理が大変でした。 そこで、入稿サービスと配信サービスを API で通信できるようにして、一つのサービスにするという事に取り組みました。

グルメニュースの説明は、こちらの記事に書かれています。

engineer.retty.me

f:id:rettydev:20191201130257p:plain
リニューアル後の構成図

  • 記事を入稿するサービスでやったこと
    • API の技術選定(RESTful or GraphQL)
    • Repositoryパターン導入
    • モデルとコントローラー全てにテストを追加
    • GraphQL の実装(Lighthouse フレームワークを使用)
  • 記事を配信するサービスでやったこと

学んだこと

  • 技術面

Laravel は学生時代に触ったことがあり Repository パターンも理解していたので、その導入にはあまり苦労しませんでした。 ただ、テストを書いた経験や GraphQL を使用した事がない、かつ参考にできるサイトも少なくやり方・使い方を理解するのにだいぶ時間をかけてしまいました。 テストについては、当時の振り返りが残っていたので一部を載せておきます。

テストする上で意識するべき点(振り返り) 小さく作る ユニットテストは一つの機能のテストを作ることなので、それを意識しないとダメ。 そのテストメソッドではテストしなくても良い事にしている事が度々あったので、小さく を意識する。

どこでテストが落ちているか分かるようにする テスト対象の戻り値が配列だったので期待値を配列に直してアサーションしたのですが、どの部分でテストが落ちたのか分かりづらくなってしまった。 無理にアサーションを一つにせず、個々の値のアサーションが通っていれば OK ということを学びました。

他のテストに影響がないようにする 現在時刻をモックしているテストケースで、モックを解放し忘れて後続のテストに影響を与えてしまっていた。 テストする順番によって、成功/失敗が変わるようなテストは良くないので、テストの実行が独立してできることを確認するべきだった。

テストは自分の書いたコードが意図した挙動をしている確認のためにもなり、またチームメンバーが自分の書いたコードを修正した時にも役に立ちます。 この経験は会社に入った後も役に立っていて、インターンで大きく成長できた点の一つと思っています。

  • 仕事の進め方の面

学生時代はコードをレビューをして貰うことも少なく、チーム開発に不慣れなため起こした失敗があります。

f:id:rettydev:20191201120741p:plain

上の写真は、リニューアル作業を一人でやっていて時間も無く、誰かから OK を貰ったらすぐに次の作業に進むために、PR をマージしてしまった時の内容になります。これによって起きたバグなどは無く良かったのですが、せっかくレビューをしてくれた人のコメントを無視して進めたりチーム開発の勝手をわかっていませんでした。これ以降は、 PR を投げてしばらく反応が無かったら直接声を掛けたり、 PR 上でレスを繰り返すのではなく長くなりそうだったら直接質問をするように心掛けています。

3. 新卒半年間の振り返り

新卒で入って半年間で、Retty の機能開発やレガシーコードの改善を進めたり、採用、登壇などを経験しました。ここでは、レガシーコードのリアーキテクチャ・整備、採用に絞って振り返りをします。

レガシーコード

Retty のサーバーサイドは PHP、フロントエンドは Vue.js(一部、jQuery) で書かれていて、約9年間運用されたモノリスの構成になっています。そのため、DX の低下や意図しない挙動の変更が多く発生していました。そこで、一年以上前にリアーキテクチャチームが結成され最近一部店舗でリリースされました。次のスライドに、詳しいリアーキテクチャのことが書かれています。

4,000万人が使うサービスをjQueryからNuxt.jsにまで置き換えていった話

そのあと、リアーキテクチャチームから Web チームに引き継がれ対象店舗を拡大するために開発を進めています。リアーキテクチャ後は、Go 言語や Nuxt.js、 GraphQL、gRPC とモダンな環境になっています。「名前は知っていて少しは触った事はあるけど...」というレベルだったので、開発環境を作る所から苦戦しました。 また、入社して日が浅いのもありドメイン知識が乏しく、gRPC で使う Protocol Buffers の型を考えるのに苦労しました。Protocol Buffers は、複数のサービスで使われるもので不備があると全てのサービスで修正が必要でコストが高いので、一番最初に実装する時に充分議論するために先輩社員とペアプロをしてドメイン知識をつけました。さらに、リアーキテクチャ後のコードはテストを書いていくという方針があり、インターンでは学べなかった TDD もできてとても勉強になりました。

  • レガシーコードの整備

全てのページをリアーキテクチャできれば良いのですが、優先度やリソース的に厳しい部分がありレガシーコードとしばらく向き合わなくてはならないです。 デッドコードがあるとファイルの肥大化、新しく入ってくる人がどのコードを参考にすれば良いか分からないなどが発生します。そのために、時間が空いた時にデッドコードのお掃除を始めました。まだお掃除に慣れていない頃は、 IntelliJ の静的解析を使って プライベートメソッドexit 以下のコード など他のファイルから呼ばれている可能性が低いコードを中心に削除しました。お掃除に慣れてきたら、ページごと削除するお掃除などを行いました。デッドコードを消すかなり地味な作業ですが、最近はチームの人もお掃除をしてくれて少しずつお掃除をする文化の醸成ができているのかと思います。

採用

  • なんで採用に関わろうと思ったか

自分の技術面接を担当してくれた二人がとても優しく、楽しい面接ができ普段通りに話すことができました。自分のように Retty に興味を持って応募して、「楽しい面接だった」と思う人を増やしたいなと思い採用に関わりました。

採用責任者に直接お願いをして、内定者インターンの頃から関わり20卒インターンの子とランチに行ったり、面接に同行させてもらっていました。新卒以降は、逆求人イベントに参加・サマーインターンシップの面接などをしました。

  • 採用で苦労した事

採用で一番苦労した点は、 決められた時間の中で、相手の技術力を見極めるという事です。自分は最初、面接でコミュニケーションから技術力までを見ようとしていました。ただ、約一時間と時間が決まっている中で、興味ある技術やどこまで深めているかをみるのはとても難しく、「興味の幅が広いけど、一つの技術を深めていない」「興味の幅は狭いけど、一つの技術を深めている」などは一長一短があると思っています。そこに社風にあっているか、コミュニケーションと技術力どちらを重視するかを考慮していたので、とても大変でした。

解決方法として、 先に面接している人と直接話をして、その人がどこかを中心に見ていたかを聞き、自分はそことは違う視点でみるようにしています。テキストで面接の内容は共有されますが、面接の間にメモれることは限られてる思っているので、口頭で聞くようにしています。

特に、性格やコミュニケーションで感じた事はテキストだと伝えにくいニュアンスがあると思っています。またその逆もあって、次の面接をする人が分かれば口頭で軽く話す事を心掛けています。

4. 今後の抱負

インターンも含めて約一年間、 Retty で働いてグルメニュースや Web 開発、採用など色々な事を経験ができました。また、来年の1月からはアプリチームに行くことになり、更に色々な経験ができそうです。これからは、経験した事がない部分も触れるようになり、サービスのグロースに寄与したいと思っています。また、自律的に動けるチームで働けているので、仲間探しももっと主体的にやっていきたいです。

f:id:rettydev:20191217142945j:plain