22新卒としてアプリチームにJoinして半年が経ちました

はじめに

こんにちは

アプリ開発チームで主にiOS開発をしている@レイです。

こちらの記事はRettyの22年新卒が入社半年を振り返る「#22新卒techblog」の第4弾記事です。
前回は木本の記事でした。webエンジニアとして学んだことや挑戦したものに詳しく書かれているので是非見てください!

engineer.retty.me

今回は下記の内容で紹介していこうと思います。

  • Rettyでエンジニアになるまでの道
  • インターン時代に比べて学んだこと
  • 新卒も活躍できます!
  • 今後挑戦したいこと

私がRettyでエンジニアになるまでの道

本題に入る前に軽くRettyのエンジニアになるまでの道を紹介しようと思います。

プログラミングを始めたのは中学校時代、当時iPhone3GSが発売されて使っていたところ、AppStoreにアプリがあまりにもなくて自ら望んでいたアプリを直接実装して使っていたのがきっかけでした。
以後、iOS開発以外にもMachineLearning、GraphicsProgrammingなどを着実に勉強してきました。

就職活動の時期になって希望する会社に志願したり、様々な会社から先に連絡を受けましたが、最終的に次のような理由でRettyを選択することになりました。

  • 行きたかった会社だった
  • ユーザに提供しようとする価値に非常に共感している
  • 新卒でも活躍できる環境である

入社を志望した具体的な話は、去年Rettyで内定者インターンをした時に書いた記事に詳しく書いているので、こちらを是非見てください!

入社して学んだこと

技術的にもたくさん学びましたが、一番たくさん学んだことは組織で効率的に仕事をする方法だと思います。

会社は限られたリソースで最大限の効果を生み出すことが重要なビジネスの世界です。 そのため、チームが別々で動くのではなく、組織としてチームとして動くことで同じ目標を目指し、最大の成果を出すことを目指しています。

自分も生産性を高めて最大のパフォーマンスを出せるように、下記の項目について地道に振り返ったり、周りの方々に相談をお願いし、自分の動きを改善しようとしました。

  • 他のチームメンバーはどのような動きをしているか
  • 私はチームの目標としているゴールに向かって動いているのか。

もちろん入社当初は失敗することもありましたが、着実に改善し、今はチームの一員として正しく動きを遂行できるようになりました。

自ら考えたことに対して大きく二つを下記のように言語化することができたと思います。

  • 今の目標と異なる作業をする際には、時期的にそのタスクを行うことが正しいか、チームと1PO、プランナーとコミュニケーションが取れているか、
  • 自らの進捗状況を着実に共有し、他のチームメンバーの進捗状況を把握する。 状況によってはモブ・ペアプロをする

技術力と生産性向上の学びによる成果

iOS開発で多くの活躍!

インターン時代に作業をしながらリスト画面の使い方やキャッシュなど、まだたくさん改善できそうなところが見えてきたので、入社したら気になったところを改善しようと感じました。 それで入社後、約1ヶ月以内にほとんどのコード構成と問題点を把握し、アプリの全体的なパフォーマンスとロジックの改善のために多様な提案をし、開発しました。 結果的にRettyiOSアプリのパフォーマンスを高いレベルに向上させることができました。

パフォーマンス改善の話は下記の記事を参照してください。

engineer.retty.me

engineer.retty.me

個人的にiOS開発については、入社前を含め経験が非常に長かったので、チーム内で施策開発をする時にチームをリードしたり、アプリ内にバグが発生した時にすぐ問題点を把握してチームで迅速に解決できるよう解決策を共有しました。

最近はiOS16とXcode14がリリースされ、ベータ版で確認したら、最新のAPIに追従/対応できていないことにより予期せぬ動作をするコードがあるのことが判明しました。 それで正式バージョンが出る前に、すべての問題を解決できるよう主導的に進め、OSの正式版がリリースされる日と同時に無事に修正されたバージョンをリリースすることができました!

チーム内で技術の進化に合わせてコードを作成できるように導く!

入社当初にコードを見ながら感じたのが、既存の悪いロジックを踏襲してそのまま使っていると思いました。
もちろん、最近手を入れてない画面の場合、仕方ない部分もありますが、少なくとも今から手を入れる画面については、上記のような問題を解決したかったので、最新の技術の進化に合わせて適切なコードを構成できるよう提案したり、直接導入したりしました。

