Cookpad Summer Internship 2021 10 Day Techコースを開催しました!

f:id:fufufukakaka:20210426121451j:plain

研究開発部の深澤(@fukkaa1225)です。今年はエンジニアの立場から新卒採用も担当しています。

4月の記事で告知したサマーインターンシップのうち、10 Day Techコースを8月16日〜8月27日で開催しました。この記事ではその内容を紹介します。

3 Day Product Designコースについては、以下の記事をご覧ください。

10 Day Techコースは、前半5日間が講義形式、後半5日間が実践形式でした。 前半は技術講義とサービス開発講義の2本立てです。 後半はOJTプログラムとPBL(Project-Based Learning)プログラムのそれぞれに分かれて、サービス開発の実践に取り組みます。

昨年はオンラインのみでの開催でした。今年は前半の講義パートをオンラインのみ、後半の実践パートではオフィスに来訪されることを希望した方にはオフィスで、それ以外の方々は前半から引き続きオンラインで参加する形式を取りました。例年と同様、多くの学生の方々にご参加いただきました。本当にありがとうございました。

前半

まずは前半の講義について簡単にご紹介致します。

1日目: フロントエンド講義

初日は1時間弱ほど、イントロダクションとしてクックパッドの取り組みの紹介や自己紹介を行いました。

その後、今年の技術講義のテーマを発表しました。今年のテーマは「ミニクックパッドマートを作る」でした。クックパッドマートを題材として、クックパッドの中で使われている技術スタックを一気に学習・実践することが狙いでした。

イントロダクションを終えた後、フロントエンド講義からいよいよ技術講義がスタートしました。 2021年の春インターンでも用いた動画を見るという事前準備を前提として、午前中の1時間でクライアントサイドから見たGraphQLに関する講義を行いました。

その後、午後はミニクックパッドマートのweb画面を作ることを目標として、基礎課題・発展課題に取り組みました。

2日目: iOS講義

2日目のiOS講義は1日目に実装したミニクックパッドマートの画面を、SwiftUIで実装するという内容でした。iOS未経験の方がほとんどで、環境構築のところが難所ではあったものの、 SwiftUIを実際に触ってみて使いやすいと感じた人が多かったようです。ほとんどの人が基礎課題を完了させるところまで実装を完了させていました。

3日目: サーバサイド講義

3日目はサーバサイド講義でした。例年の講義では、APIを前半に自分たちで作ってから、その自作APIを使って後半の講義で画面を作るという流れでした。しかし、各自の進捗度合いなどによって想定仕様と微妙に異なる自作APIとなってしまい、画面を作る際に苦労してしまうことがありました。

これを踏まえて、今年はあらかじめ完成しているAPIサーバをこちらで立てて、前半に画面を作る講義を配置してAPIの仕様を把握しながら画面を作りました。その後、3日目のサーバサイド講義で、これまで使ってきたAPIを自分たちで実装してみる、という流れをとりました。

実際に作成してみるのは、GraphQLのAPIサーバです。これをRubyで実装する講義でした。また、決済を担当する別サービス(minifinancier)とのサービス間通信をgRPCで実装するなど、発展的な内容も多く盛り込まれた講義でした。非常にボリュームの多い内容で、多くの方々が苦労されていましたが、それでも何とか乗り切っていました。

4日目: インフラ講義

4日目のインフラ講義では、クックパッドにおけるSREが果たしている役割とその歴史を、実例を交えつつ紹介しました。演習パートでは、基礎課題としてTerraform・hakoを用いて、ミニクックパッドマートをデプロイした他、minifinancierをデプロイしてgRPCのサービス間通信を張る、発展課題として静的ファイルをS3+Cloudfront構成で配信するなどの課題に取り組みました。

スライド: https://static.cookpad.com/techlife/cookpad_summer_internship_2021_infra/main.pdf

補助資料

5日目: サービス開発講義

