rails の検索結果:

Cookpad Summer Internship 2018 10 day 技術インターンシップ を開催しました

…ーサイド) 3日目はRailsを使ったWebアプリケーションの講義です。今回のお題はチャットアプリケーションで、途中まで実装したRailsアプリケーションこちらで準備し、そのアプリケーションを完成させたり、思い思いの機能を実装してもらいました。 後半資料 cookpad/cookpad-internship-2018-summer slackpad-server - GitHub 4日目: ReactNative 4日目は、3日目に作ったチャットアプリケーションのクライアント…

Tokyo Machine Learning Kitchen

…ned Tokyo Rails Meetup. At the time, Rails was immensely popular in the developer community and many coders, if not working with Rails in their day jobs, would learn Rails and build hobby projects in Rails after hours. I remember being quit…

RubyKaigi 2018 ありがとうございました!

…ントを開催しました!Railsコミッターであり、Rubyコミッターの松田明さん(@amatsuda)に司会を務めていただき、RubyKaigi 2018 の余韻を楽しみました。 この日は「Rubyコミッターによる RubyKaigi 2018の見どころ振り返り」「RubyKaigi 2018会期中に決まったRubyの次の方向性について」というふたつのテーマを設定。笹田耕一(@ko1)と遠藤侑介(@mame)を中心に、飲みながら食べながら語り合いながら、会場全体で楽しむことがで…

Header Bidding 導入によるネットワーク広告改善の開発事情

…信サーバーの開発 (Rails) 社内向け広告入稿システムの開発 (Rails) 広告ログ基盤の運用(Python, Kinesis Streams, DynamoDB, Lambda) 広告配信用 SDK の開発(各プラットフォームに準拠。WEB 向けは JavaScript) プロジェクト別で言えば、以下がスコープです: 既存自社広告商品の改善 新広告商品の新規開発 ネットワーク広告商品の開発や改善 例えば、昨年末から今年はじめにかけて、とある新広告商品の開発に携わってい…

大きな Rails アプリケーションをなんとかしよう。まずは計測と可視化からはじめよう。

…巨大なモノリシック Rails アプリケーションを社内のエンジニアが寄ってたかって開発するというのが典型的な開発スタイルでした。世界でも類を見ない規模の巨大な Rails アプリケーションの開発であるため、もちろん多様な技術的困難が発生していましたが様々な技術を用いてアプリケーションをメンテナンスし Rails の良さを損なわず開発が進められるように努力していました。*1 しかしその後クックパッドでも徐々にモノリシックアプリケーション構成から Microservices 構成…

iOSアプリの大規模なCustom URL Schemeを支える技術

iOS

…に、Ruby on Railsのroutes.rbのようなルーティングを記述することができます。 この仕組みをクックパッドアプリでは、1年以上前から運用していたのですが、今回、別のアプリでも使いやすい形で提供するためにOSS化しました。 同様のライブラリはいくつか公開されていますが、Crossroadはこれらに比べ、パラメータをType-Safeに、そして簡単に取り扱うことができます。 使い方 Crossroadの基本的な使い方を見ていきましょう。 URLのルーティング iO…

Railsアプリケーションでフォームをオブジェクトにして育てる

…基盤を作り直しながらRailsでのサービス層に向き合う 巨大なWEBアプリケーションに巨大な変更を取り入れるためにやったこと この記事で触れている「電話番号による登録」について、チームメンバーが別の側面を紹介してくれています。 今日はそのあたりの開発を通じて考えた、Railsアプリケーションでのフォームオブジェクトやサービス層といったものが何であるか、という問いに対する、現在の自分のスタンスを紹介します。 サービス層、サービスオブジェクト、フォームオブジェクト もともと Ra…

Cookpad Spring 1day Internship 2018 を開催しました

