API の検索結果:

iOSDC Japan 2022 ありがとうございました!#iwillblog

…avigation APIを俯瞰した説明や、既存のNavigation APIの課題と課題に対するアプローチを紹介しています。 speakerdeck.com 9/28に開催されるAfter Party iOSDC Japan 2022では本編トークに入り切らなかった話もされるそうですよ! cookpad.connpass.com Swift 5.7で変わる正規表現を試してみよう / ainame https://fortee.jp/iosdc-japan-2022/prop…

新卒向け社内研修制度Horizonを利用してイギリスに出向してきました

…ジェクトへのOpenAPIの導入でした。 具体的な業務内容は別ブログでご紹介していますのでよかったらご覧ください。 techlife.cookpad.com 当初の予定では初めの3か月プラットフォームチームで働いてその後プロダクトチームで働きたいとバディ*と話していたのですが、結局このプロジェクトが楽しくなってしまい5か月以上プラットフォームチームで働いていました。 *入社してから数か月は同じ領域のエンジニアがバディとして付いてくれる。 6か月目にプロダクトチームのiOSエン…

OpenAPI SpecificationsからiOSプロジェクトのネットワーク層を自動生成する

…取り組んだ、OpenAPI SpecificationsからiOSプロジェクトのネットワーク層を自動生成する話をしたいと思います。 海外出向研修プログラムについての体験談はこちらをご覧ください。 techlife.cookpad.com 本題に入る前にまず海外版Cookpadについて簡単に紹介します。 海外版Cookpadは、日本のクックパッドレシピサービスとはコードベースも開発チームも会社も分かれていて、イギリスのブリストルという都市にあるオフィスをベースとするチームによっ…

【RubyKaigi発表予告】error_highlight: user-friendly error diagnostics

…highlightのAPIを直接使って専用の表示をするようにしました。 github.com SentryとDataDogは、Exception#detailed_messageを提案したチケットの中で、#detailed_messageを使うようにすることを約束してくれました。彼らの同意が得られたから#detailed_messageが導入できたという背景もあります。 しかし、エラー表示をしたいフレームワークは他にもたくさんあるので、地道に対応していく必要があるでしょう ま…

クックパッドマートにおけるアカウント統合

…ント統合を実行する API を直接リクエストするようにしました。 幸いクックパッドマートのアカウント統合処理自体は 1 秒もかからないものであるため、ジョブキューシステムを用いた非同期的な処理から API のリクエストという同期的な処理に変更することにより、クックパッドマートマートの初回ログイン処理も、現在は一瞬で完了するようになりました。 このように、必要に応じてアカウント基盤自体の改修が実施できることも、社内基盤を用いている利点の一つです。 おわりに クックパッドマートの…

クックパッドマートアプリのログインの裏側〜Android アプリの実装を添えて〜

…。 定期的な間隔で API を叩き、処理が完了したことをサーバーから受け取る 双方向通信を行うような仕組みを導入し、サーバーからデータを受け取る この画面のためだけに双方向の通信を実現するのはさすがにオーバースペックだったため、今回のケースでは前者を採用しました。 ただ、闇雲に繰り返しを実装するだけでは一生終わらない可能性もあります。ユーザーも呆れ果てて離脱してしまうかもしれません。ということで、この繰り返しには十分な期間を設け、その期間が終了するまでに完了を確認できなかった…

Fluentd 集約ノードのオートスケール

… Map に対する API コールはすぐにレスポンスが戻りますが登録が完了したか・その成否はわからず、そのレスポンスに含まれる ID を使って GetOperation API で問い合わせる必要があるということです。今回は登録時に SQS キューにメッセージを送信し (4)、登録完了を確認する Lambda 関数を SQS から呼び出す (5) ことでこの登録待ちを実現しました。登録が完了していなかった場合に Lambda 関数が失敗する (6) ことで、SQS の可視性タ…

クックパッドマートの配送ルートを自動生成している仕組み

