API の検索結果:

クックパッド Android アプリ CI を CodeBuild に切り替えた話

…があった 実行環境(API Level や 端末種別)をプロジェクト側で個別に設定できない 実行ごとに AMI を変更することは難しいため → Firebase Test Lab の利用 コスト面に関してはただ高いから移行すべきということではなく、他の2つの問題点とあわせ見直しを図ったものです。 これらの問題を複合的に捉え、今回は EC2 + Genymotion Cloud から CodeBuild + Firebase Test Lab という以下のような構成に変更しまし…

license-tools-pluginの移行に関するお知らせ

はじめまして、クックパッドでAndroid開発を担当している吉田です。 本記事は弊社がOSSとして公開していたAndroid向けのライセンス管理プラグインに関するお知らせです。 2行まとめ cookpad/license-tools-plugin はアーカイブしました 今後は互換性があるcookpad/LicenseToolsPluginを作成したのでお試しください 旧license-tools-pluginをアーカイブした背景 クックパッドでは社内で利用していたライブラリの…

Amazon Elasticsearch ServiceをつかったRDSのスロークエリの集計と監視

こんにちは、SREの菅原です。 クックパッドの多くのシステムは AWS 上で稼動しており、そのWebサービスの多くはデータベースにAmazon RDSを使っています。 WebサービスがDBを使う場合、ボトルネックになりやすいDBのパフォーマンスを落とさないためにスロークエリの監視はとても重要です。そこで、Amazon Elasticsearch Serviceを使ったスロークエリの集計・監視システムを構築したので、それについて紹介したいと思います。 ※今のところMySQLエン…

プロと読み解くRuby 2.7 NEWS