…行いました。小さな Rails アプリケーションを題材に、サービスの成長に沿って必要になってくる要素について解説し、それを構築して使う、というものです。 実際の流れは以下のようなものでした。 まずは小さい EC2 インスタンスにとりあえずアプリケーションをデプロイ Itamae を使ってインスタンスをセットアップしてみる systemd を触ってみる Rack サーバを production 向きのものに変更する コマンドやプロファイラを使ってパフォーマンスモニタリングをする…

Web アプリケーションを把握するためのコンソール

…年11月に行われた Rails Developers Meetup #7 での発表と一部重複します。 https://speakerdeck.com/eagletmt/web-application-development-in-cookpad-2017 hako-console とは hako-console はアプリケーション毎にそのアプリケーションに関連したシステムやメトリクス等の情報を閲覧することができる Web アプリケーションです。 たとえば そのアプリの Doc…

Cookpad の新規事業と Firebase

…と Ruby on Rails が使われています。 なぜ新規事業ではその構成ではなく Firebase を使うのかということですが、以下のような理由があります。 基盤サービスが豊富 Firebase には RealtimeDatabase、FireStore といった Database を始めとして、CloudMessaging(Push通知基盤)、Authentication(認証基盤)といった開発のためのツールがあります。 これらの機能はサービス開発において大抵必要不可欠…

料理教室のデザインリニューアルを支えた技術

…それほど大きくない Rails ですが、それでも対象の view ファイルは約200ほどあります。 もちろん、これら200個のファイルだけを変更するわけではなく関連するファイルも同時に修正する必要があるため、実際の作業量はもっと大きくなります。 リリースブランチの長期間運用とビッグバンマージ リニューアルにともなってデザインを大きく変更するため、全ページのデザインを一度に切り替える必要があります。 また、プロジェクトを進める一方で、バグ修正をはじめとして日常的にコードに変更を…

【出張開催レポ】Cookpad tech kitchen #11, #12 in 京都・福岡

…クトRuby on Rails』などを共著されたり広くご活躍されています。この日は、コンテナ計測について登壇してくださいました。 speakerdeck.com 「ムームードメイン ショッピングカート機能を支える技術」中村 光佑/GMOペパボ株式会社 4人目の登壇者である中村 光佑さん(@litencatt)ホスティング事業部ムームードメイングループに配属。Webサービス開発においてPHPやRuby、サービス知識など福岡支社の凄腕エンジニアたちに囲まれて日々多くのことを学ばれ…

料理画像判定のためのバックエンドアーキテクチャ

…。 Web APIはRailsとUnicornで動いているサーバーで、その後ろに実際に判定をおこなうPythonのサーバーがたっていてRailsのアプリケーションはそこと通信しています。 この処理は画像アップロードに加えて、料理画像判定の処理にディープラーニングを用いているのでそれなりに重たい処理になります。APIサーバーで利用しているUnicornは仕組み上プロセスがリクエストを処理している間他のリクエストをブロックするため、大量のアクセスがきた場合にI/O待ちによりwor…

Encoder-Decoder でレシピの材料名を正規化する

…クックパッドと同様、Rails 製)に、正解データを収集するための仕組みを追加しました。普段の業務をこなすと、正解データが自然と MySQL に蓄積されるようにしました。 本エントリの執筆時点で、約 12,000 個の正解データが収集されていました。 モデル開発 開発環境には p2.8xlarge を、フレームワークには Chainer を利用しました。やや詳細な話になりますが、Encoder と Decoder には Stacked Uni-directional LSTM…

Ruby の脆弱性を見つけた話

…はありません。ある Rails アプリに任意コード実行(外部から攻撃コードを送り込んで実行させられる)があれば、どこかに脆弱性があることは確かですが、Ruby の脆弱性かもしれないし、Rails(またはサードパーティ)の脆弱性かもしれないし、はたまたユーザの書いたプログラムの脆弱性かもしれません。極端な例では、system("ls " + user_input) みたいなプログラムがあると OS コマンドインジェクションができますが、これを Ruby の system のせい…

クックパッドと分散トレーシング

