タグ

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

  • Dokumi (日本語) - クックパッド開発者ブログ

    (English version here) 技術部モバイル基盤グループのヴァンサン(@vincentisambart)です。今日は最近作ったツール「Dokumi」の話をしようと思います。 紹介 他部署のエンジニア仕事をもっと楽にすることが、技術部の重要な目的の1つです。その中で、Dokumiはモバイル開発者のコードレビューの負荷を減らすためのツールです。 なぜ「毒味」という名前にしたかと言うと、人間がレビューする前に、コードに毒(バグ、不自然なコードなど)が入っているかどうか毒味するツールだからです。別の言葉で言うと、少し進化したCI用のlintツールですね。pull requestが出る度に、Jenkinsがそのpull requestにDokumiをかけます。現在はDokumiはiOSアプリだけに対応してしていますが、今後はAndroidアプリへの対応も考えています。 現時点でDo

    Dokumi (日本語) - クックパッド開発者ブログ
    punitan
    punitan 2015/06/04
  • モバイルファースト時代のネットワークレイヤデバッグ手法 - クックパッド開発者ブログ

    こんにちは。インフラストラクチャー部 セキュリティグループの星 (@kani_b) です。 クックパッドでは主に "セキュリティ" か "AWS" というタグのつきそうな業務全般を担当しています。 ここ数年、クックパッドではいわゆるネイティブアプリの開発が非常に盛んです。 私達インフラストラクチャー部はネイティブアプリの直接の開発者ではありませんが、開発が円滑に進むように色々なレイヤでそのお手伝いをしています。 PC 向けサービス開発と比較して、スマートフォン向け、特にネイティブアプリにおいては、何かトラブルがあった際に どこで何が起きているか、そのデバッグを行うことが若干難しいと感じています。 今回はいわゆる jailbreak や root 化をせず、ネットワークのレイヤからデバッグを行う方法についていくつかご紹介します。 HTTP プロキシによるキャプチャ まずは HTTP プロキシ

    モバイルファースト時代のネットワークレイヤデバッグ手法 - クックパッド開発者ブログ
    punitan
    punitan 2015/05/29
  • 既存のObjective-CアプリケーションをSwiftで書き換えた話 - クックパッド開発者ブログ

    海外事業向けのiOSアプリケーション開発を担当している西山(@yuseinishiyama)です。クックパッドは現在、海外複数カ国に向けてサービスを展開しています。 主にObjective-Cで記述されたアプリケーションを全面的にSwiftに書き換える機会があったので、その際に得た知見や書き換えるに至った動機を共有します。 書き換えに至るまでの経緯 この項では、書き換えに至るまでの経緯について説明します。 Objective-C期 アプリケーションの開発は2014年7月頃にスタートしました。Swiftの発表直後でしたが、時期尚早ということもあり、Objective-Cで実装することになりました。 Objective-C、Swift混在期 2014年10月頃から、Swiftへの段階的な移行のために、新規のコードをSwiftで書くようになりました。Swiftの記述力や、ヘッダと実装を行き来しな

    既存のObjective-CアプリケーションをSwiftで書き換えた話 - クックパッド開発者ブログ
    punitan
    punitan 2015/05/07
  • クックパッドにおけるサーバ監視と運用の工夫 - クックパッド開発者ブログ

    こんにちは。インフラストラクチャー部の加藤(@EugeneK)です。 今回はWebサービスを運用する上で欠かせない、モニタリングをクックパッドでどうしているかという話をします。 死活監視と性能監視 Webサービスを運用している以上、そのサービスを稼働しているサーバがあり、サーバには故障やトラブルが発生します。 また、どれくらいのパフォーマンスが出ているか、リソースをどのくらい消費しているかなどのトレンドを把握することは、成長するサービスを支えていく上で欠かせません。 故障やトラブルにいち早く気づくための仕組みを死活監視と言います。 また、サーバリソースの時系列での推移を知るために、グラフとしてトレンドを可視化する仕組みを性能監視と言います。 ポーリング監視の限界とZabbixのアクティブ監視 クックパッドでは死活監視にNagios、性能監視にMuninを使用してきましたが、サーバ台数の増加

    クックパッドにおけるサーバ監視と運用の工夫 - クックパッド開発者ブログ
    punitan
    punitan 2015/05/07
  • クックパッドの課金を支える技術 - クックパッド開発者ブログ

    こんにちは、技術部の大石です。開発基盤グループで課金システムの担当をしています。 インターネットサービスの決済・課金システムの開発や運用は、サービスの根幹を支えるために正確性と機能性を満たさなくてはなりません。また同時に、価格や料金体系、決済手段のバリエーションでユーザーに利便性を提供する必要もあります。「堅牢性」「信頼性」と「柔軟性」「開発スピード」という相反する要素の両立が求められます。 その結果、決済・課金システムは適切な設計や運用を意識しないと複雑になってしまいがちです。 課金システムの開発、運用でよくある問題 複数の決済方法を同じサービスの上で共存させる難しさ 例えば、最初にクレジットカード決済を導入して、その後にコンビニ決済、キャリア決済やアプリ内決済と決済方法が増えていくことはよくあることです。 最初の導入の際にクレジットカード決済への設計だけでなく、その後に増えていく決済を

    クックパッドの課金を支える技術 - クックパッド開発者ブログ
    punitan
    punitan 2015/04/09
  • 新規サービスの管理画面を短期間で見栄え良く実装する - クックパッド開発者ブログ

    こんにちは、クックパッド料理教室の京和です。 管理画面はほとんどのウェブサービスに存在し、ユーザサポートやサービスの状況・KPIなどを確認するために、スタッフが毎日利用するとても重要なものです。にも関わらず、新規サービスでは人員が不足していることから、ついおざなりなデザインや実装になりがちなのではないでしょうか。 今回はクックパッド料理教室で採用している、RailsのMountable EngineとBootstrapのデザインテンプレートを使った、見栄えがよくメンテナンスしやすい管理画面を短期間で実装する方法についてご紹介します。 Mountable Engineとは Mountable EngineはRailsアプリケーション上で動く、ミニRailsアプリケーションのようなものです。 ミニと書きましたが、Railsアプリケーション(Rails::Application)はRails::

    新規サービスの管理画面を短期間で見栄え良く実装する - クックパッド開発者ブログ
    punitan
    punitan 2015/04/06
  • 雑な発想を活かすチーム作り - クックパッド開発者ブログ

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

    雑な発想を活かすチーム作り - クックパッド開発者ブログ
    punitan
    punitan 2015/03/25
  • iOS アプリの UI でこれだけはおさえたい細部のインタラクション3つ - クックパッド開発者ブログ

    Holiday 事業室の多田です。先日 Elasticsearch の記事を書いた内藤と共に Holiday ( https://haveagood.holiday ) の開発を行っています。 Holiday は、去年9月に Web 版をリリースしましたが、よりおでかけを楽しくするために今年3月に iPhone アプリをリリースしました(ダウンロードはこちら)。 アプリの開発過程ではコンセプトや仮説を立て、その検証や実現のために作っては壊すことを何度も繰り返し行いますが、実現したい価値を提供するためには、出来上がったプロダクトの細部のインタラクションも重要になってきます。細かい部分に気を配り使い心地を良くしてこそ、当に提供したい価値をまっすぐに届けることができるためです。逆に言えば、最後の最後で細かい部分がちゃんとしていないばかりにそれまでの過程が無駄になったらもったいないですよね。 今

    iOS アプリの UI でこれだけはおさえたい細部のインタラクション3つ - クックパッド開発者ブログ
    punitan
    punitan 2015/03/19
  • アプリで利用する画像について - クックパッド開発者ブログ

    ユーザーファースト室のhidaka(@kaa)です。 クックパッドアプリ内では元々同じレシピの画像を画面、環境によって様々なサイズで表示しています。 レシピの検索結果でのサムネイルや、レシピ詳細画面、写真の拡大表示時などなど。 その際、端末の解像度にあわせ無駄のないよう、表示領域にあわせて画像をリクエストしていました。 *画像配信にはtofuという配信システムが稼働しています http://www.slideshare.net/mirakui/ss-8150494 これでそれぞれの端末にあわせた画像を配信していましたが、今年あたりからさらに最適化が必要になってきました。 問題1 画面密度の上昇 端末のスペックが上がることにより、1インチあたりのピクセル数が増加しました。 retinaと言われていたiPhone 5で326dpiだったのが去年あたりからの高解像度端末の幅1440pxの機種(a

    アプリで利用する画像について - クックパッド開発者ブログ
    punitan
    punitan 2015/03/05
  • データがどのように更新されてきたのか追跡する - クックパッド開発者ブログ

    こんにちは。技術部の吉川です。 みなさんは、異常なデータを見つけたが、どうしてそのような状態になったのか追跡できず困ったという経験はないでしょうか。 今回は、そんなときにクックパッドで利用されているAuditログについてご紹介します。 Auditログとは クックパッドでのAuditログは特定のデータレコードに対して発生したイベントをコンテキストとともに記録するものです。 一般的に監査ログ、証跡ログといったものがありますが、それらとは多少異なっています。 ここでのイベントとは、あるデータレコードが 作成された 更新・変更された 削除された といったものです。またそれ以外にもログインした、ログアウトした、セキュアな情報が閲覧された、といったイベントも含まれています。 コンテキストは以下のようなものを記録します。 いつ どこで 処理が行われたホスト 何が イベント 何を 対象データの情報 スキー

    データがどのように更新されてきたのか追跡する - クックパッド開発者ブログ
    punitan
    punitan 2015/02/26
  • 脱ビギナー!Androidのnullな話 - クックパッド開発者ブログ

    新規広告開発部の松です。 クックパッドiOS/Androidアプリの広告の開発に携わっています。 Androidアプリ開発の際、皆さんはnullをどのように扱っていますか?また、nullチェックを行うのであれば、どのような基準で行っていますか?私自身まだまだAndroid開発歴が浅いため、特に何か基準がある訳でもなく至る所でif (foo != null)といったnullチェックを行おうとしていました。 これに対し、先日の社内コードレビューでとてもためになるアドバイスをもらいました。私のようなAndroid初心者にとってnullに対する考え方の基礎を作ってくれるレビューだったので、稿で共有したいと思います。 また、AndroidJava開発に慣れた方にとっては「今更そんな話か」といった内容かと思いますが、クックパッドでのレビューの一例としてご覧いただければ幸いです。 やりがちなnul

    脱ビギナー!Androidのnullな話 - クックパッド開発者ブログ
    punitan
    punitan 2015/02/23
  • ES6時代のJavaScript - クックパッド開発者ブログ

    こんにちは会員事業部の丸山@h13i32maruです。 最近のWebフロントエンドの変化は非常に激しく、ちょっと目を離した間にどんどん新しいものが出てきますよね。そんな激しい変化の一つとしてES6という次期JavaScriptの仕様があります。このES6は現在策定中で、執筆時点ではDraft Rev31が公開されています。 JavaScriptはECMAScript(ECMA262)という仕様をもとに実装されています。 現在のモダンなWebブラウザはECMAScript 5.1th EditionをもとにしたJavaScript実行エンジンを搭載しています。 そして次のバージョンであるECMAScript 6th Editionが現在策定中で、略称としてES6という名前がよく使われます。 今回は、他の言語にはあってJavaScriptにも欲しいなと思っていた機能や、JavaScriptでよ

    ES6時代のJavaScript - クックパッド開発者ブログ
    punitan
    punitan 2015/02/02
  • MacからiPhoneに遷移させよう - クックパッド開発者ブログ

    こんにちは。モバイルファースト室の中村(@_nkmrh)です。 突然ですが、Mac上で探したレシピをすぐiPhoneで見られると便利だと思いませんか? 先日リリースしたiOSクックパッドアプリではそれが出来るようになりました。 とても便利なのでぜひ活用してください。 ※ 実はこの便利機能、次のバージョンで一旦取り下げ、問題を解決したあとで再度導入することになりました。以降の記事で事情を説明します。 Mac OS X YosemiteがインストールされたMac、iOS 8がインストールされたiPhone 5以降、iPad 第4世代、iPad Air、iPad mini、iPad mini Retinaディスプレイモデル、iPod touch 第5世代でご利用いただけます。 MaciPhoneに同じiCloudアカウントを設定して下さい。 これがその様子...。 Mac上のSafariでクッ

    MacからiPhoneに遷移させよう - クックパッド開発者ブログ
    punitan
    punitan 2014/12/16
  • Androidアプリ開発で素早くフィードバックをえるためのライブラリを作りました - クックパッド開発者ブログ

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

    Androidアプリ開発で素早くフィードバックをえるためのライブラリを作りました - クックパッド開発者ブログ
    punitan
    punitan 2014/12/15
  • 既存のアプリのiPhone 6と6 Plus対応 - クックパッド開発者ブログ

    はじめまして、11月頭にクックパッドに入社したモバイルファースト室のヴァンサン(@vincentisambart)です。 既存のiOSアプリのiPhone 6と6 Plus対応について書きたいと思います。 既存のiOSアプリはiPhone 6対応済みだと明確にOSに示さないと、iPhone 6でも6 PlusでもiPhone 5の画面を拡大したものが表示されます。アプリから見える画面のサイズはiPhone 5と同じ320x568です。 iPhone 6対応がされていると示すには、方法が2つあります: 静的起動画面:iPhone 6とiPhone 6 Plusの画面サイズに合わせた静的な起動画面用の画像をアプリに入れます。 動的起動画面:起動画面をXIBファイルという形でアプリに入れます。 iOS 7以下は動的起動画面を対応していません。iOS 7以下対応のアプリが動的起動画面を使っても問題

    既存のアプリのiPhone 6と6 Plus対応 - クックパッド開発者ブログ
    punitan
    punitan 2014/12/05
  • WebPでモバイルアプリの通信量を劇的に削減する - クックパッド開発者ブログ

    モバイルファースト室の @slightair です。 クックパッドの iOS/Android アプリは、少し前のバージョンからWebP形式の画像をサーバから取得して表示するようにしています。 この記事では、なぜ画像形式をWebPに切り替えたのか、また切り替える上で注意した点などを説明します。 Cookpad アプリと画像 クックパッドのアプリはユーザさんに投稿していただいたレシピを表示するアプリケーションです。その性質上、レシピ画像や調理手順、検索画面のサムネイルなどたくさんの画像をサーバから取得して表示する必要があります。 画像の数が増えたりサイズが大きくなればなるほど通信量が増えます。最近はスマートフォンの画面サイズがどんどん大きくなっているので、それに合わせて取得する画像を大きくしていくとさらにファイルサイズが増え、通信量も増えていってしまいます。 サーバとやりとりするデータが多くな

    WebPでモバイルアプリの通信量を劇的に削減する - クックパッド開発者ブログ
    punitan
    punitan 2014/12/05
  • SwiftとObjective-Cのコードを1つのプロジェクトでつかう - クックパッド開発者ブログ

    こんにちは。モバイルファースト室の中村(@_nkmrh)です。 仕事Swiftを使うことはまだないのでSwiftについて色々気になっている今日この頃です。 今回はSwiftとObjective-C(以下、Obj-C)を1つのプロジェクト内でつかう方法と、両者の相違点について気になった点を紹介したいと思います。 Swift -> Obj-C まず、SwiftからObj-Cを使う方法です。 SwiftからObj-Cを使うには、[product module name]-Bridging-Header.hを作成します。 ※ [ProductModuleName]は通常ProductNameと同じです。ProductNameにアルファベット以外の文字を使っている場合、その文字は( _ )(アンダースコア)に置換されます。 Xcodeのメニュー"File > New > File > (iOS o

    SwiftとObjective-Cのコードを1つのプロジェクトでつかう - クックパッド開発者ブログ
    punitan
    punitan 2014/12/03
  • Swiftで遊んでますか? - クックパッド開発者ブログ

    モバイルファースト室の三浦です。 みなさんはplayground使っていますか? Swiftにはplaygroundが用意されていて手軽にかつライブレンダリングでコーディングをすることができます。 CoreGraphicsの描画などを確認しながらコードを書くこともできてとても便利です。 早速Swiftで簡単なスケッチをしてみましょう! Xcodeでplaygoundファイルを新規作成します。次にUIKitをimportします。 import UIKit 次に表示のためのUIViewを生成します。 // ビューのサイズ let size = CGSize(width: 200, height: 200) // UIViewを生成 let view:UIView = UIView(frame: CGRect(origin: CGPointZero, size: size)) view.back

    Swiftで遊んでますか? - クックパッド開発者ブログ
    punitan
    punitan 2014/11/17
  • iOSアプリ間連携の実装に x-callback-url を使う - クックパッド開発者ブログ

    はじめに モバイルファースト室の @slightair です。 クックパッドが提供しているiOSアプリには、連携して機能するものがあります。 買い物リストアプリを例に挙げると、クックパッドアプリのレシピ画面からレシピに使われている材料を買い物リストアプリに登録することができます。 この機能は、x-callback-url という仕様に沿って実装しています。 x-callback-url は別のアプリの呼び出しや情報の受け渡しに使うカスタムURLスキームの形式を定義するものです。 この仕様に沿って実装することで、他のアプリから呼び出せる処理や必要なパラメータをきれいにまとめることができます。 この記事では x-callback-url を用いたアプリ間連携の実装について説明します。 カスタムURLスキーム iOSアプリで他のアプリに遷移しつつなにかしらの情報を渡すにはカスタムURLスキームを

    iOSアプリ間連携の実装に x-callback-url を使う - クックパッド開発者ブログ
    punitan
    punitan 2014/11/17
  • クックパッドの検索の裏側 - クックパッド開発者ブログ

    初めまして、インフラストラクチャー部の加藤 (@EugeneK) です。 クックパッドでは現在178万ものレシピが公開されていますが、目的のレシピを探すために検索機能を提供しています。 今回は検索機能の裏側の仕組みについて、インフラストラクチャーの観点からお話ししようと思います。 全ての検索機能を支えるSolrと周辺のアーキテクチャ クックパッドにはレシピの検索だけでなく様々な検索機能がありますが、その全てはSolrを活用して実装されています。 以前はMySQL Tritonnによる全文検索機能を使用していましたが、2011年頃からSolrに切り替わりました。 クックパッドではSolrをマスタ - スレーブ構成にすることで冗長性と負荷分散を実現しています。以下の構成図をご覧ください。 マスタとスレーブの間には、リピータと呼ばれる検索インデックスを中継するためだけの役割のサーバがいます。この

    クックパッドの検索の裏側 - クックパッド開発者ブログ
    punitan
    punitan 2014/10/27