…ちらも受けるという API は辞めていくのがいいのではないでしょうか。 ブロック無し proc/lambda 禁止の背景 この修正が行われたきっかけは、実はまつもとゆきひろさんの提案(入ってない)で、ブロックを受け付けないメソッドを def foo(&nil) と定義できるようにするとどうだろうか、というものでした。この提案は、ついうっかり間違えてブロックを使わないのにブロックを渡してしまう、というミスを回避することを目的としていました(間違えて、p{...} とか、書いたこ…

【開催レポ】Cookpad Tech Kitchen #22 決済基盤の最新事情

…れてると思います。 APIを扱うSDKはイメージが着くが、決済や認証などはアプリのライフサイクル/UIのどこでその処理を行うか?が重要だと思っている。が、そのSDKを呼び出すタイミングなどはどう制御しているのか?(導入時に支援としてモブしたりとか??) SDKにおいては実装ガイドラインも提供しています。ガイドラインでは導入時に実装すべき事と呼び出しタイミングについても触れられており、これを元に実装して頂いています。もちろん、モブプログラミングのように直接導入支援を行ったケース…

cookpad storeLive のクライアントアプリ開発の裏側

…ータが欲しい場所で API を叩くのではなく、 LiveData を observe しておき、新しいデータが欲しい場合は API を叩き結果を DB に insert すると、 UI の更新が可能です。 一見 DB が間に入っているため面倒ですが、一度でも UI が表示できれば DB にデータが入っているため、ネットワークがないとき、つまりオフラインでもアプリが動作するのでこれでオフライン機能の完成です。 また今回のオフライン機能は DB のデータを真としているため表示して…

Amazon Athena を使ったセキュリティログ検索基盤の構築

…せずによりシンプルなAPIとして使えるようにAPI gatewayを通してリクエストできるようにしています。これは、この検索基盤をエンジニアがWeb UIを通して使うだけではなく、将来的に他の社内セキュリティシステムとも連動させたいと考えており、その際にSQL文構築の知識を分散させずにMinervaの中に閉じ込めておきたい、という意図もあります。 Web UIについてはまだ開発中ではありますが、現在は以下のようなシンプルなインターフェイスで動かせるよう開発を続けています。 本…

クックパッドアプリ(Android)の開発効率化のためにやったこと/やっていること

…換えていきました。 API 21から RippleDrawable も使えるようになっていて、この部分は素直に minSdkVersion21 の恩恵を受けられた部分でした。 android:elevation の指定で影をつける 当たり前なんですが古い端末での挙動とか何も考えずに elevation で影が落ちるというのが本当に楽で良いのです。 *-v21 系代替リソースの整理 Style や Theme 系リソースに *-v21 で分岐させていたリソースがあったので、mi…

データ活用基盤の今 〜DWH外観図〜

…一応、メール通知とZapierという外部のオートメーション化サービスを組み合わせることで自動通知を実現できますが、こちらにも実は問題があります。現在クックパッドでは専用botでの通知運用をしつつ、Tableau公式によるSlack連携機能がくる日を待ちわびています。 さらにライセンス管理についても課題があります。先にはダッシュボード用BIツールの項目で「ヘルプデスクへ申請を出すだけでライセンスキーが割り当てられる」と書きましたが、定型化したとはいえここは裏側で手作業が発生して…

退職処理を可能な限り自動化する

…たいが無効化を行う API が無いなどです。いい感じの API が生えてくれることを願っています。 まとめ SRE で運用している退職処理自動化の仕組みについて説明しました。汎用的な仕組みとして設計したため、この仕組みを活用して退職処理を自動化している SRE 以外のチームもあります。 繰り返される自動化可能なタスクを可能な限り自動化していくことにより、本質的な作業にかける時間を増やすことができます。この仕組みを導入してから 1 年以上が経過しており、自動化を実装する時間と比…

Ruby中間表現のバイナリ出力を改善する

…ISeq に関する API は RubyVM::InstructionSequence としてその一部が外部に公開されているため、Ruby プログラムからも (ごく簡単な操作に限ってですが) 取り扱うことが可能です。 # 文字列をコンパイルして ISeq を得る iseq = RubyVM::InstructionSequence.compile("p 42") # 得られた ISeq を RubyVM で実行する iseq.eval # => 42 # ISeq に含まれて…

2019 年度版:クックパッド x 広告領域の紹介

…を行うため、AWS APIGateway + Lambda を利用した Microservices として実装されている Logging (Lambda Architecture) batch layer いわゆる「DWH(Data Warehouse)」 すべてのログが格納されており、配信比率の最適化、レポーティング用集計など、入稿システムのあらゆる箇所で利用されている サービスオーナーは DWH チーム 業務推進チームやディレクターは、Tableau を利用しダッシュボー…

Cookpad Summer Internship 2019 10 Day Techコースを開催しました

…でした。 3日目: API 今年の10 Day Techコースの技術面でのテーマは「クックパッドらしさ」というのが実はあるのですが、3日目から5日目にかけてMicroservices、適材適所な技術選定、クラウド技術などを意識した講義になっています。 3日目〜5日目の講義の中でもこの3日目がテーマが一番色濃くでたのではないかと思います。3日目ではNode.js(TypeScript)を用いてBFF層(Backend-For Frontend)となるGraphQLサーバーの実装…

Android cookpadLiveで採用してる技術 2019夏

…ジュールで共通処理 APIアクセス、Repository、データモデルなど appcore スマホアプリ共通処理 共通View、ログ、リソースなど feature 各機能を分割したモジュール app スマホアプリメイン smarttv TVアプリ共通処理 共通View、ログ、リソースなど androidtv AndroidTVメイン firetv FireTVメイン まだfetureモジュールは分割できる箇所があるので、少しずつでも進めていきたいと思います。 課題と今後 テス…

Google Play Billing Client 2.0における消費型商品の決済の承認(acknowledgement)について

…he client API. とあるように、アプリ上でconsumeAsyncを呼び出す事で消費(consume)しつつ決済の承認も行われるので、図に追加した⑤については特にやる事はないのでは?と思われた方もいるかと思います。 しかしながら、商品付与が行われるタイミングにおける決済の承認状態は2.0では未承認、それ以前では承認済という違いがあり、 この違いによってアプリ改ざんに対するリスクを考慮する必要性がでてきます。 consumeAsyncを呼び出さないようにアプリを改ざ…

インフラのコスト最適化の重要性と RI (リザーブドインスタンス) の維持管理におけるクックパッドでの取り組み

…。クラウドであれば、API を通してリソースを操作できるため、ソフトウェアエンジニアリングで解決できる部分が大きいです。 コスト最適化に見て見ぬふりをしていると、じわじわと組織の首を絞めていきますし、節約できていれば本来有意義に使えたお金が失われることになります。キャッシュが枯渇してから慌てていては、もう手遅れです。 コスト最適化を考えるにあたって、以下の 2 つの軸が存在するとわたしは考えています。 リソースプールのコスト最適化: RI を適切に保つ、スポットインスタンスを…

Grafana の scripted dashboards を利用してダッシュボードを自動生成する

… to fetch API response from hako-console: ${e}`; callback(fallback); } }; この例ではクエリストリングで app_id というアプリケーションの識別子を受け取り、それを hako-console に問い合わせています。hako-console はこの問い合わせに対してこのアプリケーションに関連する ALB、RDS、Memcached 等のリソースを見つけ、それぞれに対応するメトリクスを表示するようなダッシ…

Simpacker: Rails と webpack をもっとシンプルにインテグレーションしたいのです

…acker 独自の API や webpacker.yml という設定ファイルを通して webpack の設定をする必要があるというところです。 Webpacker のドキュメントに書いてある範囲内であったり、Webpacker にデフォルトで組み込まれている設定であれば webpack のことを知らなくてもなんとなく webpack が使えるという点は便利なのですが、webpack のことをすでに知っていたり、Webpacker のドキュメントにない設定をしようとした場合、…

おすすめの食べ方を見ながら食材を買える体験を作った話

…ピサービス側に必要なAPIのエンドポイントを作成し、クックパッドマートの管理画面からアクセスしてデータを取得できるようにする機能を早めの段階で実装しました。実際にどんなデータが何件返ってくるのかを確認できることで、デザインと現実のギャップを埋めることができました。 段階的に実装・リリースする 今回は、変更全体を一度にリリースするのではなく、商品詳細に「食べ方」を表示するフェーズと、アプリのホームに「食べ方」を表示するフェーズの二段階に分けて、リリースを進めました。 リリースを…

SwiftUIで使用されているSwift5.1の新機能

iOS

…osure @escaping () -> Value) { self = .uninitialized(initialValue) } var value: Value { mutating get { switch self { case .uninitialized(let initializer): let value = initializer() self = .initialized(value) return value case .initialized(l…

モダンBFFを活用した既存APIサーバーの再構築

…、スマホアプリからのAPI呼び出し回数はできるだけ増やしたくない、という要望です。 図1を見てください。 既存APIサーバーとは別に新しいmicroservice(API)を追加してスマホアプリから呼べば、 今回追加する部分はきれいに分かれていて実装も簡単です。 しかし、それではスマホアプリからのAPI呼び出し回数が増えてしまいます。 図1: 単純にサービスを増やすとAPI呼び出し回数が増えてしまう 例えばクックパッドアプリのトップページは現在でもすでに10以上のAPIを呼ん…

レシピ検索を支えるレガシーでクリティカルな大規模バッチを刷新した話

…料理動画サービスの API を叩いてそのレシピに料理動画が紐付けられているかを取得してくるなどの処理がおこなわれており、新規事業が次々に増えている現在の状況を考えると、この手の依存はこれからも増大することが予想されていました。 cookpad_all に存在している 旧検索バッチは cookpad_all と呼ばれる、レシピ Web サービスとその管理画面や関連するバッチ群、mobile アプリ用 API などがすべて盛り込まれたレポジトリ上に存在しており、各サービス間でモデ…

Working with AWS AppSync on iOS

…/from S3. API - The GraphQL client that facilitates fetching and mutating records in DynamoDB. The first thing to understand about these SDKs is that they're all very different. They were written at different times by different teams with d…

RubyKaigi 2019 Cookpad Daily Ruby Puzzles の正解と解説

Ruby 開発チームの遠藤です。RubyKaigi 2019 が無事に終わりました。すばらしい会議に関わったすべてのみなさんに感謝します。 開催前に記事を書いたとおり、クックパッドからはのべ 7 件くらいの発表を行い、一部メンバは会議運営にもオーガナイザとして貢献しました。クックパッドブースでは、様々な展示に加え、エンジニアリングマネージャとトークをする権利の配布やクックパッドからの発表者と質疑をする "Ask the speaker" など、いろいろな企画をやりました。 ク…

GraphQL Asia 2019 で登壇しました

…e capture APIS.GURU - GraphQL Tools are easy or how to write one in less than 100 lines Agenda https://www.graphql-asia.org/speaker/ivan-goncharov Slide https://docs.google.com/presentation/d/1y7sxFkBllIDb8-ypoaoUO7ed6UQiRHp6gZ59AaArFYM/edi…

RubyKaigi 2019: Write a Ruby interpreter in Ruby for Ruby 3

…産性の問題 (4) API に context を追加したい問題 これらの問題を解説します。 (1) アノテーション(メタデータ)の問題 C メソッドには、いくつかの意味で情報が足りていません。 (a) Ruby メソッドに比べて情報が足りません。 例えば、Method#parameters という、パラメータ名を取得刷るメソッドを利用すると、 def hello(msg) puts "Hello #{msg}"; end p method(:hello).parameter…

クックパッドマートAndroidアプリの画面実装を最高にした話【連載:クックパッドマート開発の裏側 vol.4】

…ata>() // APIから返ってきたリストとする val adapter = GroupAdapter<ViewHolder>() recycler_view.adapter = adapter adapter.update(mutableListOf<Group>().apply { items.forEach { add(DataItem(it)) } }) たったこれだけです。とても簡単ですね。 詳細画面の場合、データの有無で表示する/しないを切り替える必要があった…

SRE Lounge #8 でスポンサー & 登壇をしました

…表について ソラコムAPIの裏側で運用チームは何をやってきたのか 最初は、株式会社ソラコムの五十嵐様より、「ソラコムAPIの裏側で運用チームは何をやってきたのか」というタイトルで発表がありました。 ソラコム様でのシステム構成や、内部での DevOps の取り組みや苦労についてお話されたあと、 SRE の採用について、各社の Job Description の分析についての調査結果を踏まえてお話されていました。 資料はこちらです。 Cookpad Microservice Ar…

マイクロサービス化を支える継続的切り替え術

…であれば HTTP API や gRPC などの方法を用いる を前提にしてお話していきます。 コードベースの切り替え戦略を考える コードベース切り替えには大きく2つの戦略があります。 いわゆるビックバンデプロイと小分けにして継続的にデプロイしていく、というものですね。 モバれぴは完全に作り直すことにしたため、まずビックバンデプロイは無理だと判断しました。 仕様が同じとはいえ実装詳細が変わる以上、必ずなにかの問題が起こります。問題が起きると全体をロールバックするしかないので、全…

レシピのタイトルから材料を予測する🚀

…&Suggest (API Server) S3からWord EmbeddingモデルとSentence EmbeddingモデルとFaiss Indexをダウンロードします。 Word EmbeddingモデルとSentence EmbeddingモデルとFaiss Indexをメモリにロードします。 Embeddingモデルを使用して、入力されたタイトルをベクトルに変換します。 Faissを使用してk個の類似するレシピを検索します。 類似するレシピの中で最も一般的な材料を…