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

クックパッド iOS アプリでは「買い物機能」を SwiftUI で実装し、2020年から本番でリリースしています。その技術選定の背景や得られた知見についてご紹介します。

Generating custom SF Symbols from existing SVG files

iOS

Recently, Apple has been putting a lot of energy into SF Symbols, symbols to use on your app's screens. SF Symbols allows you to not only use symbols created by Apple, but also custom ones you made yourself. To create custom symbols, follo…

カスタムなSF SymbolsをSVGから自動生成する

iOS

最近Appleがアプリの画面で使えるシンボルSF Symbolsに力を入れています。SF SymbolsはAppleの用意してくれたシンボルだけではなく、自分の作ったカスタムシンボルも使えます。Appleの紹介しているカスタムシンボルを作るワークフローに従うと手間がかかるの…

データ基盤チーム0人で運用は回るのか?! 前人未踏チャレンジ・クックパッドデータ基盤のすべて2020

技術部データ基盤グループの青木です。 ここ1、2年はなぜか成り行きでBFFをでっちあげたり、 成り行きでiOSアプリリニューアルのPMをしたりしていたので あまりデータ基盤の仕事をしていなかったのですが、 今年は久しぶりに本業に戻れたのでその話をします…

Ruby 3.0 の Ractor を自慢したい

Ruby の開発をしている技術部の笹田です。娘が自転車に乗り始め、まだ不安なためずっとついていなければならず、少し追っかけまわしただけで息切れがヤバい感じになっています。運動しないと。 ここ数年、Ruby で並列処理を気軽に書くための仕組みである Rac…

プロと読み解く Ruby 3.0 NEWS

技術部の笹田(ko1)と遠藤(mame)です。クックパッドで Ruby (MRI: Matz Ruby Implementation、いわゆる ruby コマンド) の開発をしています。お金をもらって Ruby を開発しているのでプロの Ruby コミッタです。 本日 12/25 に、ついに Ruby 3.0.0 がリリ…

Compositional LayoutとDiffable Data Sourceを使ってiOSアプリのつくれぽ詳細画面を実装する

iOS

クックパッドの事業開発部でiOSエンジニアをしている角田(id:muchan611)です。普段はクックパッドiOSアプリの検索に関する機能を開発しています。 クックパッドの基本的な機能のひとつである「つくれぽ」を表示する「つくれぽ詳細画面」を、UICollectionView…

Taking Advantage of Debugging Tools for Android App Development

Hello! I'm Joseph and I'm an Android engineer from the Mobile Infrastructure team. In this post, I will talk about some of the tools that we used in debugging while working on the renewal project. The contents of this post were presented i…

【開催レポ】Cookpad Tech Kitchen #25 日本最大レシピサービスのモバイルアプリ開発事情

こんにちは。クリエイション開発部の星川 (@star__hoshi) です。 2020年12月10日に Cookpad Tech Kitchen #25 日本最大レシピサービスのモバイルアプリ開発事情 を開催しました。今回は新型コロナウイルスの影響もありオンラインでの開催となりました。 クッ…

モバイルアプリの開発上の違和感・痛みに向き合い、少しずつでも前進するための取り組み

こんにちは、モバイル基盤部の茂呂(@slightair)です。 いやー12月になって寒くなってきましたね。 この記事では最近部で始めた「アーキテクチャ課題共有会」という取り組みについて紹介したいと思います。 開発中に感じる痛み いきなりですが、モバイルアプ…

分析用ログデータに対する品質保証としての異常検知

クックパッドでデータにまつわるあれやこれやをずっとやってる佐藤です。分析・調査に仮説検証にデータパイプラインにと色々やってました。ちなみに先日はCyberpunk2077休暇をとるなどという呑気なことをしていたら、この記事でやりたかったことがほぼできそ…

キッチンでの微細な重量変化を捉えるには?

こんにちは.研究開発部の鈴本 (@_meltingrabbit) です. クックパッドの研究開発部では,ユーザーの課題を解決する手段をスマホの中からスマホの外(実世界)に拡張しようとチャレンジしています. 特に,料理を「作る」時の課題を解決するため,様々なデバ…

基本の Android View 実装ドキュメントの紹介

先日 Android アプリのリニューアル時に社内向けに用意した画面実装ドキュメントの内容を補足を交えてご紹介します。

Ruby 3の静的解析機能のRBS、TypeProf、Steep、Sorbetの関係についてのノート

Ruby 3 は「静的型解析」を備えることが目標の 1 つになっています。TypeProf は Ruby 3 の静的型解析エコシステムの 1 つです。しかし Ruby 3 の静的解析というと、RBS、TypeProf、Steep、Sorbet などいろいろなツール名が出てきてよくわからない、という声…

Ruby 3 の静的解析ツール TypeProf の使い方

