Slides for Ruby on Ales 2015 talk "The Recipe for the World's Largest Rails Monolith" https://ruby.onales.com/speakers#therecipefortheworldslargestrails…
こんにちは。技術部の吉川です。 みなさんは、異常なデータを見つけたが、どうしてそのような状態になったのか追跡できず困ったという経験はないでしょうか。 今回は、そんなときにクックパッドで利用されているAuditログについてご紹介します。 Auditログとは クックパッドでのAuditログは特定のデータレコードに対して発生したイベントをコンテキストとともに記録するものです。 一般的に監査ログ、証跡ログといったものがありますが、それらとは多少異なっています。 ここでのイベントとは、あるデータレコードが 作成された 更新・変更された 削除された といったものです。またそれ以外にもログインした、ログアウトした、セキュアな情報が閲覧された、といったイベントも含まれています。 コンテキストは以下のようなものを記録します。 いつ どこで 処理が行われたホスト 何が イベント 何を 対象データの情報 スキー
みなさん、こんにちは。 ウェブ・サーバーサイドを担当しています、Railsエンジニアの黒田です。 マネーフォワードも早いもので、サービスインしてから2年以上が経過しました。 サービスをご愛顧してくださっている皆様には、心から感謝しております。 さて、今回のエンジニアブログは「リファクタリング」についてです。 マネーフォワードのように、ユーザーファースト&デリバリー優先で爆速開発を進めていると、サービスとしてはイケてても、コード的にイケてるとは言い難い部分が発生してしまいがちです。 「思いやりのないコード」「可読性が悪いコード」「必要以上に複雑なコード」は、バグ発生率を高め、開発スピードを低下させ、何よりエンジニアの気分を憂鬱にさせてしまいます。。。 マネーフォワードでは継続的かつ積極的にリファクタリングの時間を創る取組みをしていますが、そのなかで今回はRailsのリファクタリングでとても便
ずいぶん前のことだが、Webアプリケーション開発フレームワーク「Ruby on Rails」が00年代後半にブームを巻き起こしたとき、強い主張を持つソフトウェアとしてRailsは多くの議論を呼び起こした。その中でも最大のものはプログラマの生産性に関するもの。当時、すでにいくつも存在していたJavaベースのWebアプリケーション開発フレームワークに比べて、Ruby on Railsは10倍の生産性を達成できるという主張だ。 Rubyの生産性はJavaの10倍――。この主張が多くのエンジニアの琴線、もしくは逆鱗に触れた。「さすがに10倍は大げさだ」、「いや、現実に設定ファイルやコードを書く行数が劇的に減るのだから、そのぐらい当然だ」と意見が分かれたのだ。 2005年のリリースから約10年。Railsの生みの親で、今もプロジェクトをリードするデイビッド・ハイネマイヤー・ハンソン氏は当時を振り返り
はじめに 今回はドキュメント指向型データベースの代表としてMongoDBを取り上げます。ドキュメント指向型データベースはRDBMSと違って、スキーマ(テーブル定義)が必要ないことが大きな特徴です。 今回も利用したコードやプログラムはgithubに置いてあるので適宜参照してください。 MongoDBの特徴 前々回、前回と紹介したmemcachedやTokyoTyrantは基本的にRDBMSと組み合わせて、「RDBMSの弱い部分を補う」という使い方でした。しかしMongoDBは少し違っていて、JOINが行えないこととトランザクションをサポートしていないこと以外は、ほぼRDBMSと同じように扱うことができるため、「RDBMSの代替として使う」ことが可能です。 上述したようにMongoDBはRDBMSと違ってJOINはできませんが、代わりに基準となるオブジェクトに別のオブジェクトをあらかじめe
新しい現場にはいったときに心がけていること、クソコードと呼ばないこと。 誰かのコードを読んでいるとそりゃまあクソコードを見つけることがある。その時どう立ち向かうかという精神論の話。 例えソレがそうであってもソレを口にするとネガティブが蔓延する。思ってもイイ、でも言ってしまってはならない。あるフェーズに置いては必要だった し、現に動いていて価値を提供している のだ。あるべき姿を叫ぶの簡単だ。あるべき姿を見ているなら行動しないといけない。見つけたらリファクタだ。出来るところからやるんだ。 Shut the fuck up and write some code & 許可を求めるな Pull Request せよ— 🌈KOSHIKAWA (@ppworks) 2014年5月23日 クソはクソと言える空気や文化は大事。良くないものを指摘できるようにはしたい。口の前に手を動かそう。プログラマーなら
はじめに 今回からタイプ毎に代表的なNoSQLデータベースを扱っていきます。まず今回は、揮発性key-valueストアの代表としてmemcachedを取り上げます。 なお、利用したコードやプログラムはgithubに置いてあります。適宜参照してください。 どんなところに使える? memcachedの特徴は、何といってもデータの揮発性(memcachedサーバを停止すると全データが消えてしまうこと)です[1]。そのため、データが消えても影響が小さいところに利用シーンは限られてきます。一方、連想配列(ハッシュ)のように使えて扱いやすいこと、様々なサイトでの事例があること、などから導入はしやすいです。 具体的な利用シーン memcachedの具体的な利用シーンとしては、以下の事柄が考えられます。 RDBMSから取得したデータのキャッシュ 消えても大きな影響の無いデータの保存 一般的には(1)のよ
前回、前々回の記事では、Rackの生まれた背景、Rackとは何か、実際にRackアプリケーションを作る際に使えるものをご紹介しましたが、もう一つまだ説明していない重要な要素がRackにはあります。今回は、そのミドルウェアという仕組みについてご紹介します。 ミドルウェアとは ミドルウェアとは何かを一言で言うと、「別なアプリケーションをラップして、リクエストやレスポンスを加工したり、処理を切り換えたりするRackアプリケーション」です。 この仕組みがあることで一体何ができるのでしょうか。Webアプリケーションを作っていると、リクエストやレスポンスをアプリケーションに行く前やアプリケーションの処理の後に加工したくなることはよくあります。例えば、条件に応じてURLの書き換えをしたり、エンコーディングの変換をしたり、Cookieの処理をしたり…といったことが日常茶飯事です。こういう処理を、サーバと
Ruby Advent Calendar 11日目 Ruby - Rails開発で有用な便利Gem一覧:2013年版 - Qiita ↑去年のAdventCalendarで書いた上記の記事の2014年版です。 だんだん毎年恒例的になって来ました。 最近はデファクトスタンダードがほぼ固まってきて、かなり毎回使うGemのリストが固定化して来ました。 ※2014/12/11時点 DBアダプタ sqlite3 pg mysql2 この辺りはもう変わらないですね。 RubyやRailsのバージョンが上がっても継続的に開発が続けられているのは素晴らしいと思います。 ログイン認証 omniauth omniauth-twitter omniauth-facebook omniauth-github omniauth-identity (omniauth-githubのリポジトリのURLが変わってました。
はじめまして、技術部の西岡です。 普段の業務では社内システムやサービス開発をメインに行っています。 今年の6月に入社して以来、ひたすら何かを作っているのですが、クックパッドでは自分のやりたいことをベースに業務を決めることができるので、日々、楽しい開発ライフを送れています。 さて、クックパッドには様々な社内システムがあるのですが、その内の1つに全社員の目標を管理できるシステムがあります。このシステムでは、目標と共に顔写真や得意なことを設定する仕組みになっているため、普段あまり関わりのない人が、どのような業務を行っているのかをざっくり知ることが出来ます。 このシステムは私が開発したのですが、開発する際に少し余裕があったことと、個人的に興味があったことから、iPhoneのSafariからも閲覧できるようにしてみました。 残念ながら肝心のシステム内部の話はあまり紹介できないのですが、対応する際に調
Railsのコントローラーでのrenderメソッドの使い方について説明します。 renderメソッドは、「コントローラー(Controller)」と「ビュー(View)」のそれぞれにあります。 ここではコントローラーのrenderメソッドの使い方を示します。 ビューでのrenderメソッドの使い方は こちらを参照してください。 動作確認 Rails 4.1 目次 1. ビューを表示する 1.1. 暗黙的なビューの表示する 1.2. 他のアクションのビューを表示する(actionオプション) 1.3. 他のコントローラーのビューを表示する(templateオプション) 2. JSONを返す 2.1. renderメソッド 2.2. jbuilder 2.3. ActiveModelSerializer 3. ビュー以外を表示する 3.1. 文字列を表示する(textオプション) 3.2. X
11月4日に入社しましたエンジニアの越川です。 本日は、私がコードを書く際に気をつけていることを書こうと思ったのですが、どう書くかに迷った末、ブログ記事駆動ハッカソンを行うことでそのプロセスで考えいたことなどを記事にすることにしました。 私はコードを書く際におもてなしの心が大事だと思っています。おもてなしの心は最終的なアウトプットに触れるユーザーはもちろんのこと、チームメンバー、未来の自身へ向けた思いやりです。 今回題材とするのは、KPTツールです。KPTは、日々の活動を振り返り「Keep」すべきこと「Problem」であること「Try」したいことを上げて、活動を振り返るために使われます。 先日行われた「オレたちが目指す”最強のエンジニアドリブン”」を終えた後に振り返りでKPT使ったので、それをWebアプリにしてみます。 今回のコードはすべて、ppworks/furikaeri/tree/
技術部の中村です。 この度、クックパッド社員のこれまでの発表資料を開発者ブログにまとめて掲載することになりました。フレームワーク、デザイン、開発、運用フローなど、クックパッドでの開発における技術的知見が数多く紹介されています。 http://techlife.cookpad.com/presentations クックパッドは、多くのオープンソースプロジェクトに支えられながらここまで成長してきました。社内ライブラリの公開やオープンソースプロジェクトへの参画だけに留まらず、多くのイベントで発表を行い、我々の得た知識を還元していくことで、今後もコミュニティに対してより貢献していきたいと考えています。 なお、掲載している発表資料は下記のGitHubレポジトリにて管理されています。興味のある方はこちらもご覧ください。 https://github.com/cookpad/presentations
こんにちは、クックパッドのすみです。去る4/16,17に京都で「クックパッドの裏側見せますvol.2&vol.3」を開催いたしました。 当日お越しくださった皆さま、Ustreamをご覧くださった皆さま、誠にありがとうございました! お話させて頂いたエンジニアのうち2名の資料を公開いたしますので、是非ご覧くださいませ。 ・勝間亮/アグレッシブなクラウドの使い方 [slideshare id=3827098&doc=engineer-event-100417-kyoto-100423034302-phpapp02] ・濱崎健吾/クックパッドに入って十数日働いた雑感 [slideshare id=3849703&doc=100413urapad-100425122155-phpapp01]
技術部開発基盤グループの森田です 昨日の2011年7月14日、「Ruby Recipes and Japanese Cooking At Cookpad」におきまして、「どんどん使う」と題し、弊社で開発/運用しているExtension Frameworkの紹介をさせて頂きました。その際に利用したスライドを公開致します。 スライドの主な内容は以下の2点です。 「プロトタイプで作成中のコードを機能単位で実装し、メインのコードと区別することで、低品質と高品質のコードを使い分ける」 「障害が発生した場合も影響を最小限に抑える」 スライドが、少しでも皆様のサービス開発の助けになれば幸いです。 Createanduse [slideshare id=8601603&w=425&h=355&sc=no] View more presentations from eudoxa
以前投稿したAngularJSとRailsの丁度良い関係を探るという記事のコード解説編です。前回はざっくりとしたアーキテクチャの紹介のみにとどめていたので、このエントリでサンプルコードの詳細について解説します。 バージョン情報 ruby 2.1.3 rails 4.1.7 devise 3.2.4 angularjs 1.3.2 ディレクトリ構造 app以下のディレクトリ構造は以下のような形です。 app ├── assets │ ├── images │ ├── javascripts │ │ ├── app │ │ │ └── tasks │ │ │ ├── tasks.controller.js.erb │ │ │ ├── tasks.html.erb │ │ │ ├── tasks.js.erb │ │ │
前回までで、プロジェクト管理ツールredMineの環境構築、インストールを行いました。今回は、いよいよredMineの使い方の具体的な説明になります。 操作説明のために、画面の構成要素を次のように呼びます。 トップメニュー:画面上部左右に並んでいるメニュー部分 サイドメニュー:画面左側の縦に並んでいるメニュー部分 コンテンツエリア:画面中央のコンテンツが表示される部分 操作説明のため、画面構成要素を赤字のように呼ぶ ユーザ登録 さて、redMineを利用するチームとして、次のようなチーム構成を想定してみます。 プロジェクト「物販サイト新規構築案件」 リーダ 栗栖義臣(redMine管理者) メンバA 児島眞太郎 メンバB 堀櫻子 最初にredMineを利用するユーザを登録します。 redMineにadminユーザでログインします(管理者権限のあるユーザであれば誰でもかまいません)。ログ
技術部・開発基盤グループの中村です。 この度、クックパッドが開発し、オープンソースとして公開しているRuby on Rails向けプロトタイプ開発用のプラグイン「Chanko」を再設計し、Ruby 2.0.0 への移行に引き続き Chanko 2.0.0 をリリースしました。Chanko 2.0.0 では、これまでのバージョンと互換性を保ちながら、主に実行速度やコードの可読性について改善が加えられています。 http://cookpad.github.io/chanko/ Chankoとは Chankoは、素早く安全に新機能のプロトタイプを行うためのフレームワークです。クックパッドでは今現在でも、Chankoを使って多くの機能を独立して開発し、対象範囲を限定して公開することで新機能の検証サイクルを回しています。Chankoを利用して拡張した機能でエラーが起きた場合、拡張前の機能に自動的に切
本ガイドでは、Railsの「エンジン」について解説します。Railsエンジンのきわめて簡潔で使いやすいインターフェイスを用いて、ホストとなるRailsアプリケーションに機能を追加する方法についても解説します。 このガイドの内容: エンジンの役割 エンジンの生成方法 エンジンのビルド方法 エンジンをアプリケーションにフックする エンジン機能をアプリケーションで上書きする 読み込み/設定フックでRailsフレームワークが読み込まれないようにする方法 1 Railsにおけるエンジンの役割 エンジン (engine) は、ホストとなるRailsアプリケーションに機能を提供するミニチュア版Railsアプリケーションとみなせます。この場合、ホストとなるRailsアプリケーションは、実際にはエンジンに「ターボをかけた」ようなものにすぎず、Rails::ApplicationクラスはRails::Engi
最近は開発環境を個々人のコンピュータ上には構築せず、仮想環境を使うようになってきました。そうすることでローカルコンピュータの環境に左右されず、複数プロジェクトによってライブラリバージョンがコンフリクトすることもありません。もちろん多少遅くなりますが、十分許容範囲になっています。 ということでこれからRailsのプロジェクトをはじめるのであればベースに使ってみたいのがrails-dev-boxです。Vagrant向けにRuby on Rails環境を整えてくれます。 rails-dev-boxの使い方 Vagrantを使いますので、Vagrant自体はもちろんVirtualBoxのインストールが必要です。 終わったらGitリポジトリをクローンします。 $ git clone https://github.com/rails/rails-dev-box.git 後はVagrantを起動するだけ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く