…により、ほとんどの Rails アプリケーションでは gem の導入と X-Ray daemon への接続情報を設定するのみで、トレースログの収集を開始できるようになっています。 今後の展望 現状はデータを AWS X-Ray に集めるところまでで、まだ本格的なトレースデータの活用には至っていません。データの収集については、社内の主要なサービスをカバーしており、サービスマップのノード数は現在約70ほどです。 エラートラッカーなどに記録されているトレースIDから該当リクエストに…

クックパッド サマーインターンシップ2017 「17day 技術インターンシップ」を開催しました

…ました。 【2日目】Rails・TDD・Git 昨年に引き続き、講義初日はGit、TDD、Railsを1日で一巡りするという、忙しい構成でした。 【3日目】モバイルアプリケーション 3日目は、 iOS と Android のふたつに分かれて、 Google 社の Firebase をつかった Cookpatodon というマイクロブログ風のアプリケーションを題材に学習をしました。アプリケーションの基本部分を実装したあとは各自で自由に機能を実装してもらい、最後に成果発表会という…

Kuroko2の近況

…Kuroko2 は Rails の Mountable Engine になっており、それを gem として配布しています。 この方法を採用した理由は、Kuroko2本体の機能は常にアップデート可能なように管理できて、かつ必要に応じてカスタマイズしたかったためです。 具体的には、先述したカスタムタスクの定義や、後述する Kuroko2::ApplicationController を拡張という機能を想定しています。 Kuroko2 はバッチを管理する上で生じるドメインに特化した…

クックパッドの開発基盤、インフラ環境での開発で心がけているラストワンマイル

…題 モノリシックな Rails アプリケーションで開発していた時代は作業の分業化が進み、サービス開発エンジニアが開発基盤やインフラ環境をきちんと把握出来ているメンバが少なくなっていました。 これはサービス開発にフォーカス出来るようになったことで発生したジレンマであると思います。 また、クックパッドはそれなりの規模のサービスということもあり、開発基盤やインフラ環境は色々複雑化、高度化しているのもキャッチアップが難しくなった理由の一つだと思います。 そしてその環境も日々進化、変化…

クックパッド サマーインターンシップ 2017 を開催します!

…、「サービス開発」「Rails・TDD・Git」「モバイルアプリケーション(iOS/Android選択式)」「インフラストラクチャー」「SQL」「機械学習」「Ruby」と七つの講義を準備しています。去年と比べると新しく「インフラストラクチャー」「SQL」「Ruby」は新しく追加された講義です。毎年、ソフトウェアエンジニア界隈からも「学生向けでなければ自分が参加したい」と声があがるほどの豪華な講義です。今年はRubyのコア開発者でもある笹田による「Ruby」の講義もあります。 …

最近のサービス間のデータとイベントの連携について

…の Ruby on Rails で作られたウェブアプリケーションです。 巨大な Rails アプリケーションは単純に起動やデプロイ、テストが遅いという問題以上に、自分の変更が与える影響範囲を予測するのが困難という大きな問題があります。cookpad のメインレポジトリ (cookpad_all と呼ばれる) には1つの mountable engine を共有する Rails アプリケーションは7つがあり、困難さに拍車をかけています。cookpad_all を触る開発者は新し…

Web サービスの完全 HTTPS 化

… クックパッドでは、Rails の HTTPS 必須化スイッチである force_ssl を利用し、特別な Cookie をリクエストに差し込んだ場合に force_ssl が有効化された専用のアプリケーションサーバにルーティングされるようにしていました。こちらは、段階的リリースのタイミングでは内部アクセスや Cookie の扱いに不都合があったため、リバースプロキシでリダイレクトする形に変更しています。 mixed content をなくす mixed content とは…

MySQL with InnoDB のインデックスの基礎知識とありがちな間違い

