Posts クックパッドでインターンしました
Post
Cancel

クックパッドでインターンしました

2021 年 4 月から 6 月中旬まで二ヶ月半の間、クックパッドの就業型インターンシップに参加しました。その振り返りをこの記事に残します。

仕事内容

所属はクックパッド iOS アプリの買い物サービス開発部です。

買い物サービスというのは、クックパッドレシピアプリの中に、生鮮食品EC「クックパッドマート」サービスを使う機能です。私は買い物サービスに携わり、主に SwiftUI による機能実装をしました。

関連記事: SwiftUI を活用した「レシピ」×「買い物」の新機能開発

つくれぽカードの実装

商品ページで、該当商品を使ったつくれぽの表示カードの実装。

商品消失時の返金申請フォローの実装

ユーザーが指定した場所で商品を受け取る時に、もし商品がなかったら、本来なら自ら FAQ 通しで問い合わせフォームを記入してから提出しなければなりません。この手続きを簡潔化するため、商品消失の返金申請フォローを作りました。

コンテナ確認消失商品選択返金請求

ボタンの汎用化

クックパッドでよく見かけるボタンですが、買い物サービスで SwiftUI の実現が各々しているので、それを汎用化しました。有効状態、シンボルアイコンと Dynamic Type にも対応。

他にも、「日付変更したときのダイアログ表示」、「商品詳細のレイアウトの調整」、「受け取り場所設定で、郵便番号を入力する時「受け取り場所が見つからない」バナーを非表示に」、「利用できなくなったクーポンを表示する」、「受け取り名設定画面改修」、「かいものタブTOPに「新商品」のセクションを追加」をやりました。複雑な仕事ではないため省きます。

コードレビュー

主に SwiftUI、たまに UIKit 部分のコードレビューをしました。

WWDC19 SwiftUI がリリースされた直後、私は すぐそれを使って個人アプリのデレガイドを開発し始めたので、企業で働く iOS エンジニアに比べると、SwiftUI を勉強する時間や試行錯誤の機会がより多くありました。これはこれで幸運なことですが、クックパッドのようなプロダクション環境で SwiftUI を取り組んでいる企業に出会えることがさらなる幸運ではないかと、思っています。

インターン成果発表会で、同僚から「SwiftUI に関する知見を持っててコードレビューで助かりました」みたいな評価を頂いて本当に嬉しいと感じました。

社内技術記事の執筆

自ら SwiftUI に関する技術記事を書きました。

  • ZStack と background / overlay の使い分け

    深い知識とは言えないが、クックパッドのコードを例にして、両者の違いを説明してみました。

  • WWDC21 から見る買い物 SwiftUI コードへの考え

    WWDC21 Digital Lounges - SwiftUI Lounge で多くの人の問答集を見て、GeometryReader の使い方Spacer vs .frame(maxWidth:)UIHostingController 3つの方面から、現在クックパッドの SwiftUI コードの是非を議論してみました。

学んだこと

チームでの働き方

チームでの開発フローが個人開発と全く違いますね。

個人開発の場合、思いついた機能を実装する前、頭の中に UI デザインはしますが、わざわざ Sketch や Figma にすることはありません。 いつもコードを書きながら UI を模索していきました。

その代わり、チームでは、デザインだけじゃなく、多くのことはみんなで話し合って決めていきます。問題や機能を issue や気になるシートに貼って、実行するかの意思決定をチームで決定し、デザイナーさんからデザインしてもらって、実装して、他のエンジニアにコードレビューしてもらって、最後にマージします。この一連のことは個人開発ではない、新鮮な体験でした。

Git

インターンに参加する前、Github は使っていますが、いつも個人開発をしてて、OSS に貢献したこともないので、せいぜいコードのバックアップや、機能の分岐開発までしか使っていませんでした。

それで、最初にチーム開発に参加しる時、PR の出し方すらわからなくて、マージとか、衝突の解消などは尚更です。それを踏まえ、時間をかけて、やっと Fork -> New Branch( -> Merge) -> Commit & Push -> Pull Request という開発の流れに慣れました。

大型アプリのアーキテクチャと基盤

『iOS アプリ設計パターン入門』や、objc.io の『App Architecture』などで、いろんなアーキテクチャについて学びましたが、やはり本番環境で手を動かして実装してみないと、各アーキテクチャの実装方法と長所・短所などの感覚は掴めません。

クックパッドは VIPER を採用してて、マルチモジュールも導入しています。各部分の責任がはっきり切り分けられていて、おかげで新しい機能を入れる時、既存したものを模倣すれば大体正確に動かせます。アプリの基盤がちゃんと整えられたらエンジニアの開発が素早くできることを実感しました。

関連記事:コード生成を用いたiOSアプリマルチモジュール化のための依存解決

不足

日本語

同僚と話し合うときも、社内で記事を書くときも、話したいことをうまく言えず、伝わらず、いつも語彙力のなさに悔しがっています。元々かなり内向的な性格ですので、その上日本語が下手であることを加えると、普段なんにも言えなくなってしまいます。

開発環境の構築

CocoaPads、XcodeGen、CI などの、現場にいなければ学べない、開発環境の構築に関する知見はまだまだ不足しています。今後は新機能の開発だけでなく、他のエンジニアにもより便利な開発環境と基盤を提供できるようにしていきたいですね。

This post is licensed under CC BY 4.0 by the author.

【SwiftUI】OptionalObservedObject の実現

Swift で数値を高速的に読み込む方法

Comments powered by Disqus.