前半最終日はサービス開発講義を実施しました。午前はクックパッドのサービス開発に対する考え方や開発プロセスを座学形式で学びました。 午後は、午前で学んだことをベースにインターン生同士でチームを組み、ZoomやFigmaを活用したオンラインでのグループワークを行いました。グループワークでは、与えられたテーマを元にユーザーインタビューや価値仮説、アイデア出し、プロトタイプの作成までを一貫して実践しました。講義の終盤では実際に作成したプロトタイプをユーザーにテストしてもらい、それら結果をまとめて各チームでの成果発表を行いました。

「丸1日コードを書かない講義です」とアナウンスしたときからどんな講義なんだろう?と皆さん気になっていたようでした。実際に取り組んでみて、サービス開発について体系的に学び実践する機会がなかなかないので、貴重な良い経験ができたと好評でした。

後半

後半はPBLコースとOJTコースそれぞれに分かれての実践パートでした。

f:id:fufufukakaka:20210906103359j:plain
講師との壁打ちの様子

f:id:fufufukakaka:20210906104529j:plain
雑談していた様子

PBLでは前週のサービス開発講義の内容を元にして、サービス開発の実習を行いました。「一人暮らしの料理」に関する課題を見出し、それを解決するアプリケーションを提案、実装・デプロイしきる、という工程を5日間という短い時間でやりきるというタイトなものでした。 仮説検証、実装時の技術相談などを社員がサポートしつつ着実に進めていった結果、最終的にはほぼ全員がデプロイまでやりきり、無事に成果を発表できていました。

f:id:fufufukakaka:20210906103047j:plain
PBL成果発表の様子、 撮影:WeWork Oceangate Minatomirai

最終講評はCTOの成田、レシピ事業部部長など4名が成果物を真剣に審査しました。実際にそれで課題を解決することができているのか、技術力をどれだけアピールできているか、など複数の視点から評価を行いました。

f:id:fufufukakaka:20210906102845j:plain
講評者のCTO成田、 撮影:WeWork Oceangate Minatomirai

厳正なる審査の結果、技術観点・サービス観点から優秀だった方にはそれぞれ賞を贈らせていただきました。どちらもそれぞれ、特別な賞品を贈呈いたしました。

OJTではクックパッドの各部署に配属され、メンターの指導を受けながらサービス開発を実践してもらいました。レシピサービス、クックパッドマート、基盤系の部署などさまざまな部署に配属された後、みなさんそれぞれのタスクをやり遂げていただきました。 最終日にはPBLコースと合わせて、各自が取り組んだタスクを発表してもらいました。ほとんど全員がPRのマージ、本番環境へのデプロイまでこなしており、発表を聞いていた人全員がみなさんの偉業に驚いていました。

f:id:fufufukakaka:20210906115758j:plain
OJT成果発表の様子、 撮影:WeWork Oceangate Minatomirai

インターンシップを終えて

簡単にではありますが、10日間のサマーインターンシップを振り返させていただきました。 昨年はすべてオンラインでの開催でしたが、今年は後半の実践プログラムについてオンラインとオフィスを選択希望制にしました。昨今の情勢もあり全員にご来訪いただくことは叶わない難しい状況でしたが、恵比寿からみなとみらいに移転した新しいオフィスを、参加者の方々に体感いただく機会を設けられて良かったと感じています。 全体を通じてリモート中心の設計という点は昨年と同様であったため、Zoom、Slack、Kibelaを最大限に活用しました。また、これまでの取り組みを踏まえて、より一層双方向のコミュニケーションを意識しました。具体的にはSlackでpollやreactionによる双方向的でカジュアルなコミュニケーションを織り交ぜたり、Zoom上でブレイクアウトルームを活用したチームごとの成果発表やワークを取り入れる講義などがありました。 今回得られた知見を、次回以降の取り組みにも活かしていきたいと思います。

ノベルティ

f:id:fufufukakaka:20210906103238j:plain
ノベルティセット

f:id:fufufukakaka:20210906103300j:plain

f:id:fufufukakaka:20210906103327j:plain
オフィス招待カード

写真のノベルティセット(アメ、ラムネ、スマートフォンスタンド、マルシェバッグ、うちわ、ステッカー)を事前に送付しました。 また、全日リモート参加を選択された方には、別の機会で改めてオフィス見学に来ていただけるように、オフィス招待カードも送付させていただきました。 この他にサマーインターンシップのロゴが入ったZoomのバーチャル背景用の画像も配布しています。

