Ark's Blog

数学とか競プロとかCTFとか参加記とか備忘録とか

ようこそ

Cookpad Summer Internship 2019 参加記

internship.cookpad.com

Cookpadのサマーインターンに行ってきました。

参加したコースは10 Day Techです。 前半の5日間が講義形式で、後半の5日間はPBL or OJT*1インターンでした。

ちなみに春もCookpadインターンに参加させていただきました。

前半

5日間を通して、Web開発基礎、サービス開発、APIサーバ、モバイル、インフラを一通り学べるカリキュラムでした。

github.com

講義の内容はそのうちここに上げるそうです。

Day 1:Web開発基礎

RubyとTypescriptを使いました。両方ともほとんど触ったことがなかったけど、概念的に知ってるものは多かったので理解しやすかったです。

今までフロントはJSを使ってたけど、ぼちぼちTSに切り替えようかな。

Day 2:サービス開発

Cookpad流のサービス開発の手法を学びました。

実際にユーザストーリーを立てて、アイデア出しをしたりインタビューをしたりして、最後にプロトタイプをつくって発表するところまでやりました。

ペルソナをチーム内で共通認識したり、仮説検証を繰り返し行ったりの重要性を感じました。

僕はハッカソンなどでゲームをつくった経験があるのですが、そのときに要求される「ユーザ視点になって考える」や「伝えたいことを一番大事にしてプロトタイプをつくる」という能力と関連する部分が多くあっておもしろかったです。サービス開発は"エンターテイメント"の一面もあるのだなと。

プロトタイプではMarvelというものを使用しました。実際にコードを書かなくてもプロトタイプができるのはおもしろいし、この手軽さはかなり魅力的なので他の人にも広めたいなと思いました。

Day 3:APIサーバ

マイクロサービスに欠かせない概念の一つとしてBackend For Frontends (BFF) *2とその実現方法の一つとしてGraphQLを学びました。

GraphQLは既存のRESTful APIをより扱いやすいものにしたものというゆるふわな認識だったけど、実際に何をするものなのかは知らなかったので良い機会でした。

APIをいい感じに抽象化してFrontとBackendのパイプ役となっていて、いいですね。 FrontとBackendの連携は色々やりづらい部分があるけど、そこを円滑にしてくれるのはチーム開発の効率を上げてくれそうです。

Day 4:モバイル

iOSAndroidかで選択できたので、僕はAndroidの方を選びました。

Day 3のハンズオンでつくったAPIを用いて、Androidアプリをつくるという内容でした。

画面遷移ではNavigationという機能を用いました。画面遷移はアプリでもゲームでも割とめんどくさい部分ですが、それをGUI上のグラフのエッジの張替えだけで実現できるのは手軽でとても便利でした。遷移後に「戻る」遷移も自動でつくられるのも最高です。めっちゃ:+1:しました。

Day 5:インフラ

Cookpadのインフラ構成の歴史や今の構成に至った経緯などについて聞きました。また、認証認可やDynamoDBについての講義もありました。

データ構造は好きだけど、大規模データに関連するデータ構造に関する知見は浅かったので、これから色々勉強したいです。DynamoDBの話を聞いて一層興味が出ました。 あと、大規模なサービスのアーキテクチャを考えるのがとてもおもしろそうで、そういうのもやってみたいと思いました。

この日は、ちょうどAWSの大規模障害が発生するというハプニングもあったのですが、SREの人たちがSREをし始めて一瞬TAが消えてしまったのはおもしろかったです(失礼でごめんなさい、対応お疲れ様です)。Availability Zoneの話も聞けてよかったです。

後半

後半の5日間では、就業形式のOJTコースです。 配属先はDWH(データウェアハウス)の部署でした。

techlife.cookpad.com

具体的な内容は話せないですがこれに関連したなにかをしました。

DWHという言葉は初めて聞いたのですが、大規模なサービスを運営していると、データ活用のためのこういう需要が生まれてくるのだな知りました。

SQLRubyもほとんど経験がなかったので、最初は全体の把握に時間がかかってしまいましたが、徐々に進捗が生め出せてきたのは良かったです。

最近は、技術基盤とかインフラとかの領域に興味があったので、とても貴重な経験でした。

その他

社内にキッチンがあります!そこで料理されたお昼ごはんを食べたり、実際にそこで料理して食べたりしました。

僕は人と料理するのは好きな方なので、ほぼ毎晩他のインターン生と一緒に料理して食べてました。

あと、クッキングバトルのイベントもありました。Cookpadらしい!

(勝手にツイートを拝借させていただきます)

まとめ

非常に充実した密度の高い10日間でした。周りも強い学生エンジニアばかりで色々刺激を受けました。

社員の方々、インターン同期の方々、ありがとうございました。10日間は短いですが、短いとは思わせないほどのここに書ききれないたくさんの学びや刺激がありました。今後に活かしていきたいです。

最後に飯テロを失礼します。

*1:PBLはProject-Based Learning、OJTはOn-the-Job Trainingの略。たぶん

*2:これ、Backend For FrontendだったりBackend For FrontendsだったりBackends For Frontendsだったりで、微妙に表記ゆれがありますね。単数/複数を意識してるかどうかの違いでしょうか