(※この時だけマスク外して撮影しました)
こんにちは。kagaffyです! 2021年1月 ~ 3月でラクマのiOSエンジニアとして働かせていただきました。実はラクマでは初めてのインターン生だったらしいのですが、みなさんの親切なご対応もあり、のびのびと開発に集中できたと思います。緊急事態宣言中ということもあり、初日と最終日以外はフルリモートでした。
今回は業務の詳細や学びについてご紹介します。1年近く毎日日記を書いているので文章を書くことにはある程度慣れているつもりですが、ブログは初めてなので新鮮な気持ちです!
はじめに
そもそもこのインターンに参加したのは、2020年10月11日に開催されたサポーターズの逆求人イベントでラクマの方と面談させていただいたのがきっかけでした。数日後に行きつけのジムで筋トレ中に人事の方からオファーが来て即決しました。
業務内容
それでは実際にやったことをご紹介します!
バグ修正や機能改善系
エンジニアの皆さんお待たせしました、ここから先は開発の話です!
まずは肩慣らしということで、日付フォーマットの修正や画像の表示位置の調整などを行いました。この辺は普段のアルバイトでもやっているので楽勝かなと思っていましたが、いきなりObjective-Cという壁にぶち当たりました。
Objective-Cを触ったのは初めてだったので、Swiftとのギャップに悩まされました。特に型のキャストとnilの扱いには苦労し、Swiftがいかに安全な言語かが良く分かりました。
そんな状態で対応した機能を3つご紹介します。
- さがすタブを長押しで検索ボックスにフォーカスする
- TwitterやInstagramと同じ機能です。タブバーのコードは思いっきりObjective-Cでした!

- ホームタブをタップして一番上までスクロールする
- これも様々なアプリで見かけます。ステータスバーをタップしなくても一番上まで戻れるようになりました!

- 商品画像をステータスバーよりも下に下げる
- 商品詳細画面で、商品画像がステータスバー(一番上のバッテリー、電波、時間表示などが見える部分)に被っていてiPhone X以降(ホームボタンがないモデル)では表示が一部隠れていました。これを修正すると同時に、背景にブラー効果画像を重ねて表示させてオシャンティーな見た目に仕上げました!

ちなみに、上2つは早速次のアップデートで反映されていました。

Swift置き換え
せっかくObjective-Cを触ったのだから、次はそれをSwiftに置き換えてみたいと思いました。メンターの方に希望を伝えたところ、いくつかのAPIサービスクラスとViewControllerのSwift化を担当させていただけることになりました!
ここではUnit TestとMVPアーキテクチャについて学びました。今までテストを書いたことがなかったので、モックを作って渡したり通信結果を決め打ちで返す実装はとても参考になりました。また、MVPアーキテクチャにすることでUIイベントまでテストできるようになることも学びました。
XcodeGen対応
ラクマはXcodeGenを使っていなかったため、その導入を行いました。今回のインターンでやった業務の中でおそらく最も規模が大きかったと思います。
始まりは偶然見かけたこの会話でした。