導入した例

  • Combine
    • 以前も少しは使っていましたが、SwiftUI画面でのみで利用していました。 UIKit画面ではFatVC状態だったので、これを同じくMVVMアーキテクチャを遵守し、Combineを通じてUIとデータ間の相互作用ができるようにしました。
  • Concurrency
    • 従来はClosure構造やTimerを入れて他のフラグが完了するまで待つようにするなど、パフォーマンス的に良くないロジックが多かったため、これらの部分をasync/awaitに変更し、適切にコードが非同期、同期的に動けるように変更しました。
  • DiffableDataSource, Prefetch などの導入をすることで TableView, CollectionViewを改善する
    • 特定セルのUIを更新する場合でも、すべてのセルを更新したり、イメージをセル構成先からダウンロードしたりするなど、リストUIに対して様々な問題点があったため、適切なロジックとAPIを利用するように修正することで、全体的に3倍以上のパフォーマンス改善とレンダリング速度が2倍以上の改善を遂げることができました。

他にもCache管理やマルチスレッドなど様々な部分で提案し、直接改善まで進めました。

また、個人的に単純に改善作業をするのではなく、チームメンバー全員がキャッチアップできるようにペアプロをしたり、問題を共有する時間を通じてチームの技術力を向上させることができるよう努力しました。

新しい施策を提案!

個人的には、エンジニアの中でも、アプリ開発者は比較的ユーザーとの接点に近い領域で開発をしていると思います。

与えられたものだけを開発するのではなく、私が開発しているサービスをもっと良くして提供することにとてもモチベーションを感じるので、私は社内でアプリで追加したい機能や改善方案についていつも声をたくさん出しています!

このような動きにより、バグ以外にもユーザーさんのレビューによるフィードバックや個人的に改善してほしい部分などを提案し、積極的に改善しました。

最近では2CTR、3CVRなど数値的にも役に立つようなアイデアを考え、実際に導入できるようプランナー、POとコミュニケーションを通じて企画を構成したり、デザイナーの方と協力して最終的なデザインまで完了して開発を進めることができるように導いていきました。

今後挑戦したいこと

上記のように新卒ができることを目標にするのではなく、より高い段階を目標にして努力したので、多くの成長ができたと思います。

次の半年間もより高い段階を目指して、以下の項目について挑戦してみたいと思います。

  1. チーム内で完全にiOS開発をリードできるように開発、判断能力向上
    ある程度開発に対してはリードをしていると思いますが、まだ技術的にも判断力に対しても足りない点も多いので、このような部分を補完できるようにもっと多くの勉強と経験を積むことができるように努力しています。
    また、短期間のロードマップだけを考えるのではなく、チームの成長とサービスの改善のためにも、中長期のロードマップを考えるなど、より高いレベルの行動ができるよう挑戦したいと考えています。

  2. 採用、開発カンファレンスなどの外部イベントに参加
    個人的に採用についても関心が高かったので、テックブログをたくさん作成したり採用イベントに参加する機会があれば積極的に参加しています。
    来年からはiOSDCのような開発カンファレンスで単に参加ではなく登壇に挑戦しようと思います!

おわりに

今回の記事では、新卒として半年を振り返ったことを紹介しました。

個人的に半年という時間がとても短く感じましたが、入社をしてから多くのことを学ぶことができたし、チームと組織、サービスに多くの貢献もできたと思います。
これからも足りない部分を補って役に立つエンジニアになりたいと思います。

ユーザーさんのためにもより良いサービスになるよう開発したい皆さん、Rettyで一緒に開発しましょう〜!

hrmos.co

アプリ開発に興味ある方、応募する前にチームに聞きたいことがある方は、是非meetyでアプリ開発チームのメンバーと気軽にお話ししましょう! meety.net


  1. ProductOwnerの短縮語で、POのメイン役割は、メーカー(開発者&デザイナー)と1チームを組んで、共通の目標を持って当該プロダクトを高度化し続けることです。 そして、この過程で必要な数多くの課題のうち、該当プロダクトの持ち主として優先順位を決めることです。

  2. Click Through Rateの略語でユーザーに表示された回数(インプレッション数)のうち、ユーザーさんがクリックした回数の割合を計算したもの

  3. Conversion Rateの略語でWebサイトや特定のページに訪れたユーザーの内、どの程度CV(コンバージョン)に至ったかを表す数値です。CV(コンバージョン)というのは、「最終的な成果」のことで、例えば、ユーザーさんがWeb上で予約したり、申し込みを行ったりすることです。