rails の検索結果:

Rails に Babel と Rollup を組み込んで CoffeeScript を JavaScript に段階的に移行した話

… Rollup を Rails のアセットパイプラインに組み込み、レガシーな CoffeeScript ファイルを ES2015+ の JavaScript に移行した話をします。 レシピサービスと CoffeeScript の歴史 クックパッドは10年以上の歴史を持つサービスです。中でもレシピサービスの web アプリケーションは初期に作られた Rails 2 アプリケーションがアップグレードを重ねながら今も動いています。2018年には Rails 3 から4へ、つい最近で…

SwiftUI を活用した「レシピ」×「買い物」の新機能開発

…ド(Ruby on Rails, Java 等)、検索技術、ログ分析、マーケティングなどなど様々な領域で取り組みたい課題が沢山あります。 カジュアル面談や学生インターンシップなども随時実施していますので、ぜひお気軽にご連絡ください! cookpad.careers *1:近隣地域の生産者や市場直送の新鮮でおいしい食材を、1品から送料無料で購入できる。https://info.cookpad.com/pr/news/press_2020_1015 *2:最短で注文当日に受け取り…

プロと読み解く Ruby 3.0 NEWS

…つ、Ruby on Railsの交流サイトにmatzがスレッドを立てて、ユーザの声を直接聞くことにしました。延べ40件ほどのさまざまなコメントをいただいたので、遠藤がすべてのご意見を何度も読み返し、分類集計しました。その結果、「変更予告の警告が出ること自体が不満 *2」「実務的な対応ノウハウが共有されていない *3」ということが不満の源泉で、問題の変更自体には意外と前向きな人が多いことがわかりました。そこで、前者の問題に対しては最善の対応ということで 2.7.2 でデフォルト…

レシピサービスのフロントエンドを Next.js と GraphQL のシステムに置き換えている話

…トはモノリシックな Rails で作られていて、10年以上 Rails で開発を続けてきました。10 年以上同じシステムで開発を重ねれば当然レガシーな部分が大量に生まれてきますが、特にフロントエンドはその影響が顕著でした。 どこから使われているかわからない CSS が大量にある、JS のコードは昔ながらの CoffeeScript*1 と jQuery で書かれており、JS のライブラリの管理も vendor/assets にファイルを入れてリポジトリにコミットするという運用…

負荷試験用 Web コンソールの開発

…発しました。普通の Rails アプリケーションとして実装し、F5 と名付けました。コスト最適化のため、データベースは Aurora Serverless (MySQL) を利用しています。例として、10 分間で 50 RPS まで ramp-up し、50 RPS を 3 分間継続するというデバッグ用の負荷試験を実行したときの様子が以下になります。 負荷試験中の F5 のスクリーンショット itkq/artillery-plugin-cloudwatch により収集したメト…

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

…や Ruby on Rails アプリケーションの実装・改善を体験してもらいました。 Android レシピの閲覧・投稿ができるアプリ MiniCookpad の開発を通して、Android 版クックパッドアプリで採用されているアーキテクチャやテスト手法を体験してもらいました。 iOS Android と同じく、MiniCookpad の開発を通して iOS 版クックパッドアプリで採用されているアーキテクチャやテスト手法を体験してもらいました。内容の大筋は Android・i…

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

…ie)です。 今回はRailsアプリケーションのCIにDynamoDB Localを導入した事例をご紹介します。 広告入稿システムとCI クックパッドでは自社製の広告入稿システム・配信サーバーを運用しています。また広告の一部はDynamoDBを利用したアーキテクチャで入稿・配信されています。詳細は以前の記事「広告配信サーバーにおける DynamoDB Accelerator (DAX) 活用事例の紹介」で紹介されています。この入稿・配信のうち、広告入稿システムのCIに対してD…

広告配信サーバーにおける DynamoDB Accelerator (DAX) 活用事例の紹介

…バーも Ruby (Rails) から Go への移行をしているので、ECS Service の Running Tasks 数の削減によるコスト低下も見込んでいます。 コスト最適化の取り組みは、"インフラのコスト最適化の重要性と RI (リザーブドインスタンス) の維持管理におけるクックパッドでの取り組み"にて紹介されているように、SRE チームが技術力を結集して、最適化に必要な基盤の整備や情報提供を行ってくれています。この取組のおかげで、アプリケーション開発者としても要件…

プロと読み解くRuby 2.7 NEWS