…が、バックエンドの API だけでも利用することが可能です。クックパッドマートでは社内にデプロイした OSRM の API を使って移動時間を計算しています。また、この API は数十msと比較的高速にレスポンスを返してくれますが、ルート生成の過程では大量の移動時間の計算が発生するため、必要になる移動時間は事前に計算して DB に入れておいて、計算時には一括でメモリに載せてしまうなどのパフォーマンス上の工夫もいくつかおこなっています。 各ハブのキャパシティ考慮 近くのハブから…

クックパッドマートのドライバー向けWebアプリケーション

…クライアントから直接APIを呼んでいます。パブリックに公開しているサービスではないのでSEO対策が不要なこととそこまでシビアなパフォーマンスを求められるわけではないので基本的にはSSR(Server Side Rendering)を使用せずシンプルな構成にしています。 SSG(Static Site Generator)も検討しましたが、一部動的に処理したいものがあったためバックエンドと同じく社内基盤のAWSのECS上にデプロイしています。 MUIを活用 ドライバー向けという…

fastText in Cookpad

…デルが大きかったり、API として使うには推論が遅かったりといった問題が残ります。 このように、性能と運用のバランスを考えると、fastText はいまでも非常に優れた選択肢だと思います。 fastText を使っている取り組み クックパッドで fastText を使っている取り組みとしては、たとえば、以下があります。 単語埋め込みを利用した商品に対するキーワードの予測(to appear). 山口泰弘, 深澤祐援, 原島純. 言語処理学会第 28 回年次大会発表論文集. こ…

3/12 (土) 開催!「6社合同SRE勉強会」のクックパッドのセッションを紹介します

…ョンで提供しており、API での連携の基礎ができてきたりマイクロサービス化が始まりつつありました https://techlife.cookpad.com/entry/2014/09/08/093000 。レシピサービスのマイクロサービス化についてはお台場プロジェクト https://techlife.cookpad.com/entry/2018-odaiba-strategy へと続いていき、このお台場プロジェクトによって大きく進みました。現在のレシピサービスは Web フ…

レシピページのOGP画像を動的に生成する

…da のトリガーを API Gateway にして HTTP エンドポイントからアクセスできるようにし、レスポンスのキャッシュ用途でその前段に CloudFront を置いています。 処理がシンプルであること、メンテナンスコストが低いことからサーバレスなアーキテクチャを選択しましたが、リリース後に AWS の CostExplorer を確認したところ $1/day 未満のコストで済んでいるため、金銭面でも良い選択だったのではないかと思っています。 アーキテクチャの選定 上述…

クックパッドの基盤をフル活用して新卒が新規アプリケーションを作った話

…そのドメイン固有の API サーバーを持っていませんでした。購入や決済などの基本的な機能は既に Cookpad Mart のアプリケーションサーバーにあったため、そこに相乗りする形で開発をしていました。 すなわち、「Cookpad Mart では利用しないが、買い物機能では利用したい」API などがあった場合は Cookpad Mart のアプリケーションサーバーに強引に乗せるか、BFF などのオーケストレーション層に乗せるほかない状況でした。 このような決定をした理由として…

Ruby 3.1 の debug.gem を自慢したい

