Rails
少し前にはなりますが、RailsのDiscussionに問題提起を行いました。 その後、Discussionで「Issueを作成して良いよ〜」とお許しを頂いたのでIssueを作成した所、修正PRが作成されてマージされるという...とんでもない出来事がありました。 www.okb-shelf.wor…
sidekiq.ymlではERBがサポートされており、環境変数を指定することが可能です。 よく環境変数が使われるのは、並行度(concurrency)の値やタイムアウトの秒数などでしょうか。 :concurrency: <%= ENV.fetch('SIDEKIQ_CONCURRENCY', 10) %> こんな感じでsideki…
RubyにはLoggerクラスが組み込みライブラリとして提供されていて、ログをいい感じに出力することができます。 しかし、複数のロガーに対してログを出力することはLoggerクラスだけでは出来ません。RailsであればActiveSupport::Logger.broadcastが使えるそう…
Rails製のアプリケーションのコントローラーの単体テストを見ていると内部で使用しているクラスやモジュールの観点・パターンまでを網羅したファットな単体テストが書かれているものを見かけます。しかしながらコントローラーの単体テストはあくまでコントロ…
とんでもないことが起こりました。まじでやばいです。 前回の記事で共有したように「RailsのgithubにIssueとして気軽に立てて良いよ〜」という旨の返信をJean Boussierさんから頂いたので、RailsのIssueを作成してから3日ほど経過しました。 www.okb-shelf.w…
早いもので一年も折り返し...。東海地方もいよいよ梅雨入りしてジメジメした季節になりました。 先日、cache_storeの設定に環境変数を指定してInterger型に変換しないと、キャッシュの書き込み時にエラーが出るという現象を確認しました。この振る舞いに疑問…
「今年こそは...今年こそは...OSSに貢献するぞ...!」と思い気づけはや3年。 気持ちだけが先行して何をしたら良いのか分からず。結局、それらしいことは何もしていませんでした。 ですが、先日開催されたRubykaigi2023(コロナになって行けなかったけど)へ参…
Rubyでpg gemを使って、postgresqlに接続してクエリの実行結果を見ていたところ、boolean型のカラムの戻り値がTRUEの場合にt、FALSEの場合にfとなる現象を確認しました。 CREATE TABLE test1 (a boolean, b text); INSERT INTO test1 VALUES (TRUE, 'sic est…
Railsの開発にてmodelやcontrollerの共通処理をconcernとして切り出すことはよくあるパターンです。 modelやcontrollerはクラス(class)として表現するものの、concernはActiveSupport::Concernをextendしたモジュール(module)として定義する必要があります。…
みなさんはRailsの開発にて、サービスクラス(ServiceObject)を使っているでしょうか。 モデルやコントローラーがファットになるのを防ぐために導入される設計方法で、ドメイン知識におけるサービス(eg: 商品の購入処理)の一連の処理をまとめたクラスを作成す…
Railsでトランザクションを扱いたい時はActiveRecordに実装されたtransactionメソッドを呼び出します。 ActiveRecord::Base::transaction do : end 今までRailsでトランザクションのブロックを宣言した時は、他のトランザクションからデータの取得、更新は出…
Railsではマイグレーションファイルを作成してマイグレートを実行することで、テーブルが作成されます。 非常に便利で手軽にテーブルの定義・作成ができるのですが、マイグレートされた結果、どのような型が選択されるのかが隠蔽化されるという問題があると…
Rubyのブロック引数についてご存じでしょうか。 非常に便利な機能で皆さんもよく使っている、正確にはブロック引数に対してブロックを渡していますが、ブロック引数を定義する機会がほとんどない方も多いでしょう。 例: eachの場合 # do以降の処理がブロック…
Railsを使っていて何かと便利なのが「enum」です。 他の言語では列挙型(Enumerable)と呼ばれることがありますが、実態としてはActiveRecordに定義されたenumという関数です。modelファイルの中でカラム値のバリエーションを指定することが出来るのが非常に便…
単体テストのコードを見ていて、対象のテーブルに存在するレコード数を取得する際の記述が統一されていないことを発見しました。ある箇所ではUser.all.sizeと記述されており、ある箇所ではUser.countと記述されており、どの方法で取得するのが効率が良いのか…
コードレビューをしていていた日のこと。あるテーブル(users)からidで絞り込んでレコードを1件取得する際に、以下のようなコードが頻出していることに気づきました。 User.find_by!(id: params[:user_id]) 処理の内容としては、idカラムでusersテーブルから…