Ruby on RailsアプリケーションのコードをリファクタリングするためのデザインパターンのひとつにValueオブジェクトというものがあります。このパターンをうまく導入することで、モデルが肥大化するFat Modelという問題を防ぐことができます。 この記事ではValueオブジェクトとはなにか、導入する必要性や導入方法について書いていきます。
はじめに: レイルズ王国と異端審問 Hanami について Hanami は Rails じゃない Hanami の設計思想 Hanami の各層について Router Router の高度な使い方 Controller Validation View Helper, Form Model Entity Repository SQL クエリの発行 Interactor Hanami::Interactor Hanami::Validations Test Factory Hanami の不十分な点 その他の Hanami のプロジェクト Hanami::Cli Hanami::Events Hanami 2.0 まとめ 著者について はじめに: レイルズ王国と異端審問 20XX年、僕は Ruby on Rails の規約に違反したコードを書いたことでレイルズ王国の異端審問にかけられていた。
こんにちは。メドピアのRuby(Rails)化をお手伝いしている@willnetです。最近はエンジニアが増えた影響か、Railsの質問に答えていることが多いです。 以前、Railsの太ったモデルをダイエットさせる方法についてというタイトルでPOROを使っていこうという話を書きました。その際にコード例などもなるべく多く載せるようにしたのですが、このエントリだけを読んだ状態では、いざ「POROを使ってみよう!」としたときにまだ悩む余地がありそうです。 POROはその名の通り普通のRubyオブジェクトなので、いろんな書き方ができてしまいます。それなりに経験がある人でないと、どのように書いたらいいんだろう…と悩んで時間を使ってしまいそうですね。さらに、複数人で開発しているチームだと書き方のバラツキも気になるところです。きっと、POROを書くときのお作法が決まっている方が開発しやすいはず。 そこで、
よちよち.rbに久しぶりに参加した。 yochiyochirb.doorkeeper.jp 今日の回はjnchitoさんがゲストとして招かれていて、あれこれ質問できるという会だった。 「昔からよちよち.rbに参加してくれてる人も是非」と言ってもらったので参加させてもらった。 jnchitoさんといえば、今でもRSpecのまとめ記事やRubyの新しいバージョンのまとめ記事はよく拝見するし、 自分がある程度RSpec書けるようになったのは、jnchitoさんらが翻訳された「Everyday Rails - RSpecによるRailsテスト入門」に支えられたところもあり、 お話してみたいと思っていた。 それもあって、最近職場で話して他の人の意見も聞いてみたいと思っていたことを、事前にアンケートフォームから質問として投げた。 #yochiyochirb で伊藤淳一さんに「プライベートメソッドにどう
20XX年、僕は Ruby on Rails の規約に違反したコードを書いたことでレイルズ王国の異端審問にかけられていた。僕がリポジトリに commit した app/services/ や app/repositories/ といったディレクトリと、その中に定義された Command パターンを用いたクラスや Module#refine による DCI もどき達がレイルズ王国の異端審問官の目に触れてしまったのだ。(僕は ActiveRecord で作られた Model の特異クラスに対して Module この記事でも紹介されているように、HanamiはDDD(Domain-driven design)を元に設計されているフレームワークです。 Railsを使っていると問題になってくることとして、サービス規模が大きくなるにつれてRails wayを遵守して開発することが難しくなり、例えばSe
概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: TestProf: a good doctor for slow Ruby tests 公開日: 2017/08/25 gemリポジトリ: test-prof/test-prof 著者: Vladimir Dementyev サイト: Evil Martians’ team blog 2017/10/10: 初版公開 2023/07/04: 更新 テストを書くことは、開発における重要なプロセスであり、RubyやRailsのコミュニティには特に当てはまります。私たちはテストでgreenが点灯するまで長時間待たされていることに気づいて、初めてテストスイートのパフォーマンスというものに関心を寄せるようになるものです。 私はテストスイートのパフォーマンスの分析に多くの時間を費やし、テストを高速化するテクニックを編み出すとともにツールを開
記事中のURLや内容、特にRailsやRubyのバージョンについて古くなっていることに気づいた方はぜひ編集リクエストください。 この記事はOkinawa.rbのAdventCalendar 5日目の記事です。 YassLabの業務時間中にQiita:Teamに書き溜めたものを編集して公開します。 4日目は @siman さんの「今年作った gem の紹介 (2017)」でした。 明日は @fullkawa さんのFinOpsのはなしです。 背景 人数が増えたり参加プロジェクトが増えるにつれ以下のような変化がおきました。 同じソフトウェアのさまざまなバージョンを扱うようになった コードレビューをする人・される人が増えた 同じソフトウェアでもバージョンによってAPIや使い方が異なる場合があります。 また、人によっては参考にする情報源がバラバラになってしまい、ソフトウェアの開発者が提供しているド
Rails で使っている gem の知見が欲しいという話をいただいたので、いま開発している nippo という Web アプリの、2017年12月2日時点で master に commit されている Gemfile の中身を解説する。 定義順序について説明してから、個々の gem について簡単に説明する。 定義順序まず group 指定の無いもの、次に group 指定付きのものという順で定義している。細かいけど group それぞれも辞書順。複数の group を同時に指定する場合は、それらを繋げたものを順序指定時のキーとしてソートする。こういうルールなので、gem メソッドの引数の :group オプションは利用しない。 意図的に順序を気にして定義しないといけないケースが存在するので、各 group ごとにまず順序を気にしないといけないやつを記述して、後に辞書順のやつを記述するように
前提 プログラミング学習をこれから本格的に始める人をターゲットとしています。Ruby/Ruby on RailsでWEBサービスを開発できるようになるための効率的な学習フローのメモ書きです。社内の勉強会用に使ったドキュメントです。 この記事で目指すゴールは簡単なWEBアプリケーションを実際に開発していく中で、 ・プログラムを書く感覚に慣れる ・オブジェクト指向の基本を理解する ・WEBの基本的な仕組みを学ぶ ・Ruby/Railsの基本的が理解でき、簡単なWEBアプリケーションを作れる の習得をゴールとしています。 今回は学習にRuby on Railsを使う想定ですが、Ruby on RailsでもNode.jsでもPHPでもPythonいいですが、大事なのはWEBの裏側がどうなっていて、どういう仕組みでインターネットやWEBアプリケーションが動いているのか知ること、プログラムを実際に書
初心者がRubyの基礎を覚えたところで他人のコードを読むようになると、*args や map(&:to_s) のような謎の記法がでてきます。 この手の記法は名前がわからないとググラビリティが低くなるため、人によってはつまづきとなることが多いようです。 尋ねられることがたまにありますので、この機会にRails開発でよく使われるものを中心にまとめてみます。 引数 *args 変数名の冒頭に*(アスタリスク)が付いているもので、「可変長引数」または「splat引数」とかいいます。 引数を複数個設定でき、さらにメソッド内部で引数を配列として受け取ることができます。 def splatter(*args) p args end splatter('foo') # => ['foo'] splatter('foo', 'bar', 'baz') # => ['foo', 'bar', 'baz'] d
Rubyのソースコードを読むとき、grepやctagsだけで読んでるとどこにどういう値が入るのか頭で考える必要があり大変。 そういう時、実際に動かしながらpryを使って中身を確認すると、どういう動きをしているのか楽に把握できる。 普通のエディタを使ってRubyを書いている人にとって、IDE的な機能を提供してくれるのがpryといえる。 本稿では、この記事を書く前の私のように、この次の「最低限の使い方」くらいしかpryを使いこなせていない人向けに、便利な機能をひと通り説明する。 最低限の使い方 まだpryを使ったことがない人はこれだけ知ってれば十分な気がする。 binding.pryで任意の場所からREPLを立ち上げる ソースの任意の箇所にbinding.pryを書いてRubyのプログラムを走らせると、実行中にその行でストップしてpryのREPLが立ち上がり、その環境での変数がどうなっているか
(訳注: 2016/3/2、頂いたフィードバックをもとに記事を修正いたしました。) Ruby on Railsは最近、急激に注目を集めていますが、その原因はほとんど、この言語が斬新なテクノロジーとしてもてはやされたことと、タイミングにあります。技術的な優位性は時間の経過とともに失われますから、タイミングがよかっただけでは、一過性のブームに終わり、このムーブメントの隆盛は長続きしません。従って、「Railsがいかにして、適切な技術としての位置を維持し続けるるだけでなく、影響力とコミュニティを拡大し続けてきたのか」をより多くの人に説明していく必要があります。そして、その維持・拡大を可能にした/していく要因は、物議を醸すことさえあるRailsの基本原則にあると考えています。 この基本原則はここ10年ほどの間に進化を続けてきましたが、最も強固な柱となっているルールはやはり、公開当初から制定されてい
2/16に みんなのウェディング さんで開催された『Ginza.rb 第32回 thoughtbotの開発ツールたちと最近のgem事情』に参加しました! 世界中にオフィスがある受託系の会社『thoughtbot社さんのオープンソース』で公開されているツールをネタに話をしましたんでそのメモです。 🗻 フロントエンド Bourbon - A Lightweight Sass Tool Set Bourbon Neat Bitters - Predefined Styles for Bourbon Refills - Patterns フロントエンド系のツールをいくつか作っていて、組み合わせるとBootstrapっぽいことができるそう。 CSSフレームワークBourbon/Neat/Bitters/Refillsは美しい - Qiita 結構絶賛されていて、Qiitaで400ストック以上されて
(Last Updated On: 2018年10月7日)Railsで多用されているActiveRecordのインジェクションパターンを簡単に紹介します。出典はrails-sqli.orgなのでより詳しい解説はこちらで確認してください。特に気をつける必要があると思われる物のみをピックアップしました。 Exists?メソッド User.exists? params[:user] params[:user]などの使い方は危険です。RailsはPHPなどと同様にuser[]というパラメーターで配列化します。 ?user[]=1 が入力の場合、 SELECT 1 AS one FROM "users" WHERE (1) LIMIT 1 となり不正なクエリが実行されます。 Calculateメソッド CalculateメソッドはSQLの集約関数を実行するメソッドです。average、calcula
Railsアプリケーションのデバッグはどのように行っていますか? 愚直にプリントデバッグ? でも複雑なロジック内だと「このロジックのこの処理のここでピンポイントで止めたい!」という場合もありますよね。 そんなときに便利なのがpry-byebug. Githubのリンクは下記。 https://github.com/deivid-rodriguez/pry-byebug pry-byebugを使えばピンポイントで処理を止めてステップ実行が可能になります。 Requirement Ruby2以上 pry-byebugで使われているByebugはRuby2前提のデバッガーなので2以上が必要になってきます。 導入 下記をGemfileに追加してbundle install. ユースケース 例えばこんなコントローラーのロジックがあったとする。 class PostsController < Appl
はじめに 先週の土曜日(2015/8/29)に西脇.rb&神戸.rbの合同勉強会として「Rubyistのための英語勉強会」を開催しました。 nishiwaki-koberb.doorkeeper.jp この勉強会はその名の通り、Rubyist(Rubyプログラマ)の英語に対する苦手意識を克服し、英語力を高めることを目的にした勉強会です。 いちおうRubyist向けとはなっていますが、大半の内容はRubyist以外の人にも役立つものだと思います。 そこで今回のエントリではこの勉強会の内容や発表された知見等を紹介します。 会場は阪神深江のNilquebe(ニルキューブ)さんでした 当日の流れ 当日はこんな感じのタイムスケジュールで進行しました。 13:00~13:30 自己紹介 13:30~13:45 語彙力診断テスト 13:45~14:15 「こういうときに英語ができなくて困る」「英語ができ
はじめに これは Ruby on Rails Advent Calendar 2014 - Qiita の19日目です 18日目 @yancya さんの Rails でシングルじゃないテーブル継承 - Qiita でした 19日目:オレオレRailsアプリを支えるインフラの作り方 最近では Heroku などのPaaS*1 も普及してインフラのことを知らなくても簡単にアプリを公開することができるようになりました。 しかしトラブルシューティングやパフォーマンスチューニングなどを行うにはアプリケーションコードだけで完結することは少なく、全体像を把握する必要があります。Railsアプリケーションの裏でどんな構成で動いているかを知っておくかは重要なのでざっくりと紹介したいと思います。 書かないこと Railsアプリを作る上でのノウハウ 便利なgemや外部サービスの紹介 *2 監視 アラート検知 モ
[Attention!] We use Japanese during meetups. 概要 よちよち.rb は 2013 年、エンジニアになって間もなかった @yucao24hours が、同じくらいのスキルレベルの仲間とともに成長していく場がほしいと思い発足させました。 主催者を含め当初から参加していたメンバーはもう「初心者」ではなくなっていますが、既存よちよち.rbメンバーによる、今よちよちの方が行きやすい場所を作りたいという気持ちから、あらためて発足当初と同じ「プログラミング歴約2年程度までの初心者の方」を対象としたミートアップとして再始動します。 再始動の背景については以下の記事をお読みください。 よちよち.rb の新たなる冒険 Ruby や Web プログラミングのたのしさを知る旅のスタート地点として、みんなで楽しくやっていきましょう。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く