まとめ

以上が、Cookpad Summer Internship 2021 10 Day Techコースの開催報告です。 ご参加いただいた皆さま、本当にありがとうございました!

今年のサマーインターンシップは終わってしまいましたが、クックパッドでは就業型インターンシップを通年で募集しています。 興味のある方はぜひご応募ください!

RubyKaigi 2018 ありがとうございました!

人事部の@mamiracle__ です。好きな Ruby のメソッドは Enumerable#entries です。みなさまからの entries をお待ちしています💖

さて、クックパッドは先日の RubyKaigi 2018 に Ruby Committers Sponsor と Network Sponsor としてスポンサーをいたしました。私たち人事メンバーも、ブースやドリンクアップを通じて、RubyKaigiを盛り上げることに貢献できたのではないかとおもっています。

会期中には、クックパッドに所属する桑原仁雄(@pocke)、Kirk Haines(@wyhaines)、 笹田耕一(@ko1)、遠藤侑介(@mame)がスピーカーとして登壇し、심 상용(@riseshia)がライトニングトークを行なっています。また、RubyKaigi運営では、オーガナイザーとして @nano041214@asonas@sorah が、スタッフとして @mozamimy が活躍してくれました。

イベント参加のご報告として、当社所属のメンバーの発表やブースの紹介をいたします!!!

発表

A parser based syntax highlighter

桑原仁雄(@pocke)からはパーサーベースのシンタックスハイライターであるIroに関して発表がありました。通常のシンタックスハイライターで利用されている正規表現では、複雑なプログラム表記でうまく機能しなくなってしまいがちですが、パーサーベースであればそういった問題が生じないそうです。また、gemとして提供されているので、Vimだけではなく色々なエディタでも活用できるとのことです。

また、RubyKaigi効果で意識が高まった本人からも力強い宣言がでておりますので、ぜひ今後にご期待ください!

It's Rubies All The Way Down

自身が2001年以来の Rubyist であると紹介した Kirk Haines(@wyhaines)からは、主に Web アプリケーションを動かすときのテクノロジスタックについて、それぞれの時代における Ruby で作られたソフトウェアの紹介や、概念実証(Proof of Concept)が示されたりしました!

特に Web アプリケーションにおいては Rack の登場がキーポイントになり、ミドルウェアとWeb サーバーの関係がそれ以前と比べてシンプルになったという説明は納得できました。また、10年以上前の Ruby では、ロガーやロードバランサーなどをやるには遅すぎると言われることがありましたが、近年の Ruby では十分なパフォーマンスが確保できることも示され、Ruby の進化がよくわかりました。

Guild Prototype

Ruby の新しい並行プログラミングモデルである Guild について、笹田耕一(@ko1)から発表がありました。冒頭では、シングルプロセスで合計40コアのCPUを使いきるデモがされていて、未来感ありましたね。

従来の並行プログラミングでは、データを共有するために競合状態をプログラマが頑張るか、データを共有しないという手法が主にとられてきました。Guild では、メンバーシップという概念を導入することで、容易にデータを共有しつつも、マルチコアを活用できるようにしています。Rubyで実用段階になるのが、今から楽しみです!

Type Profiler: An analysis to guess type signatures

遠藤侑介(@mame)の発表では、提案されている複数のRubyの型システムを概観したあと、Ruby 3に必要となってくる型データベースのために、型プロファイラーの導入が提案されました。型プロファイラーは、いくつかの手法で型を推測するための機構です。静的解析や動的解析をつかって、いい感じに型を推測できないかという試みです。それぞれの手法にメリットやデメリットがあって、まだまだ難しいところも多いようですが、 Ruby の改善が着実に進んでいる様子が伝わってきました。

また、ブースの質疑応答タイムでは、海外のファンからチョコレートのプレゼントをもらうなど、大人気ぶりを発揮していました!

ライトニングトーク

Find Out Potential Dead Codes from Diff

