高難易度技術コース

2019年のサマーインターンシップ 高難易度技術コースで取り組んで頂く課題の一覧です。 下記の課題は実際にクックパッドで実際に私達が解決したい・欲しいものばかりです。 このインターンシップの申し込みは課題ごととなっています。 あなたが取り組んでみたい!と思えるものにぜひご応募ください。

2019年のサマーインターンシップの他のコースについては Cookpad Summer Internship 2019 をご覧ください。

サーバーサイド基盤

オフラインジョブ実行基盤の作成

現在クックパッドのオフラインジョブ基盤としては定期ジョブ実行基盤の Kuroko2、ジョブキュー実行基盤の Barbeque の開発、運用をしています。 どちらも社内 ECS 基盤を活用したオフライン実行基盤であり、抱える課題にも共通点が多いことがわかってきました。 また、運用してわかってきた課題・需要も多くあります。両基盤のユースケースをカバーする強力な新規オフラインジョブ実行基盤を開発してみませんか。

現在求められている要件としては以下の2つです。

参考記事
参加を申し込む

MYフォルダ検索刷新

現在の cookpad.com の検索バックエンドは基本的に一つの Solr クラスタにより構築されています。 cookpad.com の検索機能の一つにユーザのMYフォルダ内の検索機能というものがあります。 サービス上では重要な機能の一つなのですが、ユーザ毎に異なる結果が返ってくるなど他の検索機能とは性質が異なるためかなり無理をしているシステムとなっています。 MYフォルダ検索機能をバックエンドから刷新し、ハイパフォーマンスな検索システムを実現してみませんか。

単に Solr、Elasticsearch などで検索バックエンドを作り直すだけではなく、インデックスの更新や既存アプリケーションへの組み込みや設計・運用まで含めて取り組みます。 既存のシステムに組み込むところまで含めているため、ウェブアプリケーションプログラミング、インフラ、検索システムへの理解など広範な領域に触れることができます

参加を申し込む

cookpad_all 起動高速化

cookpad.com の機能の大部分は cookpad_all という 1 リポジトリからなる、巨大な Rails アプリケーションに支えられています。 以前は cookpad_all に開発リソースを集中し CI/CD やオートスケールやロードバランスの仕組みなど全てを cookpad_all 用に柔軟にチューニングしてきたのですが、 最近は cookpad_all を特別扱いするのを辞めて「普通の Railsアプリケーション」として扱えるように改善するプロジェクトを進めています。 その中でもデプロイ速度やオートスケールの都合上、アプリケーションの起動速度は重要なメトリクスの一つです。 cookpad_all の歴史を紐解き、アプリケーション起動速度の高速化にチャレンジしてみませんか。

参考記事

参加を申し込む

Ruby

Rubyのコードカバレッジ測定機能の改良

Rubyはコードカバレッジを測定する機能を提供していますが、実装やツールチェインにはまだ課題があります。 これらの課題の一部や全部を解決し、Rubyのコードカバレッジ測定をより便利にしましょう。

実装面
RubyにはTracePointという実行をフックするための機能がありますが、コードカバレッジ測定の一部の機能(ワンショットカバレッジ)はTracePointの枠組みを独自拡張することで実装されています。 TracePoint自体にワンショットフックを持たせることで、汎用化できる可能性があります。
ツールチェイン
Rubyのコードカバレッジ測定機能はバックエンドであり、可視化の機能を持ちません。 デファクトの可視化ツールであるSimplecovは、分岐カバレッジやメソッドカバレッジなどの可視化をまだサポートしていません。 また、他のカバレッジデータを扱うツールとの連携も整備の余地があります。
参加を申し込む

Ruby用デバッガ・プロファイラの開発

Ruby 2.6にはデバッガ・プロファイラの作成を支援する機能が導入されましたが、既存のものは、それらを使っていないため、性能に問題があります。 そこで、新しい支援機能を使って、Ruby用のよりよいデバッガ・プロファイラを開発してください。