…2 に導入された新 API を用いたデバッガだったんだと思いますが、コンソールから利用するデバッガとしては、一番利用されていたかと思います。pry-debug(deivid-rodriguez/pry-byebug: Step-by-step debugging and stack navigation in Pry )も、byebug を利用していました。 また、Rubymine や VSCode の ruby extension では debase(ruby-debug/…

プロと読み解く Ruby 3.1 NEWS

…完全にプロユースの API だが at_fork はカジュアル感がありすぎる 複数のライブラリが at_fork したとき、何個目のフックが呼ばれているのかがわからない(運悪くフックの処理内容が競合していると例外が起きるかもしれないが、バックトレースを見てもわからない) Ruby のどこでどのように fork が使われているか把握しきれていない すでに自力でKernel#forkなどを再定義してフックしているライブラリといい感じに共存できるかわからない などなど非常に多数の課…

クックパッドマートアプリの開発体験改善に向けたJetpack Compose導入の検討と実践、そして新たな課題

こんにちは、買物プロダクト開発部のYuto Koguchi(@10llip0p)です。2020年に新卒入社し現在はクックパッドマートのAndroidアプリ開発に従事しています。 クックパッドマートアプリ(Android)はリリースから約2年半が経ち、おかげさまで日々多くのユーザーにご利用いただいております。それに伴って実装の規模や複雑さも増していることから開発効率向上のために日々様々な改善を行っています。 その上で本稿ではクックパッドマートアプリのUI実装の課題とその改善に向…

Redshiftのデータをサービス改善に役立てるデータ転送システム Queuery

…接接続せずHTTP APIで取得系クエリを実行できるようになります。 アプリケーションからRedshiftへ接続する手法 仕組み QueueryはRedshiftへUnload文を投げる役割を持つAPIサーバーと、Unload結果をS3から取得するクライアントに分かれています。クライアント側から投げられたSELECTクエリをHTTP API側で受け取り、Unload文へラップしてRedshiftに投げます。クライアント側はその結果をポーリングし続け、Unloadが完了したらS…

既存実装を活用しつつJetpack Composeを用いてクックパッドAndroidアプリの買い物機能を高速に開発している話

… における相互運用 API として用意されているAndroidView/AndroidViewBinding*3を用いることで、マートAndroid で画面を構成している Layout XML をそのままクックパッドAndroidで利用することで開発速度の向上を図っています。 実装について Jetpack Compose版VIPERベースのアーキテクチャ Jetpack Compose版アーキテクチャに関して、2020年のクックパッドAndroidアプリのアーキテクチャ事情 …

DroidKaigi 2021 において、「2020年代の WebView 実装」というタイトルで発表しました

…える必要があります APIが存在しない機能の表示 古いサービスなのでそういうページもあります… これはリソースを割けばネイティブなUIに置き換えられますが、リソース配分など様々な理由で現在でも WebView として提供しています このうち、 1. の用途についてはこれまでほとんど問題なく動作していました。 もともとここだけ Kotlin + VIPER で実装されていたという事情もありますが、ネイティブ実装された画面に遷移しづらい新規登録画面ということも大きいと思います。 …

UINavigationControllerをカスタマイズ 〜OSの影響を受けづらいカスタムナビゲーションの実装〜

…気になるであろうwrapIfNeeded()は後ほどで説明します。init?(coder:)は需要が特になかったので実装されていません。 public final class NoBarNavigationController: UINavigationController { override public init(rootViewController: UIViewController) { let wrappedRootViewController = Self.wr…

今すぐ ALB のアクセスログをクエリする

… Athena の API を使うのではなく、Athena と統合して利用できる、AWS Glue の API を使うことにしました。これは、生の SQL を実行することになる Athena よりも「テーブルを作る」などの操作ごとに API が用意されている Glue の方がより細かく権限管理できるためです。また今回の使い方だと Glue の利用にかかる料金は非常に安く、費用面でも問題になりませんでした。 この方針で、テーブル作成とパーティション作成を行ってくれるバッチを R…

iOSDC Japan 2021 に社員7名が登壇します

…reen Time API fortee.jp 9/19(日) 11:30〜 Track A(40分) 登壇者: giginet / @giginet タイトル: 大規模なアプリのマルチモジュール構成の実践 fortee.jp 9/19(日) 13:30〜 Track B(20分) 登壇者: いまじん / @mrimjn タイトル: MultipeerConnectivityを使った動画のリアルタイム端末間共有 〜料理動画撮影アプリの事例〜 fortee.jp Multipe…

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

…た。例年の講義では、APIを前半に自分たちで作ってから、その自作APIを使って後半の講義で画面を作るという流れでした。しかし、各自の進捗度合いなどによって想定仕様と微妙に異なる自作APIとなってしまい、画面を作る際に苦労してしまうことがありました。 これを踏まえて、今年はあらかじめ完成しているAPIサーバをこちらで立てて、前半に画面を作る講義を配置してAPIの仕様を把握しながら画面を作りました。その後、3日目のサーバサイド講義で、これまで使ってきたAPIを自分たちで実装してみ…

AWSフル活用!クッキングLiveアプリ「cookpadLive」を支える技術

…ベントを受け取ると API を叩き Amazon Chime の接続情報を取得します。取得した接続情報をもとに Amazon Chime に接続し、接続が完了すると通話が開始される、というフローになります。 配信スタジオとの統合 システム構成ですがこの形に辿り着くまでに多くの議論を重ねました。 今まで開発したことないタイプの機能でしたし、既存の配信スタジオのマイク・スピーカー・カメラ・スイッチャーとどのように統合するのかであったり、 Live 配信の企画として成立させるために…

レガシーとなった TLS 1.0/1.1 廃止までの道のり

…リで利用されている API から先に無効化を進めましたが、幸い大きな混乱はなく廃止完了となりました。 cookpad.com ドメインにおける廃止が終わる頃には、他システムでも既に廃止が完了していたため、cookpad.com での廃止を以てクックパッドが提供するほぼ全てのサービス *11で Legacy TLS の廃止が完了したことになります。 まとめ 図: Qualys SSL Labs にて A を獲得することができた様子 廃止から半年以上経過しますが、社内外どちらも大…

ECS インフラの変遷

…voy の SDS API *1 を実装すればサービスディスカバリについても実現できそうだったので、そのようなしくみを作って gRPC サーバを ECS で動かすようにしました。また、非 gRPC のサーバではエラーレートやレイテンシといった基本的なメトリクスが ALB に依存していたので、gRPC サーバの手前にも Envoy を置くことで Prometheus にメトリクスを入れることにしました。 このしくみの詳細は https://techlife.cookpad.co…

大規模配信に耐える広告新商品「材料ジャック」の設計と開発

… (クックパッドの API サーバー) にアクセスをしてレシピ ID から材料一覧を取る手法もありました。 この方針であればリクエストヘッダーサイズは小さくできますが、引き換えに Pantry へのリクエストが急増してしまいます。Pantry はクックパッドのサービス全体を支える API サーバーなので、キャパシティの調整やパフォーマンスへの影響の検証を入念に行う必要が出てきてしまいます。 検討の結果、影響範囲の最小化と工数の削減のため、Pantry を使用せず、広告配信サー…

データ分析 SQL とその実行結果を共有・検索できるアプリ Bdash Server を作りました

…ったり "Zero-API" という思想で作られたデータベースクライアント実装があったりします。"Zero-API" は面白くて、サーバーサイドの実装でもクライアントサイドの実装でも同じように db.user.findUnique({ where: { id: userId }}) といった実装でデータを取得できます。もちろんクライアントサイド(ブラウザ)から直接データベースサーバーが叩けるわけではなくて、ドキュメントによると You may be wondering how…

アプリリニューアルを楽しくやりきる話

…ンジニア6名(1名はAPI兼任)+決済・基盤・テストのサポートに2名 デザイナー2名(デザインディレクション+1名) ディレクター3名(PdM,PjM,開発ディレクション) このプロジェクトについて、開発ディレクションの立場から楽しくやるために行っていたことをお話します。 モチベーションに関する課題 評価に対する不安 部署横断プロジェクトにありがちな課題ですが、メンバー本人の年初にたてた個人目標・チーム目標とは直接関係がない仕事をすることになります。 自分の仕事に対して評価が…

emruby: ブラウザで動くMRI

…enでは使えないC APIをいろいろケアした(たとえばIO.popenはNotImplementedErrorにしたとか) 保守的GCがそのままでは動かないので、Emscriptenが提供している保守的GC用のAPIを使うようにした *1 動的リンクは実験的サポートらしかったので、必要な拡張ライブラリを静的リンクするようにした その他こまごまとコンパイルオプションを調整した これらの変更はRubyソースコードへのパッチにする必要がありますが、幸いコミット権限を持っているので、…