タグ

ブックマーク / techlife.cookpad.com (29)

  • MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ

    こんにちは、サービス開発部の荒引 (@a_bicky) です。 突然ですが、RDBMS の既存のテーブルを見てみたら「何でこんなにインデックスだらけなの?」みたいな経験はありませんか?不要なインデックスは容量を圧迫したり、挿入が遅くなったりと良いことがありません。 そんなわけで、今回はレコードを検索するために必要なインデックスの基礎知識と、よく見かける不適切なインデックスについて解説します。クックパッドでは Rails のデータベースとして主に MySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説します。 InnoDB のインデックスに関する基礎知識 インデックスの構造 (B+ 木) InnoDB では B+ 木が使われています。B+ 木は次のような特徴を持った木構造です。 次数を b とすると、

    MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ
  • 複数サービス間の整合性の取り組みについて - クックパッド開発者ブログ

    こんにちは。技術部 開発基盤グループの大石です。 日は開発基盤グループが社内の各サービスに提供している共通基盤サービスの1つである共通決済基盤を例にサービス間の整合性を維持するための取り組みを紹介したいと思います。(共通決済基盤については以前紹介した クックパッドの課金を支える技術 を参照ください) 決済における整合性を考える サービス間連携は決済に限らず発生するものですが、共通決済基盤の場合、組織外にあるサービスと通信する必要があり、コントロールができない外的要因に影響を受けやすい点と、決済という確実性が求められる処理を含んでいるということの間で整合性について考える必要があります。 まずは、共通決済基盤上で行われるサービス間通信の種類とそれぞれで通信を行っている際にエラーが起きた場合にどのようにハンドリングすれば整合性を維持できるかを考えてみます。 サービス間通信の種類と流れ 共通決済

    複数サービス間の整合性の取り組みについて - クックパッド開発者ブログ
  • 開発の見積もりとスケジュール管理 - クックパッド開発者ブログ

    こんにちは。会員事業部の丸山です。 エンジニアが開発を開始する時にはタスクの見積もりとスケジュールを作成行って、実装を進めていくと思います。 しかし1ヶ月を超えるような規模の開発をする場合、なかなか予定通りの期日に終わらなかったりすると思います。 そして大抵の場合、増える方向になりますよね。 今回はそういうことにならないために、私が気をつけていること・実践していることをいくつか紹介したいと思います。 見積もりとは まずは「見積もり」とは何なのかを正しく理解したいと思います。 一般的には「見積もり」=「全タスクとその工数を洗い出す」というものだと思います。 しかしここで以下のことに気をつける必要があります。 見積もりとスケジュールとコミットメントは違う 見積もりとはあるタスクがどれだけの工数(規模)なのかを算出することです。 対して、スケジュールとはあるタスクがどれだけの工期(期間)なのかを

    開発の見積もりとスケジュール管理 - クックパッド開発者ブログ
    learn
    learn 2016/04/07
  • 開発環境のデータをできるだけ本番に近づける - クックパッド開発者ブログ

    こんにちは。技術部の吉川です。 今回はクックパッドの開発環境構成、特に開発用データベースの構成についてご紹介します。 開発環境の構成 クックパッドのシステム環境は以下のようなフェイズに分かれています。 ※ これはcookpad.comの構成で、サブシステムや個別のサービスはその規模や特性に応じて構成が異なります。 development 開発者が実際に開発を行う環境です。クックパッドでは仮想環境は用いず、手元のマシンでRailsアプリケーションを動かして開発を行っています。 データベースはローカルではなく、開発者全体で共通の開発用データベースに接続しています。 test 手元でテストを実行する場合は、ローカルマシンのデータベースを利用します。CI(rrrspec)などの場合も同様で、テスト実行サーバーのデータベースが利用されます。 staging stagingといえば準番環境として、

    開発環境のデータをできるだけ本番に近づける - クックパッド開発者ブログ
  • 部署の課題を継続的に改善する取り組み - クックパッド開発者ブログ

    はじめに こんにちは、投稿推進部の勝間です。 約1年前、「サービス開発エンジニアからマネージャになった話」というエントリを投稿しましたが、現在も試行錯誤しながらマネジメントに取り組みつづけています。 「組織は生きもの」とも言いますが、私の部署もまた生きもののように、日々いろいろな課題が生まれ、それに取り組んでいます。今回は、そのような部署で私が感じた課題と、それに対する具体的な取り組みについて、いくつか事例とあわせてご紹介します。 1. 業務外の問題に目を向ける 私の部署では、毎日約5分間の朝会を開いています。 1人30秒くらいで、「今日取り掛かること」「参加するミーティング」「その他勤怠など含めて共有すべきこと」を共有します。 朝会を行うことでそれぞれの業務的な進捗を確認でき、また、内容について疑問に思ったこともすぐに確認、理解できる状態を作ることができていました。 一方で、業務と直接関

    部署の課題を継続的に改善する取り組み - クックパッド開発者ブログ
  • 朝Lint活動で細かな技術的負債を返済する - クックパッド開発者ブログ

    買物情報事業部の八木です。クックパッド特売情報のAndroid部分を担当しています。普段はクックパッドAndroid版(以後、体アプリとします)の開発プロセスの中で特売情報の機能を開発しています。 エントリでは細かな技術的負債を解消する為に体アプリの開発チームが行っている朝Lint活動を紹介します。 2年近く経つ体アプリのコードベース 私が買物情報事業部に所属する前は体アプリを1から書き直すチームで働いていました。書き直し始めたのは2013年10月からなのでそろそろ2年が経とうとしています。2年前に設計された体アプリは現在ではおよそ17万行を越え、日々どんどん変更が加えられています。 それらの変更の中には残念ながら悪いコードが含まれている場合があります。テストしづらいコードやテストがないコード、レビューに対する場当たりな対応や緊急のbug fixのために追加された汚いコード、

    朝Lint活動で細かな技術的負債を返済する - クックパッド開発者ブログ
  • 資源効率の悪いモバイルアプリのリリースを防ぐための資源監視 - クックパッド開発者ブログ

    Android/iOSアプリを開発している皆様、こんにちは。技術部の松尾(@Kazu_cocoa)です。テストエンジニアとして、サービスの品質を向上するために様々な活動を行っています。特に最近はモバイルアプリに注力しています。 この記事をご覧になっている皆さんは、モバイルアプリに対する品質をどのようにお考えでしょう?例えば、アプリがクラッシュしないとか、アプリが機能不全無くシナリオを実施できるとか、そういう面は想像が容易だと思います。品質に対する機能的な側面の指標の1つですね。 品質を考える上では機能的な側面だけではなく、非機能的な側面も考える必要があります。例えば、モバイルアプリを使っているときにサクサク動いているとか、そういう観点は利用時の効率性という側面を持ちます。これにはCPU使用率やメモリ使用量、通信量、見せかけのUIなどが関係してきます。これらの指標を常時取得、監視する、という

    資源効率の悪いモバイルアプリのリリースを防ぐための資源監視 - クックパッド開発者ブログ
  • 調整の心得 - クックパッド開発者ブログ

    会員事業部の森田です。 対象と内容 この記事は、クックパッドと同じような200~300名規模の組織で働く、「最近調整が多くてコードを書く時間がないなぁ」と思い始めた30代エンジニアを対象として、日々の調整の負担を減らすための「考え」と「行動」を整理し、まとめたものです。 組織における分業と調整 組織に所属する人たちは協力して組織目標の達成を目指します。みんなで同じことをしてもしょうがないので、必然的に役割を分担(分業)をします。分担した仕事はなんらかのタイミングで統合する必要があります。その統合が調整です。つまり分業と調整はセットです。じゃどういう分業があるのかといえばそれは組織構造によります。今回は私達が採用している事業部別組織下*1 での調整の話をします。 分業の種類 事業部別組織では垂直と水平の2つの分業が存在します。それぞれに少し毛色の違う調整が発生するわけですが、いくつかのことを

    調整の心得 - クックパッド開発者ブログ
  • シンプルで移行しやすいデータベースシャーディング - クックパッド開発者ブログ

    技術部の小野(taiki45)です。クックパッドではこれまで様々なデータベースの負荷対策を行ってきましたが、シャーディングは行われていませんでした。しかし先日クックパッドの認可サーバーが利用している MySQL サーバーの負荷分散のためにクックパッドで初めてのシャーディングを行ったので、Rails アプリケーションでのシャーディングの事例のひとつとしてその際の手法をご紹介したいとおもいます。 構成 Before データベースは1マスター、1ホットスタンバイ、バッチ用の1リードレプリカで構成されています。Read オペレーションのほとんどはキャッシュ層に逃しています。 After データベースの各ロールにつきそれぞれ1台ずつマシンが増えています。 シャーディングが必要になった背景 認可サーバーのアクセストークンの作成・削除時の Write オペレーションが急増し、レコード数自体も急増していて

    シンプルで移行しやすいデータベースシャーディング - クックパッド開発者ブログ
    learn
    learn 2015/06/23
  • チーム開発の進め方 - クックパッド開発者ブログ

    こんにちは!クックパッド編集室メディア開発グループ長の @yoshiori です。 今回はウチのチームの開発の進め方や見積もりの仕方を説明しようと思います。 実はコレ系の話は 5 年前にもデブサミで発表 したのですがこの時はリリースまで 1 年とかのレベルのプロジェクトの進め方の話でした。今回は 1,2 ヶ月でリリースまで持っていく開発の進め方を説明します。 動画サービス部分を microservices 化するときに実際に行った事を元に説明します。開発者は 3 人で 1.5 ヶ月位の開発です。 何故このようなことを行うのか 誰だって楽しく仕事がしたいし、なるべく不安などは無い方が良いはずです。 例えば自分がやっている作業がどうなったら終わりなのかわかっていなければ不安でしょうし、いつまでに作ればいいのかわかっていなければ不安でしょう。 そういった不安をなるべく無くすためにうちのチームでは

    チーム開発の進め方 - クックパッド開発者ブログ
  • 雑な発想を活かすチーム作り - クックパッド開発者ブログ

    インフラストラクチャー部の成田(@mirakui)です。インフラストラクチャー部は、クックパッドで扱っている全サービスのサーバを設計・構築し、運用しているチームです。2015年3月現在、6人のメンバーで運用をしています。 さて、この運用というのは外から見ていると保守的な仕事に思えるかもしれませんが、その実、とてもクリエイティブな仕事です。クックパッドのサービスは一日平均で10回以上デプロイされており、アクセスも日々増え続け、状況は刻一刻と変化しています。今日動いているサーバ構成が、一年後に通用するとは限らないわけです。そんな変化に追従するためには、サーバを常に改善していかなければなりませんし、チームにも柔軟な発想が求められます。 「さあブレストしよう」→アイデア出ない問題 さあ業務を改善しよう、と意気込んでブレインストーミングを開いても、なかなか十分なアイデアが出きらないのはよくある話です

    雑な発想を活かすチーム作り - クックパッド開発者ブログ
  • 多腕バンディットによる表示コンテンツの最適化 - クックパッド開発者ブログ

    こんにちは。技術部検索グループの原島です。 上の画像は、スマートフォン(ブラウザ版)で見たクックパッドの検索結果ページです。レシピだけでなく、ニュースも表示されていますね。献立や掲示板のスレッドなどが表示されることもあります。 クックパッドでは、検索結果ページに表示するコンテンツをクエリなどに応じて最適化しています。最適化は、膨大なログデータと最新の機械学習を用いることで、実現しています。このエントリでは、クックパッドにおけるコンテンツ最適化の裏側を紹介します。 最適化の背景 スマートフォンの普及に伴って、ユーザが利用するプラットフォームは PC からモバイルにシフトしつつあります。クックパッドにおけるモバイル利用者の割合も、ここ 2 年で 10% 以上増加しました。最近では、60% 以上のユーザがモバイルからアクセスしています。 ユーザの利用形態が変化すれば、検索結果ページもその変化に対

    多腕バンディットによる表示コンテンツの最適化 - クックパッド開発者ブログ
  • チームメンバーとの信頼関係を築く:定期個人面談の薦め - クックパッド開発者ブログ

    こんにちは。新規広告開発部所属エンジニアのレオ(@lchin)です。 ここ2年ほどは、大きな事業部のなかの小規模なエンジニアチームのリーダーを務めてきました。エンジニアリーダーとしては、1人のエンジニアとしてソフトウェア開発をしつつ、チームのメンバーの力をまとめて、事業部のゴールを推進しました。事業部のマネージャほど、マネジメント業務が中心になるわけではありませんが、多くのエンジニアが苦手な人間関係スキルはエンジニアリーダーにも必要です。 メンバーは何か大きな不安を抱えていないのか?ポテンシャルを発揮できていないメンバーにどうフィードバックするのか?メンバー間に何かトラブルはないのか?見えないところで仕事の妨げはないか?チームでソフトウェア開発を行う上のよくある悩みだと思いますが、皆さんはどう解決していますか?私は、個人面談はこういった悩みを解消するための大変有効な手段だと思います。 なぜ

    チームメンバーとの信頼関係を築く:定期個人面談の薦め - クックパッド開発者ブログ
  • Android開発を爆速にする10のコマンドラインスクリプト - クックパッド開発者ブログ

    モバイルファースト室の山下( @tomorrowkey )です。 みなさんはAndroidアプリをビルドするときに AndroidStudioの実行ボタンを押すのと、ターミナルでgradleコマンドを実行するのと、どちらを使っていますか。 クックパッド社内のAndroidエンジニアでもどちらを使うか好みが分かれるのですが、私はたいていターミナルでgradleコマンドを使っています。 AndroidStudioの実行ボタンだとビルドを途中で中止できないことがあるからです。コマンドであればcontrol+cでいつでも中止できるという気軽さからコマンドを好んで使用しています。 開発するうえでIDEなどのGUIツールはとても便利なのですが、実はコマンドを実行する方がはるかに早くストレスなく開発を進めることができることがあります。 今回は私が実際に使っている便利なコマンドラインスクリプトを10個紹介

    Android開発を爆速にする10のコマンドラインスクリプト - クックパッド開発者ブログ
  • Androidアプリ開発で素早くフィードバックをえるためのライブラリを作りました - クックパッド開発者ブログ

    モバイルファースト室の山下(@tomorrowkey)です。 Androidアプリを開発していて、ふとした時に不具合を見つけたりしませんか。 クラッシュであればDeploygateやCrashlyticsなどでクラッシュレポートを送ることができますが、表示崩れを報告をするにはスクリーンキャプチャを撮ってメールアプリを開き、画像を添付して、送信する、といった手順が必要でなかなか面倒です 。 アプリを開発する側は不具合のあったスクリーンショットがほしい、不具合を報告する人は報告する手順がめんどうといったギャップを解決するためのライブラリを作りましたので、紹介します。 不具合報告する機能を作りました 冒頭のアニメーションgifで一通りの挙動を見ることができます。 このライブラリを使っているアプリを開くと通知領域に「不具合を報告する」という項目が増えます。 不具合を見つけた時にこの通知を選択すると

    Androidアプリ開発で素早くフィードバックをえるためのライブラリを作りました - クックパッド開発者ブログ
  • モバイルアプリのログ収集ライブラリ「Puree」をリリースしました - クックパッド開発者ブログ

    モバイルファースト室の @rejasupotaro です。 クックパッドでは、サービスをリリースしてログを収集して分析して改善してまたリリースして、というサイクルを素早く回すことでより良いものを作るということをウェブではやってきました。 クックパッドのサービス開発のフレームワークをモバイルアプリでも適用したいのですが、モバイルアプリにはウェブアプリと違ったロギングの難しさがあります。 今回はモバイルアプリのロギングの問題点とPureeというログ収集ライブラリについて話します。 モバイルアプリのロギングの難しさ ウェブアプリでは、基的にはサーバー側でログを収集することができますが、モバイルアプリの場合は画面の制御はアプリ側で行われ、APIを介してデータを受け取るため、クライアント側でログを収集して送信する必要があります。 アプリのログを収集するのに、画面遷移をしたりタップするたびにサーバー

    モバイルアプリのログ収集ライブラリ「Puree」をリリースしました - クックパッド開発者ブログ
  • RESTful Web API 開発をささえる Garage - クックパッド開発者ブログ

    技術部の小野(@taiki45)です。この記事では簡単なアプリケーション(ブログシステム)の実装を通して、クックパッドで作成・使用しているライブラリのGarage の紹介と Garage を使った RESTful Web API の開発をご紹介したいと思います。 Garage は RESTful Web API を開発するための、 Rails gemified plugins です。Rails プログラマは Garage を使って Rails を拡張することで素早く Web API を開発することができます。Garage は新しくアプリケーションを開発する場合にも、既存の Rails アプリケーションに組み込んで Web API を実装する場合でも使用できます。Garage はリソースのシリアライズやアクセスコントロールなど Web API の実装に必要な機能をカバーしています。 Ruby

    RESTful Web API 開発をささえる Garage - クックパッド開発者ブログ
  • アプリ開発の品質底上げ施策をWebhooksでBotが支援する世界 - クックパッド開発者ブログ

    こんにちは。技術部の松尾(@Kazu_cocoa)です。 主にモバイルアプリ開発において、数ヶ月前よりGitHubのWebhooksを使ったとある取り組みを始めました。HipChatやSlackなどをはじめとした様々なサービスとの連携サービスを提供しているGitHubですが、Webhooksの機能を使うことで、より自分たちの開発を支援する未来を創造できればと思います。以降では、実際の使用例、その実装よりな話しへと話しをすすめます。 クックパッドにおけるWebhooksの使用例 チェックリストによるセルフチェックをPR時に実施する モバイルアプリ開発はWebアプリ開発と異なる点が多々あります。例えば、開発対象の面では端末の多様性、端末システム側設定・通信状態の多様さなど、リリースの面ではデプロイに対する制限や更新がユーザ依存であることなど、です。そのため、当たり前品質の底上げのために不具合の

    アプリ開発の品質底上げ施策をWebhooksでBotが支援する世界 - クックパッド開発者ブログ
    learn
    learn 2014/11/01
  • KPTで粘り強く品質改善に取り組んだ話 - クックパッド開発者ブログ

    はじめに こんにちは、モバイルファースト室の@y_310です。 部署名からもお分かりの通りクックパッドでは今年からスマートフォンアプリの開発に特に力を入れて取り組んできました。 実際に昨年と比べて開発体制が大きく変化しています。以前はアプリ開発専門のエンジニアのみで開発していたものを、サーバサイドエンジニアもアプリ開発を学び、自分が所属する部署に必要な機能をアプリに実装するようになりました。 そのため、以前は2、3人のチームでの開発だったものが、現在は多い時には複数の部署にまたがって10人ほどのエンジニアが1つのアプリにコミットする状況になりました。 そのような環境の変化によりアプリの品質維持が大きな課題となり、この半年間継続的に品質改善に取り組んできました。今回はその改善プロセスについてご紹介したいと思います。 課題 取り組みを始める前は、様々な部分で課題がありました。 具体例を上げると

    KPTで粘り強く品質改善に取り組んだ話 - クックパッド開発者ブログ
  • スマートフォンWebのフロントエンドを高速化する取り組み - クックパッド開発者ブログ

    ユーザファースト推進部の丸山(@h13i32maru)です。 先日「撮るレシピ」というサービスを cookpad.com にて公開しました。「撮るレシピ」というサービスは料理や雑誌のレシピを写真に撮ってクックパッド上に保存できるというものです。料理や雑誌でレシピを良く見る方はぜひ使ってみてください(Androidアプリ版もあります)。 この「撮るレシピ」は全体公開前に一部のユーザに限定公開をしていました。そして全体公開をするにあたりフロント側のコードを全面的に書き換え高速化を行いました。その結果、最大で30倍高速化することができユーザの使い勝手が向上しました。以下が「書き換え前」と「書き換え後」の計測結果です(Android端末8機種 + iOS3機種で各操作のターンアラウンド時間*1を計測)。 閲覧系 最大: 30倍高速化(4.2秒→0.14秒) 平均: 15.7倍高速化(3.6秒→

    スマートフォンWebのフロントエンドを高速化する取り組み - クックパッド開発者ブログ