平成最後の夏、クックパッドインターンの夏

8月6~17日まで、クックパッドさんのところでインターンシップということでお世話になりました。 その感想とかをザーッと残しておきます。

インターンまで

Twitterインターンの応募を見て「おっ、面白そうだな」と思って応募しました。 一次試験(?)はちょっとした問題を出されて、それを解くといった感じの筆記試験(?)みたいな感じでした。 次に面接があって、そこで説いた問題について聞かれたりしました。

試験の内容は「外に漏らしちゃダメ」みたいなこと書いてた気がするのでアレですが、 最後の問題がとても難しかったです。

その後、メールが送られてきて無事合格。 7月の初めごろには決まってたので、かなり早いほうだったと思います。 (予定立てやすかったので、めっちゃありがたかった)

全体の流れ

全体として、前半は講義形式で、後半はプロジェクト実習/OJTに分かれて進みます。 自分は後半はOJTコースに進みました。

前半 ~超圧縮講義~

講義形式ということで、クックパッドで実際に第一線で活躍している方が講師となって、 「クックパッドを構成している技術」という感じでインフラからバック、フロントからサービス開発まで、 ハンズオンを交えながらたくさんのことを教わりました。

講義は超濃密で、というか超圧縮されていて、 講義を聞いてからハンズオンでそれを解凍しつつ手を動かして実行して…という感じでした。 確かに、インターンの応募ページで「様々なことについて...」とか書いてありましたが、 「クックパッドだしまぁRailsとフロントを少しくらいだろうなぁ」と思ってました。 参りました。

1日目

最初に簡単な挨拶や自己紹介、必要な書類を書いたりして、 その後に「いわゆるWEBとは?」ということでHTTPやサーバ、クライアントといった基礎知識の講義。 HTTPの仕様に関することや、実際にどうやって通信は行われているかといった、Webの基礎知識的なことをやりました。

2日目

「サービス開発とは?」ということで、普段学生だと体験できないようなサービス開発の基本を学びました。 ユーザーを想定して、そのユーザーに関するペルソナ、シナリオを組み立てて、 「ユーザーはどんな不満を抱えていて、どうすればそれを解消できるか」という流れを実際に体験することができました。 実際の仕事ではこんな風にサービスを作ってるんだという感覚を掴めて楽しかったです。

3日目

「バックエンドとは?」ということで、Railsを使って実際にサーバ側のアプリを作成しました。 この日、台風が接近しているということで、午前はRailsに関する講義で、午後からはホテルからリモート(?)で作業するという流れでした。 Rails自体は、他のフレームワークの経験からすんなりと馴染めました。 にしても、ホテルからリモートインターン(?)をするなんてまぁないだろう経験ができて良かったです(?????)

4日目

「フロントエンドとは?」ということで、ReactNativeを使って3日目に作成したアプリのクライアントを作成しました。 個人的に、モバイルアプリの開発は環境構築が大変という認識で今までやってこなかったんですが、ReactNativeでサクッと作れて面白かったです。 PWAやElectron、ReactNativeのような「Webの技術をネイティブにも」というアプローチはすごく好きなので、この辺りは良いなぁと思いました。

5日目

「インフラとは?」ということで、3日目に作成したアプリをEC2にのっけて、どれだけ高速化できるかというISUCONみたいなものをしました。 最終的にDocker化して運用というところまであったんですが、自分はそこまで行けずにEC2をスケールするように設定してRDSをつなげて、 とりあえず動くところまでしかできなかったです。 ちょうど最近、今VPSに乗っているものをGCPに移し替えたいなぁとか考えているので、とても貴重な経験になりました。 個人でクラウドサービスをがっつり使うのは金銭的に難しいので、楽しかったです

5日とも超濃密で超圧縮されていて、時間が足りないくらいでした。 ここまで幅広くすべてをやってる人なんてそう居ないでしょうし、 そもそも個人だと難しいような体験ができたので、全体を通してすごく楽しかったです。

後半 ~世界一のRailsアプリにコミット~

後半はOJTコースということで、技術基盤チームの決済基盤を開発しているチームに配属されました。 5日間だけでしたが、決済基盤側とクックパッド本体側にPRを出してマージされました。 さらにデプロイもさせてもらって、貴重な経験ができました。

成果としては、あるissueをどうやって解決するか考えて、実際に動いているコードを読んで、実装して、テストを書いて...と、 一通りの流れを行いました。 ユーザーから見ればすごく地味な変更でしたが、どうすればよりユーザーが使いやすいか、 いろんな方とコミュニケーションをとりながら実装を進めていって、いつも一人でやってることが多い自分としてはとても新鮮でした。 また、Cookpadの内部や実際に決済を行う仕組み等、普通なら知れないようなことを知れて面白かったです。

あと、やはりクックパッドだけあって、食事がすごくおいしかったです。 キッチンで作ったりもできるみたいで、メンターの方とか他のインターン生の方とかと料理作ったりもしました。 おいしかった...

感じたこと

技術的な面としては「やっぱり大きいサービスはいろんなもののスケールが違うなぁ」と感じました。 この辺りは個人では絶対に感じることができないことなので、すごく面白かったです。

また、cookpadも20年以上続いているサービスで、当然整理されていないコードがあったり、 「世界一大きなモノリシ(ry」と言われるだけあって、デプロイに工夫が必要だったりと、大変なポイントがいくつかありました。 それをいろんな方法で解決していてすごいなぁと感じてます。

技術以外の面でいうと、社員の皆さんが楽しく仕事をしているなぁとすごく感じました。 自由にコードを書いたり仕事しているのを見て、良いなぁと思いました。

まとめ

皆さんほんとに良い方ばかりで楽しかったです。 実際に動いているコードに手を入れていったのは良い経験になりましたし、 自分が今までやってきたことが通用したり、逆に会社ならではで気を付けないといけなかったり… とても貴重な2週間でした

ご一緒させていただいた皆さん、もし機会があればまたよろしくお願いします