昨日、Ruby 3.0.0-preview2 がリリースされました。このリリースには、遠藤が開発している Ruby の静的型解析ツール TypeProf が初めて同梱されています。これの使い方をかんたんにご紹介したいと思います。

大規模プロジェクトにおけるモバイル基盤の取り組み

今回は大規模プロジェクトにおけるモバイル基盤部の役割について紹介します。

クックパッドマートのプロダクト開発チームに On-Call を導入した話

クックパッドマートのプロダクト開発チームでは半年ほど前からサービスの運用・障害・割り込み対応の当番として on-call を導入しています。 SRE チームには on-call は一般的ですが、プロダクト開発チームで on-call を運用している事例は意外と世に出てい…

AWS の This is My Architecture(動画)でS3を中心としたセキュリティログ基盤の紹介をしました

技術部セキュリティグループの水谷です。 先日、Twitterに投稿もしたのですが、AWSのThis is My Architectureという事例紹介のシリーズでクックパッドが取り組んでいるセキュリティログ管理基盤の紹介ビデオが公開されました。この記事ではビデオの内容の補…

レシピサービスのフロントエンドを Next.js と GraphQL のシステムに置き換えている話

クックパッドのウェブサイトのフロントエンドを Next.js や GraphQL を使って作り直している話です。

ドキュメントを書くときの「メンタルモデルの原則」

こんにちは。クリエイション開発部の丸山@h13i32maruです。 みなさんドキュメント書いてますか?私はドキュメントを書くのは結構好きです。最近もプライベートで開発しているJasperというGitHub用Issueリーダーのユーザ向けドキュメント(マニュアル)を書き…

検索インフラを安全に切り替えた話

近代化した検索システムに安全に切り替えるためにどのようなことをしたのかを紹介します。

人気順検索のSolrはスケールのためにディスクを捨てた

5年間も変化を寄せ付けず、強烈なレガシーとなっていた検索システムは、丁寧な観察に基づく大胆な設計とそれを実現する確かな実装によって近代化されました

Ruby に Software Transactional Memory (STM) を入れようと思った話

Ruby 3 で導入予定の、並列並行制御のための機能である Ractor は、意図的に Ractor 間でメモリの共有を排除するように設計されています。しかし、どうしても共有したいなぁ、というときのために、Software Transactional Memory (STM) を使っていい感じに共…

2020年のクックパッドAndroidアプリのアーキテクチャ事情

こんにちは、モバイル基盤部の加藤です。普段はモバイルアプリの基盤技術の整備や品質管理の業務に携わっています。 今回はクックパッドAndroidアプリ(以後クックパッドアプリ)の2020年時点でのアーキテクチャの紹介をしたいと思います。 アーキテクチャ導入…

nerman: AllenNLP と Optuna で作る固有表現抽出システム

事業開発部の @himkt です.好きなニューラルネットは BiLSTM-CRF です. 普段はクックパッドアプリのつくれぽ検索機能の開発チームで自然言語処理をしています. 本稿では,レシピテキストからの料理用語抽出システム nerman について紹介します. nerman …

ドキュメントベースの型安全なモバイルアプリ行動ログ基盤の構築

こんにちは。PlayStation 5が一向に買えない@giginetです。普段はモバイル基盤部というところでiOSの基盤開発をしています。 皆さん、行動していますか?我々は日々Webサービス上で様々な行動をしています。サービス開発において、改善に活かすための効率的…

日々の簡単なプロトタイピングに Flutter を活用する

こんにちは、 CTO 室の山田です。 私は新卒入社から現在までずっと Amazon Alexa や LINE Clova などのいわゆるスマートスピーカーやスマートディスプレイ向けのアプリケーション開発に携わっています。 特に Amazon Alexa に関しては、日本だけでなく、スペ…

負荷試験用 Web コンソールの開発

技術部 Site Reliability (SR) グループの id:itkq です。2020 秋タイトルで一番期待しているのはおちこぼれフルーツタルトです。本エントリでは、Web サービスの負荷試験に対する障壁を下げるために、汎用的な Web コンソール開発に至ったまでの話を書きま…

クエリログを使ったAurora MySQLの負荷テスト

最近はZX-25Rが気になっている菅原です。4気筒250ccといえば、以前バリオス2に乗っていたんですが、あれもよく回るよいバイクでした。足つきの良さが懐かしいです。 この記事では、クエリログを使ったAurora MySQLの負荷テストの話を書きます。 MySQLの負荷…

iOSDC Japan 2020 に社員2名が登壇します

iOS

こんにちは!とくなり餃子大好き( id:tokunarigyozadaisuki )です。 すっかり秋の気配がしてきましたね。餃子を焼きやすい気候になって嬉しい! さて、iOSと周辺技術を題材としたカンファレンス、iOSDC Japan 2020 が今年は9月19日(土)〜9月21日(月・祝…

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/