見出し画像

フルリモート環境 × 大規模プロダクトでiOS開発インターンをやって衝撃を受けた話【ミラティブインターン体験記】

初めまして、ミラティブで学生インターンをしている学部3年のigarashi(@ig4ry0)です。ミラティブではiOSエンジニアとして開発に参加しています。
2022年9月から約3ヶ月間インターンを行った振り返りをまとめていきます。

プログラミングのきっかけ -> ミラティブに入るまで

幼少期、LEGOが好きだった私はLEGOのMindStorm EV3(プログラミングをしてセンサーやモーターを制御することができるキット)に触れ、色々と動かしているうちにプログラミングに興味を抱きました。とはいえ、Scratchのように視覚的にモジュールを組み合わせるだけのものでプログラミングを真剣に始めたのは大学に入ってからでした。大学入学後は、競技プログラミングやCTF、機械学習、アプリ開発、Web開発などさまざまなことに挑戦し、取り組んできました。

その中でアプリ開発に面白さを感じ、ユーザーに近い距離でユーザーに価値を生み出すようなプロダクトを作りたいと思ってインターン先を探し始めました。サポーターズ主催の「エンジニア 1on1 イベント」で、ミラティブの方々と話をして、ここならユーザー目線で開発に携わることができると思い選考に申し込ました。その後、面談、選考を重ね、インターンさせていただくことになりました。

ミラティブに入って驚いたこと

2022年9月にミラティブで働き始め、すぐに多くのことで衝撃を受けました。

初めに受けた衝撃はプロダクトの規模です。MacBookProのM1Maxをレンタルさせていただき(ここも衝撃ポイントの一つです)、それでプロジェクトをビルドしてもある程度時間がかかってしまうというほどでした。不具合を修正する際にも、どの画面がどこのコードに対応しているのかを探すのが一苦労です。

これまでも他社さんでインターンを経験したことはありましたが、それでもここまで大規模なプロジェクトは初めてで、全容を1人で理解するには冗談抜きで一生かかるんじゃないかと思っています笑

また、フルリモートでの開発というのも自分にとって新鮮でした。コロナ禍ではあるものの大学生がアルバイトなどで働く機会はほとんどの場合が対面で、リモートワーク中に困ったことがあったら大丈夫かという不安がありました。しかし、それらの問題も全く気になりませんでした。その理由は2つあります。

1つ目は、Gatherと呼ばれるリモートオフィスツールです。一部のミーティングを除き、基本的に常に接続していて、困ったことがあったら誰かにすぐに口頭で聞ける環境がありました。

2つ目として、SlackのtimesチャンネルというそれぞれのメンバーがTwitterのように色々なことを呟くことができるスペースです。timesチャンネルでも質問や困っていること、思ったことを投げるとリアクションや返信をいただけました。

このように、同期的、非同期的に質問、相談することのできるプラットフォームが整備されていたため、抵抗なくリモートワークに取り組むことができました。また、定期的なメンターとの1on1では就活のことやコーディングの話など色々な話をして、悩んでいることがあるときは相談にものってもらい、大変有意義な時間になりました。

実際に参加したプロジェクト -- おもてなし配信モデレータ機能 --

概要

Mirrativにはもとより「おもてなし配信」と呼ばれる、配信者さんと始めたばかりの視聴者さんをつなげる配信オプションがありました。しかし、視聴者さんが初見の方ばかりだと、コメントを送るハードルが高くなってしまったり、配信者さんが話しづらくなってしまったりと配信が盛り上がりづらくなってしまうという課題がありました。そこで、配信者さんはフォロワーの中から1人をモデレータとして選択し、いつもの配信の雰囲気を作り出せるようにしようとなりました。

UI作成

今までは、個人開発やハッカソンでの開発が主だったため、デザインがある程度固まっている状態で開発をすることは非常に新鮮でした。その中でも他の画面との統一感や実装コストなどをもとにデザイナーの方とSlack上で密に連携して取り組むことができました。

苦労した点

- 今回は以下の画面のようにフォロワーの一覧からモデレータを選択をする動作を想定していたので、ラジオボタンが最も使いやすい入力方式であると思われたのですが、ラジオボタンはiOSの標準の機能には含まれていませんでした。そのため、UITableViewのそれぞれのセルに対してラジオボタンのviewを作成し、独自にラジオボタン機能を実装しました。

- 今回の機能を開発するにあたり、関連するモデルに技術的負債がありました。具体的には、複数の画面で使われていたListManagerというフォロワー情報を管理するクラスがUIViewControllerで直接APIリクエストを行っていたり、レスポンスで返ってきた表示モデルの保持を行っていたりしていました。そこでミラティブiOSチームで共通設計として利用しているReactorへと責務を分離し、状態管理のフローを整理するようにリファクタリングをしながら機能開発を行いました。

ミラティブで3ヶ月インターンして感じたこと

保守性を考えた実装の重要性

保守性の高いコードを書けとはよく言われるものの、今まで個人で開発したり勉強したりする分にはあまりその有用性がわかっていなかったです。しかし、実際に大きなプロジェクトに携わってみると、後からコードを読むエンジニアが読みやすくわかりやすい実装が重要だと感じました。

例えば、何千行何万行と同じファイルにコードが書かれていたら、上下に行ったり来たりする必要を減らすと論理を追い易くなり、メソッドやクラスの仕組みがコードを読まなくてもわかるような(あるいは読めばすぐわかるような)直感的なものであれば部分部分の修正を行うときのコストが大きく減ります。

多くの人が携わる大きなプロジェクトに参加する機会は稀で非常に学ぶことが多い3ヶ月でした。また、インターン期間中の実装についても「大きなプロジェクトの一部」のコードとしてレビューをいただき、議論を重ねることで自分の理解を深めることができました。

実装コスト、スピードの重要性

一方で、業務においてスピードは非常に重要な項目の一つです。「業務開発なら時間も厭わず、常にイケてるコード書いているんでしょ」と思っていました。しかし、実際はMirrativは成長真っ只中のプロダクトでどんどん開発を進め、ユーザーさんに価値を届ける必要があるため、実装コストと保守性やこだわりがトレードオフの関係の中で開発を進めていたのです。

Mirrativを創る楽しさ

先述した通り、元々インターンを探している時の動機としてユーザーに近い距離で開発を行いたいと思っていました。実際に僕はインターンを始めてからMirrativで配信をしたり、視聴したりすることでかなりユーザー目線とエンジニア目線、双方の目線を持ってプロダクトと向き合うことができました。これは、ミラティブで働く楽しさなのではないかと思います。

最後に

私は週3日で稼働をしていたため、必然的にSlack上のレスポンスが遅くなってしまっていました。その中で施策中多くの方に協力していただき、ありがとうございました。また、何よりメンターのtakezawa(@to4iki)さんをはじめとしたiOSエンジニアチームの皆さんのおかげで充実した成長できた3ヶ月を過ごすことができました。本当にありがとうございました。


We are hiring!

ミラティブでは新卒およびインターンを募集しています!興味を持った方は、ぜひ気軽にエントリーお待ちしています。

▼採用候補者さまへの手紙

▼テックブログ

▼採用サイト

▼Mirrativ Engineering 〜ミラティブのエンジニア情報を伝えるポータルサイト〜


この記事が気に入ったらサポートをしてみませんか?