どうせインターンするなら開発環境に何かプラスに働くことがしてみたかったので見た瞬間にやってみたい!と思いました。
とはいえ、実際のプロジェクトにゼロから導入するのは初めてだったのでかなり苦労しました。実装にはSpec generationを利用し、以下のサイトを参考にしました。
まずはSpec generationで2000行ほどのymlができあがりました。それをベースにして1からproject.ymlを書き出していき、エラーを1つずつ潰していくことでなんとかビルドできるようになりました。
そのあとは元のプロジェクトファイルとの差分ができるだけ少なくなるようにBuild Settingsを編集していきました。上の記事にも書いてあったのですが、XcodeのBuild Settingsはデフォルト状態から変更された箇所が太字になるので、それを見ながら1つずつ編集していくという地道な作業を行いました。
ここまででほぼレビュー可能な状態になったのですが、上記以外で気をつけることをご紹介します。
- ファイルのシステムツリーを事前に合わせておく
- XcodeGenではファイルのシステムツリーを基準にしてプロジェクトファイルを生成します。DevelopやReleaseなどのスキームによってplistファイルを分けたい場合は事前にディレクトリを整理しておかないと面倒なことになります
- includeやSetting Groupsを利用する
- これも上の記事に書いてあるのですが、大規模なプロジェクトであればproject.ymlが相当な行数になります(リファクタリング前は1000行ぐらいでした)。includeを利用してtargetごとにファイル分割したり、Setting Groupsを利用して共通部分を切り出したりすれば可読性が高まります。
実装内容は大体こんな感じでしたが、実はこのPR、まだレビュー途中なのです!閉じるまで雇用期間を延ばしていただくよう現在申請中です(嘘)
今後は他の方に引き継ぐことになると思いますが、今までレビューしていただいた皆さんには感謝の気持ちでいっぱいです。ありがとうございました!
その他
開発とは全く関係ないのですが、配属して1週間ぐらい経ってから、Rakuma DU All Handsに参加しました。Rakuma DU All Handsというのは、月に1回ラクマ内の様々なチームが集まり、開発状況の共有をしながら横のつながりも広げようという趣旨で開催される、実に楽しいミーティングです。
僕は新規メンバー枠でいきなり10分間の自己紹介を行いました。80人もの大人数の前で自己紹介するのは初めてでしたが、zoomのコメント欄を見ているとYouTube Liveでもやっている気分になり、かなり楽しかったのを覚えています。
それ以外にもエンジニアのLTや、各チームの開発事情などにも触れることができました。
個人的に一番楽しかったミーティングですw
大変だったこと
ここまで、開発について話してきました。次に、大変だったことについてご紹介します。
まずは、フルリモートだったことです。これはやはりメリデメあると思います。通勤時間が3時間近くカットできたのはとても大きかったです(川越から二子玉川はかなり遠いです)。おかげで睡眠時間がたっぷり確保できました。一方で、業務以外のコミュニケーションはあまり取れませんでした。欲を言えば、もう少しチームの方達と仲良くなりたかったです...!
もう一つは、GitHubのログイン問題です。ラクマではリポジトリ管理にGitHubを使っており、普段は何の問題もなかったのですが、ある日急にログインセッションが消えてログインできなくなってしまいました...
ラクマではGitHubアカウントの2段階認証をデフォルトで必須にしているらしいのですが、認証コードを受け取るデバイスの設定をしていなかったのでGitHubへのお問い合わせがapproveされるまではログインできませんでした。インターン終了まであと1週間ちょっとという追い込みの時期だったのでかなり焦りましたw日本時間3月9日12:03頃にGitHubにログインしている全ユーザーのセッションを無効化しました。これはごく少数のユーザーに影響を与える極めてまれなセキュリティ問題が発生する可能性があっためです。詳細はこちらをご覧ください。 https://t.co/zGREwlXwJl
— GitHub Japan (@GitHubJapan) March 9, 2021
チームの良いところ
最後になりますが、ラクマのクライアントチームの良いところをご紹介して終わろうと思います。
まずは距離の近いコミュニケーションができるところです。ほとんどのチームメンバーとは画面越しでしか喋らなかったのですが、どの方も気さくに接していただけたのであまり壁は感じませんでした。ミーティングでも週に一回、個人の成果を報告する場があるのですが、最後に少し雑談タイムのような流れになるので退屈に感じることはなかったです。
2つ目はコードレビューがとても丁寧なところです。インターン期間中に上げたPRには平均で10件前後のコメントがつき、かなり念入りにレビューしていただけました。ある週のCrash-free users(クラッシュの影響を受けなかったユーザー)が99.9%だったらしいのですが、これは丁寧なレビュー文化があったからこその数字だと思います。
3つ目はコアバリューを大切にしているところです。ラクマには3つのコアバリューがあるのですが、ミーティングで毎週振り返りをしていました。目の前の仕事に集中していて本来の目的を見失うことは僕もよくあるので、そういう意味ではとても良い取り組みだと思いました。
急にやってきたインターン生にもかかわらず柔軟に対応していただき、ラクマの皆さんにはとても感謝しています。お忙しい中、2ヶ月間お世話になりました!