…としてクックパッドのRailsアプリを実行してみて、影響を測る、というのを繰り返しました。その結果はチケット [Feature #14183] にも残っています。 当初は完全な分離を目指していましたが、あまりにも非互換が大きい(def foo(opt = {}); endというメソッドにfoo(k: 1)を渡すコードはあまりにも多い)ということをチケット上でJeremy Evansという人が主張し、このケースだけは分離を諦めることでチケット上で合意しました。これが2019年4…

サービス特性にあった検索システムの設計戦略

…ーション環境上で他のRailsなどのアプリケーションと同じように可用性とリクエストに対するスケーラビリティを担保したデプロイができます。 EC2上にデプロイすることになると、物理サーバによるクラスタのメンテナンスコストがかかってしまうため、S3上でインデックスデータを管理し、ECS上にデプロイすることにしました。 クックパッドマートは、他機能もECS上で動作しています。検索サーバも管理を同じ環境にすることでDockerのデプロイに慣れているメンバであれば検索サーバのデプロイ学…

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

…いう課題に取り組み、Railsアプリケーションのコンパイルキャッシュのサイズを70%以上削減することに成功しました。以下ではこの課題の概要とその成果について述べたいと思います。 InstructionSequenceの概要 まず、RubyVM 内で実行される命令の中間表現、InstructionSequence (以下 ISeq と省略) について簡単に説明します。 通常の Ruby プログラムは、以下のような手順で実行されます。 ソースコードを構文解析し、抽象構文木を作る。…

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

…たシステム 初期は Rails アプリケーションだったが、機能の肥大化及びインフラコストの削減&開発速度の向上を目指し、一部の機能を Go に Microservices として切り出し Legacy ads delivery service いわゆる「配信」システム 旧世代。初期は Cookpad アプリケーション自体に配信ロジックが内在されていた 現在はほとんどの機能が新世代に移行済み、新規開発することは殆どない。旧バージョンアプリの互換性のために残していたが、物理削除含…

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

…て運用できています。Rails を始めとする HTTP をしゃべるアプリケーションサーバなど、状態を持たないサービスのほとんどは、スポットインスタンスで構成された ECS クラスタで動いています。これは、コストの最適化に大きく寄与しています。 2. RI (リザーブドインスタンス) の運用 このトピックは、記事の後半で述べるためここではいったん隅に置いておきます。 3. キャパシティを過不足ない適切な状態に保つ 文字で書いただけでは「いいじゃんやろうよ」という感じなのですが …

ISMM 2019 で発表してきました

…ションの性能分析で Rails が題材になっていたことです。「あ、見たことあるコードだ」みたいな。 ウェブアプリケーションに関する分析の話は、View-Centric Performance Optimization for Database-Backed Web Applications (ICSE'19) のものだったように思います。主に ORM でのアンチパターンをいろいろ分析して(講演では、そのパターンを色々紹介されていました)、それを静的解析してアプリからそのアンチ…

EuRuKo 2019 で発表してきました

…Future of Rails at GitHub - Eileen M. Uchitelle GitHub で働く Rails コミッターである Eileen の発表。Rails わかんないのでさらっと紹介です。 なんと、GitHub では、Rails をフォークして使っていたそうです。 "The Past, Present, and Future of Rails at GitHub" GitHub は Rails をフォークしていた しかし、先端の Rails にどんど…

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

…kaccha)です。Rails で webpack を使うためのシンプルな gem を作ったのでそれについて紹介します。 Webpacker Rails で webpack を利用した Web フロントエンドの環境を作る場合、最近では Webpacker が選択されることが多いでしょう。Rails 6 からは Webpacker が標準になることもあり、この流れはますます加速すると思われます。 私自身もこれまでいくつかのプロジェクトで Webpacker を利用してきました。…

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

…最大のモノリシックなRailsアプリケーション」であり、 理由はよくわからないがとにかくこれをさわるだけで開発期間が3倍になる優れモノです。 できることならいっさいPantryにさわることなく開発を終えたいわけです。 図2: Pantryをいじれば目的は達成できるが対価が必要 つまり、API呼び出し回数は増やしたくないのでできれば既存のAPIに値を追加する形で実装したい。 しかしそのためにPantryはいじりたくない。 API呼び出し回数を増やしたくない……既存のAPIに手を…

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

…ました。 不必要に Rails である cookpad_all に存在するバッチ群は kuroko と呼ばれていますが、それらが Rails で実装されていたことから、旧検索バッチも Rails で実装されていました。 しかし、このバッチの実態は「大量のデータを収集して処理」することであり「user facing な Web アプリケーションをすばやく開発することができる」という Rails の強みが活かされるようなものではありませんでした。 実際の実装としても、その大部分が…

Working with AWS AppSync on iOS

…e Ruby on Rails. Our AppSync setup is a bit different than the standard use case. AppSync is designed to be configured by app developers through the Amplify CLI. Since our team has dedicated backend engineers, we've opted to do most configu…

GraphQL Asia 2019 で登壇しました

…olithic な Rails アプリ、いわゆる "Monorail" が 10 年以上稼働していました。2 年前から Airbnb SOA というアーキテクチャを導入し、徐々に service oriented な構成へと移行しているとのこと。その中でも、presentation layer に GraphQL Gateway を導入しているとのことでした。 この発表の最大の価値は、RPC フレームワークであるFacebook's branch of Apache Thri…

1枚のラベルの向こうには、1人のユーザがいる【連載:クックパッドマート開発の裏側 vol.3】

…ドマート全体を支えるRailsアプリケーション)に発行すべきラベルの情報を集約し、日次バッチにて発行するラベル情報をstar_ethernetを利用してプリンターに送信します。 バッチにはkuroko2を利用し、barbequeで各プリンターへのラベル発行ジョブの管理しています。何かしらのトラブルでラベル発行に失敗した時は、原因を調査しジョブを再実行することで全てのプリンターで確実にラベルが発行されるようにしています。またラベル残量が少なくなっていたり、紙詰まりの発生を検知し…