Cookpad のような長期でメンテナンスされているコードでは、どうしてもどこからも呼び出されないデッドコードが生まれてしまいます。심 상용(@riseshia)のライトニングトークでは、未使用コードの差分からデッドコードを検出する手法について発表がありました。クックパッドでも実際に使われて効果がある手法とのことです。

ブースやグッズ

クックパッドが海外展開している国を示した世界地図や、「Cookpad storeTV」、ユーザーボイスやミッションなどを詰め込んだオリジナルボードなどを展示しました。

f:id:cookpadtech:20180614152425j:plain
(地図にはクックパッドが展開している68カ国を⭐シールで示しました)

ノベルティには今年初めて作った「ロゴ入りお箸」や、仙台をイメージした「ずんだ餅どら焼き」を用意しました。どら焼きは、仙台の老舗和菓子屋さん「こだまのどら焼き」さんに相談をして作っていただきました。控えめな甘さのずんだ餡と、もちもちの食感が美味しくてあっという間に完売してしまいました!

【RubyKaigi 2018のスポンサーで仙台にきています♦️】 クックパッドは毎年、Rubyというプログラミング言語のカンファレンス #RubyKaigi に協賛しています🤗 2018年は5/31〜6/1まで #仙台 での開催なので、 #ずんだ餅どら焼き を作ってみました❤️ 仙台の老舗 #こだま さんのどら焼きです! クックパッドでは、ユーザーさんにより速く良い価値を届けるために、技術もすごく大事にしているんですよ! 今後はそういったこともご紹介できればと思います🎶 #クックパッド #テクノロジーカンパニー #どら焼き #ずんだ餅 #仙台名物 #こだま #cookpadorayaki #クックパッどら焼き #rubykaigi #rubykaigi2018 #cookpad #makeeverydaycookingfun #毎日の料理をたのしみにする #♦️ #💎 #🖥 #🥞 #🤗

クックパッドHRさん(@cookpad_hr)がシェアした投稿 -

その他ブースでは、クックパッドでRubyフルタイムコミッターとして活躍する遠藤侑介(@mame)と、仙台のずんだ豆にちなんで「mameさんの豆つかみ」も実施!CTOの成田一生(@mirakui)をはじめとして、まつもとゆきひろさん(@matz)さんやAaron Pattersonさん(@tenderlove)さんも参加してくださる盛況なイベントとなりました!

f:id:mamiracle:20180614153621j:plain
(今回の最速王はクックパッドHRメンバーで叩き出したタイムは0:06:92でした!)

Cookpad X RubyKaigi 2018: Day 2 Party

2日目の夜に開催したパーティには、90名近くのゲストが参加してくださいました!RubyKaigiの会期中にパーティを企画するのは、クックパッドにとってこれが初めてでドキドキしていましたが、多くの方にお楽しみいただけて本当に良い機会となりました!

【Asakusa.rb × Cookpad】Meetup after RubyKaigi 2018

RubyKaigi 2018終了後の翌火曜日には、Asakusa.rbとのコラボレーションイベントを開催しました!Railsコミッターであり、Rubyコミッターの松田明さん(@amatsuda)に司会を務めていただき、RubyKaigi 2018 の余韻を楽しみました。

この日は「Rubyコミッターによる RubyKaigi 2018の見どころ振り返り」「RubyKaigi 2018会期中に決まったRubyの次の方向性について」というふたつのテーマを設定。笹田耕一(@ko1)と遠藤侑介(@mame)を中心に、飲みながら食べながら語り合いながら、会場全体で楽しむことができました。

f:id:mamiracle:20180614153523j:plain
(クックパッドイベント恒例のキムラシェフの絶品ご飯)

おわりに:Rubyとクックパッドについて

クックパッドは、2008年にRuby on Rails へとリニューアルしてから、世界的にも大規模な通用事例として知られてきました。Ruby への貢献を現在も強化しており、二人のフルタイムコミッターを迎え入れクックパッドで次世代Ruby の開発に取り組んでいます。

また、技術をわたしたちが使うことはもとより、社外にも共有することで価値を生むようなソフトウェアやライブラリは、積極的にオープンソース化を行い公開しています。