…。クックパッドでは Rails のデータベースとして主に MySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説します。 InnoDB のインデックスに関する基礎知識 インデックスの構造 (B+ 木) InnoDB では B+ 木が使われています。B+ 木は次のような特徴を持った木構造です。 次数を b とすると、各内部ノード(葉ノード以外のノード)は最大 b - 1 個のキーと最大 …

ユーザー基盤を作り直しながらRailsでのサービス層に向き合う

…ド本体とは別の小さなRailsアプリケーションとして実装を進め、つい先日、一部の限定された利用者の方に向けて公開することができました。 今後も様子を見ながら公開範囲を拡大していく予定です。 再構築の背景 ではその「明確な問題」とはなんでしょうか。 最大のものは、ユーザー登録のあり方が時勢にそぐわなくなってきているのではないかという懸念です。たとえばクックパッドのアカウントはメールアドレスとパスワードを登録していただくのが基本になっています。しかし世の中のトレンドとしてEメール…

Webpackerを使ったRailsでのJavaScript開発

…ebpackを用いてRails上でJavaScript開発をするために必要な一連の流れを提供してくれる、Rails organizationで開発されているgemです。 これまで、Rails上でJavaScriptのパッケージをどのように管理するか、また、モジュール依存をどのように解決するかについて、多くの選択肢があり、それらをどう組み合わせて使うのかについて悩まされてきました。 このブログでも過去に何度か記事が投稿されており、その中でも複数の選択肢が上げられています。 we…

この gem を使っているアプリケーションを探す

…llector は Rails Engine の形で gem として公開しています。 https://github.com/cookpad/gem_collector GemCollector 作成の動機 GemCollector を作った元々の動機は我々開発基盤でメンテナンスしている gem を更新したいとき、とくに非互換を含む変更を行いたいときに、変更の影響を受けるアプリケーションを把握することでした。 社内でよく使われている gem であれば、事前に社内での使われ方を調…

Interface Builderをデザイナーさんに触ってもらうにあたってやったこと

…Cookpad本体のRailsアプリケーションのCSSやHTMLに関しては自ら修正してGitHubでPRを投げており、ターミナルでの作業や開発フローに慣れている。 また、その開発を行う関係で「手元にXcodeなどの必要なツールキットも揃っている」というのがあると思います。 ViewControllerとView 初回ではViewControllerとViewについて学んでもらいました。 大事な点は2つあると考えています。 iOSアプリケーションで、ViewController…

実例に基づいた大規模 iOS アプリの継続的な開発についての勉強会を開催しました

…。 Ruby on Rails にはなりますが、react-rails を用いたアプリを開発する際の知見についてはこちらの記事で紹介しておりますので、興味の有る方はぜひこちらも御覧ください。 非SPAなサービスにReactを導入する iOS Clean Architecture のすすめ 3番目の発表では、マネーフォワードさんの iOS エンジニアである児玉さんから、マネーフォワードではどのような設計で iOS アプリを開発しているのかについての発表がありました。 iOS C…

非SPAなサービスにReactを導入する

…的にサーバーサイドはRails前提ですが、RailsにおけるReactの開発環境の構築方法などについて以下の記事や資料を参照ください。 モダンJavaScript開発環境 on Rails - クックパッド開発者ブログ 新規Railsアプリに小さく導入するReact // Speaker Deck コンポーネントの例 例えばブログ記事に「いいね」が押せる機能を考えてみましょう。機能としては いいねできる いいねが解除できる 自分がいいねしているかどうかわかる いいねしているユ…

ECS を利用したオフラインジョブの実行環境

…のジョブや bin/rails db:migrate のような単発のコマンドを実行するために使います。 直接 Docker を使っていたときと比較してよくなった点の一つに IAM ロールを利用できるようになったことがあります。 ECS ではインスタンス単位ではなくタスク単位で IAM ロールを利用でき、これにより AWS のアクセスキーを発行することなく AWS の API を利用したジョブを実行できるようになりました。 ジョブキューからの利用 先日の RubyKaigi 2…