クックパッドマートにおける実世界での配送を意識した注文の検証処理【連載:クックパッドマート開発の裏側 vol.1】

… データ間の関連性 rails的に表現すると、このような関連性を持っています。 class Delivery belons_to :location end class Location has_many :deliveries end class Product end class Order has_many :products belongs_to :delivery end また、商品の集荷配送については、後ほど詳細を述べますが下記のような流れになります。 販売店は注…

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

…返すようにします。 Rails であればコントローラに以下のような感じで書けます。 class RecipesController prepend_before_action :not_implemented, except: %i[edit] def create # ... end def show # ... end def edit # 移植完了したアクションでは普通のレスポンスを返せる end def not_implemented head :service_un…

Prebid.js 導入による Header Bidding 改善の舞台裏

… を埋め込むための Rails 用ヘルパーを定義した簡易な gem apstag TAM の提供する Header Bidding 用ライブラリ googletag DFP の提供するアドネットワーク用ライブラリ pbjs Prebid.js 用ライブラリ SSP SSP 事業者(実際は複数事業者が存在している) Sequence Diagram for Prebid.js and TAM migration DFP にリクエストをする前に、TAM と Prebid.js 両…

クックパッド基幹システムのmicroservices化戦略 〜お台場プロジェクト1年半の軌跡〜

…クなRuby on Railsサービスであり、 いま手元で適当に数えただけでRubyのコードが27万行(テストを除く)、 テストが51万行、HTMLテンプレートが14万行あります。 このコード量でウェブサービスのcookpad、APIサーバーのpantry、 バッチのkuroko、管理画面のpapaの4アプリケーションを主に実装しています。 お台場プロジェクトとは そして、この巨大な「本体」システムのアーキテクチャを根本から刷新し、 改善するプロジェクトが「お台場プロジェクト…

Ruby 2.6 の改善を自慢したい

…のアイディアを利用 Rails とかには効かないかも...。 そういえば、両方とも "Tra" で始まってますね。寅年はまだ先ですが。 本稿は、Cookpad techlife で三日連続で掲載する Ruby 2.6 紹介記事の最後になります。 プロと読み解く Ruby 2.6 NEWS ファイル Ruby 2.6 新機能:本番環境での利用を目指したコードカバレッジ計測機能 タイトルは 昨年の記事 Ruby 2.5 の改善を自慢したい の二番煎じです。来年もやるのかな...。…

Ruby 2.6 新機能:本番環境での利用を目指したコードカバレッジ計測機能

…リからなる、巨大な Rails アプリケーションとして実現されていました。しかし、このやり方ではメンテナンスが限界になってきたので、「お台場プロジェクト」という大整理プロジェクトが行われてきました。この辺の詳細は次の 2 つの記事が詳しいです。 クックパッド開発者ブログ:大きな Rails アプリケーションをなんとかしよう。まずは計測と可視化からはじめよう。 ログミーTech:クックパッドの巨大Ralisアプリケーション改善 知られざる「お台場プロジェクト」の裏側 お台場プロ…

プロと読み解く Ruby 2.6 NEWS ファイル

…。いろいろな理由で、Rails での性能向上も、まだ難しいでしょう(他人の仕事には厳しい)。今後、どこまで速くなるか楽しみですね。 Proc まわりの性能向上 ブロックパラメータで渡された Proc を #call で呼んでも速い Speedup block.call where block is passed block parameter. [Feature #14330] Ruby 2.5 improves block passing performance. [Fea…

Chaos Engineering に向けてレシピサービスの Steady State を追求する

…ピサービスは巨大な Rails アプリケーションでありますが、「お台場プロジェクト*6」の一環で、機能の切り出しが進められており、Envoy を通していくつかの別サービスと通信しているのが現状です。先述した Steady State が必要な背景と合わせて考慮し、まずレシピサービスの Steady State を定義することが先決という結論を出しました。 Steady State は Web サービスの歴史からするとまだまだ新しい概念で、Steady State を考えるにあ…

インタプリタ開発者によるRubyの挙動解析への道

…scourse は Rails アプリケーションの一つで、ベンチマークプログラムを整備している(bench.rb)ので、そのベンチマークを用いた結果です。いくつかのページ(6ページ)に対して、ab を用いて 500 回アクセスするので、計 3,000 アクセスをエミュレーションしています。 同じく [ruby-core:89203] FYI: debug counters からデータを引用します。 [RUBY_DEBUG_COUNTER] frame_push 1,011,8…