参加を申し込む

Rubyのロード問題の解決

大きなRubyアプリケーションを起動すると時間がかかります。 この問題を改善するために、bootsnap が提案されましたが、まだ改善できる点が多くあります。ぜひ、改善に取り組んで、世界中の Ruby アプリケーションを救ってください。

参加を申し込む

セキュリティ

動的脆弱性検査の自動化

Staging環境などにあるWebサービスに対して自動的に(攻撃を含んだ)診断を実施し、XSS、SQLi、CSRFなどの脆弱性を探し出す仕組みを作ってください。発見だけでなく、CIに組み込み脆弱性診断が自動化できるとなお良いです。

以下の2つの点に注意し、ぜひ挑戦してみてください。

参加を申し込む

行動ベースリスク判定

cookpad.comなどのアクセスログを分析し、不審な行動をしているユーザ、クライアントを検出する仕組みを作ってください。

以下の2つの点に注意し、ぜひ挑戦してみてください。

参加を申し込む

認証基盤

利便性と実用性が伴ったセキュアな認証方法の導入

現在クックパッドでは、ユーザー登録時にパスワードとメールアドレスまたは電話番号を登録し、それらの情報で認証を行っています。 この仕組みにおいては以下のような問題を抱えています。

これらの問題を解決するような、導入が現実的でこれまでよりも安全に本人の認証が行える新しい認証方法をクックパッドに導入して頂きたいです。
参加を申し込む

モバイル基盤

クックパッドアプリの実験用ミニ開発環境の構築

クックパッドのモバイルアプリはとても大きく、様々なライブラリやたくさんのコードによって成り立っています。 アプリのビルド時間は長く、ちょっと修正をしてその内容を確認するにも、たくさんの待ち時間が発生してしまう状況です。

そこで、アプリに直接コードを足すのではなく、クックパッドアプリと同じライブラリやユーティリティ群を使って開発者がスムーズに機能を実装したりちょっとした実験コードを試せるようなミニ開発環境を作りたいと考えています。 簡単なREPL環境のようなものを作るとか、最小限の機能を持ったミニアプリを作るということが考えられます。

この問題を解決し、開発者がすばやくアプリ開発を行えるようなアイディアをお持ちの方はぜひ手を貸して欲しいです。

参加を申し込む

モバイルアプリ開発者全体のビルド待ち時間の削減

クックパッドのモバイルアプリはとても大きく、様々なライブラリやたくさんのコードによって成り立っています。 アプリのビルド時間は長く、開発者はアプリの長いビルド時間に悩まされています。貸与されている個人のPCやCIマシンでのビルド関わらず、ビルド時間が長いと感じています。

そこで、ライブラリやモジュールなどのビルド成果物を開発マシン間で共有できるような仕組みを整え、ビルド時間を短縮することができないかと考えています。 ビルド成果物は開発ツールの更新や様々な条件の変更によって変化するので、そのような状況にも対応する必要があります。

このような仕組みをクックパッドアプリに導入するため、ぜひ力を貸してほしいです。 また、クックパッドだけでなく様々なアプリプロジェクトへ導入できるよう汎用的な仕組みとして構築し、世界中のアプリ開発者の負担を減らすことにも挑戦してみませんか。

参加を申し込む

画面実装における各種問題の自動検出ツールの構築

クックパッドアプリにはたくさんの画面があり、現在も機能を足したり、よりよい体験を利用者に届けるために画面の改善を続けています。 アプリの体験に直結する画面の実装には様々なやり方があります。 SDKが提供するインタラクティブな設計ツールを使うこともあればコードですべてを実装することもあります。OSの進化によって新しく追加されたAPIを利用することもあるでしょう。