今後もRuby を含む、さまざまなオープンソースソフトウェアの発展に貢献できるよう、クックパッド一同頑張りたいと思います!

次は8月30日から開催されるiOSDC Japan 2018に参加する予定です。みなさまにお会いできることを楽しみにしています😄

f:id:mamiracle:20180618181226j:plain (来年こそはRubyKaigiに参加した社員全員で集合写真撮るぞ!)

クックパッドでRubyを書きたいなと思ったら...
- バックエンドエンジニア(料理動画・広告配信)
- UXエンジニア
- バックエンドエンジニア(決済基盤)
- Webアプリケーションエンジニア
- セキュリティエンジニア
- ソフトウェアエンジニア (Site Reliability)

Cookpad Tech Kitchen #14 〜海外で働く〜 開催報告

Cookpad UKに出向中の西山(@yuseinishiyama)です。

去る2月16日、弊社で定期開催しているCookpad Tech Kitchenの一環として、海外事業をテーマとしたイベント『海外で働く』を開催しました。私も一時帰国して登壇しましたので、その内容をここで紹介させてください。

f:id:yuseinishiyama:20180301010500j:plain

f:id:yuseinishiyama:20180301010811j:plain

Introduction

まず最初に、Engineering ManagerのLeonard Chin(@l15n)から海外事業全体の概要説明がありました。

  • そもそもなぜ海外でやるのか
  • なにを目標としているのか
  • 日本のCookpadとはどういう関係性なのか
  • どういう組織体制なのか

などをカバーする内容で、詳細を以降の登壇者が埋めていきます。

Working at Cookpad UK

次に、私のほうからCookpad UKで働くことをテーマとした発表をしました。

海外オフィスがどこにあるか、そこでどんなメンバーが働いているのか、どれくらいの英語力が求められるのか、という点について触れています。

Workflow and development in globally distributed mobile teams

Data AnalysisチームのPaweł Rusin(@RusinPaw)からは海外事業部のワークフローについての説明がありました。

クックパッドの海外事業には様々なメンバーが複数のタイムゾーンからコミットしています。チームの多様性は、サービスの国際化という観点では非常に大きなメリットがありますが、一方で多くのコミュニケーションの問題を引き起こします。この発表では、我々がどのようなマインドセット、ルール、ツールを用いてこうした問題に対処しているかが言及されています。

20言語以上に対応している検索システムが楽しくない訳がない

次に、同じく一時帰国した滝口(@rejasupotaro)から、検索システムの話がありました。

様々な具体例を用いて、複数の言語をサポートし、かつ、個々の地域に合わせた細かなチューニングを行うことの難しさ(と楽しさ)が説明されています。

Architecting for Experiments at Cookpad Global

次に、iOSエンジニアのChristopher Trott(@twocentstudio)からプロトタイピングについての話がありました。

クックパッドの海外事業はプロダクトとしてはまだまだ初期のフェーズですが、一方で既に多くのユーザーが世界中にいて、日本で安定した収益源があるという点では、単なるスタートアップとは異なります。こうしたユニークな状況下で、既存のユーザーに悪影響を与えずに、新しい機能を試すためには多くの課題があります。

おわりに

クックパッドが海外事業をやっていることをなんとなく耳に挟んだことがあっても、その詳細についてご存知の方はほとんどいらっしゃらないのではないでしょうか。このイベントを通じて、皆さんにクックパッドの海外事業に興味を持っていただき、そこでどんなことが行われているのかについて、より具体的なイメージを持っていただけたなら幸いです。

イベントに参加していただいて、もしくは、この記事をご覧になってUKオフィスで働くことに興味を持ってくださった方は、ぜひ以下のリンクからご応募ください。

info.cookpad.com

クックパッドでは今後も様々なテーマで継続的にイベントを開催していく予定です。開催予定のイベントの詳細は以下のリンクからチェックできます。ご興味をお持ちいただけましたら、お気軽にお越しください。

クックパッド株式会社 - connpass

最後に最近ドローンで撮影したUKオフィスでの昼食時の写真を掲載して、この記事を締めたいと思います。

f:id:yuseinishiyama:20180305182218p:plain