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

こんにちは、モバイル基盤部の茂呂(@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日(月・祝…

Cookpad Online Summer Internship 2020 5 Day Engineer コースを開催しました

ユーザー・決済基盤部の三吉(@sankichi92)です。今年になってエンジニアの立場から新卒採用を担当しています。 5月の記事で告知したサマーインターンシップのうち、5 Day Engineer コースを 8/24〜28、9/7〜11 の2日程で開催しました。この記事ではその内…

Cookpad Pad 2 という自作キーボードノベルティをつくった話

こんにちは、高井です。みなさま Cookpad Online Summer Internship 2020、お疲れさまでした。 さて、今回はインターンのノベルティとして Cookpad Pad 2 という自作キーボードキットをノベルティとしてつくったので、その紹介と解説です。今年のインターン…

Rubyの開発を支える技術

こんにちは、遠藤(@mametter)です。RubyKaigi Takeout 2020お疲れさまでした。 今回は、遠藤が関わっている範囲で、「Ruby開発者会議を支える技術」「リモート議論を支える技術」「Rubyの品質を支える技術」についてざっと紹介してみます。

Amazon RDS/Auroraをクローンするシステムを作った話

こんにちは、技術部SRグループの菅原です。 最近、Ninja650からNinja1000に乗り換えました。パワーがあるせいで3速発進・4速発進が平気でできてしまい、シフトワークがどんどん下手になっています。精進したいものです。 この記事では、Amazon RDS/Aurora…

大規模なiOSアプリの画面開発を効率化するために動作確認用ミニアプリを構築する

iOS

こんにちは、モバイル基盤部の大川(@aomathwift)です。 iOSアプリの開発途中で画面のレイアウトなど僅かな変更を確認したい場合、最も確実な方法はアプリをビルドして該当の画面まで手動で遷移して確認する方法です。 この方法は特別なセットアップが必要な…

RailsアプリケーションのCIにDynamoDB Localを導入した話

こんにちは、事業開発部 サーバーサイドエンジニアの堀江(kentarohorie)です。 今回はRailsアプリケーションのCIにDynamoDB Localを導入した事例をご紹介します。 広告入稿システムとCI クックパッドでは自社製の広告入稿システム・配信サーバーを運用してい…

エンジニア社内留学制度を利用してAndroidアプリ開発を体験した話

こんにちは、事業開発部でデータ分析やデータエンジニアリングをやっている佐藤です。最近の楽しみはクックパッドマートで買ったコーヒー豆を挽いて淹れることです。 今日はクックパッド社内で実施されているエンジニア社内留学制度について紹介します。 エ…

Trivy + AWSによるコンテナイメージ脆弱性検査パイプラインの構築

技術部セキュリティグループの水谷(@m_mizutani)です。最近はPCゲーム熱が再燃しており、今はCities: Skylinesに時間を溶かされ続けています。 クックパッドでは レシピサービス の継続的なサービス改善の他にも、生鮮食品販売プラットフォームの クックパ…

クックパッドのサービスメッシュ基盤を改善した話

こんにちは、技術部 SRE グループの ryojiro (@flyhigh_ro) です。今回はクックパッドでのサービスメッシュ基盤を改善した話を紹介します。クックパッドでのサービスメッシュの構成については以前の記事をご覧ください。 クックパッドでは多くのサービス間通…

/* */ @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;*/ /*}*/