これらを利用して手の混んだ画面を実装しようとすればするほど、実現方法は複雑になっていきます。 そうすると誤った実装をしてしまったり、実行中に意図しない状態になってしまうこともあるでしょう。 不具合や将来的に負債となってしまいそうな間違いを極力防ぐために、開発時に間違いに気付ける仕組みを構築したいと考えています。 その仕組みは、CIで実行することで間違いがあれば警告してくれる静的解析ツールかもしれませんし、コードレビューを支援するために画面レイアウトを自動的に描画してくれようなツールかもしれません。 このようなツールがあれば開発者が安心して画面実装に集中できる、効率化が進むはず、というようなアイディアを持っていて実現してくれる方がいたらぜひ力を貸していただきたいです。

参加を申し込む

圧倒的に画面実装を省力化する仕組みの構築

クックパッドアプリにはたくさんの画面があり、現在も機能を足したり、よりよい体験を利用者に届けるために画面の改善を続けています。 改善を続けていくなかで、たくさんの画面を実装する必要があったり、何パターンもの見た目を作ってユーザインタビューで実際に試してもらい検証するということもあったりします。

そのため、このような画面実装の作業を省力化できれば、よりすばやく新しい機能や体験を届けたり、より実際に近い形で検証を重ねる事ができるようになります。 クックパッドのサービス開発ではこのループをいかに高速に回せるか?というところに重きをおいています。

この課題を解決するためにできることは、画面を構成するUIコンポーネントを整備して実装のやり方を統一するということかもしれませんし、全く新しい画面実装のフレームワークを構築することかもしれません。 あなたのアイディアでクックパッドのサービス開発をより高速に、効果的に進められるようにしてください。

参加を申し込む

行動ログ収集方法の改善・効率化

クックパッドではよりよい価値・体験を利用者に届けられるように、サービス改善を続けています。 サービスがどのように使われているのか、どこに課題があるのかを分析するため、たくさんのログを収集・分析できるようにしています。 しかし、このようなログを収集するのは容易ではありません。どういうタイミングでどのような内容をログとして記録すればよいのか、それをどうアプリに実装すればよいのか、抜け漏れを防ぐには、どのようなログが取られているかを新しく分析したいと思った人が把握するには何をすればよいのか。 ログを収集するといっても様々な問題があります。

すべての問題を一度に解決するのは困難だと思いますが、これらの問題の一部でも解決できるアイディアを持っていて、実現することができるという方がいたら、手を貸して欲しいです。

参加を申し込む

機械学習

レシピ分類基盤の開発

クックパッドでは様々なカテゴリ(e.g., 主食・主菜・副菜、和・洋・中、肉料理・魚料理・野菜料理)にレシピを自動で分類しており、その結果を様々なサービスで利用しています。 しかし、それぞれの分類器を開発していた時の状況が違うこともあり、分類の仕組み(e.g., 正解データの管理方法、学習・推論バッチの実装方法、モデルの保存・利用方法、結果の保存・利用方法)は揃っていません。 そのため、分類器の運用や改善、追加が徐々に難しくなってきています。

そこで、このインターンでは Ruby on Rails や Flask などのウェブアプリケーションフレームワーク、 PyTorch や TensorFlow などの機械学習フレームワーク、AWS などのクラウドコンピューティングサービスを駆使し、 これまでの仕組みを置き換えられる新しいレシピ分類基盤の開発にチャレンジしていただきます。

参加を申し込む

料理写真認識アプリの開発

クックパッドでは写真を料理写真か非料理写真かに分類するモデルを開発しており、クックパッドのアプリ内の一部機能で利用しています。 しかし、サイズが大きいこともあり、モデルはクックパッドのアプリ上でなくサーバー上で動いています。 写真の転送にかかるコストや分類にかかるコストを考慮するとアプリ上で動かしたいのですが、アプリに入れられるサイズの小さいモデルは性能が低くなりやすいという問題があります。

そこで、このインターンでは上記の問題をクリアするモデルの構築にチャレンジしていただきます。 また、モデルの検証も兼ねて、簡単な記録アプリ(e.g., いつ食べたか、どこで食べたかを自動で記録するアプリ)を実際に開発していただきます。

参加を申し込む

© 2019 Cookpad Inc. All Rights Reserved.