kenju's blog

About Programming, Mathematics, Security and Blockchain

Rails

activerecord_precountのRails v5対応のパッチを送った

@k0kubunさんが作成されたactiverecord_precountを使っているのだが、Rails v5対応を行う中で、Rails v5で動作しないことが判明した。 そこで、少し前の話になるのだが、acriverecord_precountのRails v5対応をするためのパッチを3件送った。 s/query_scope/…

Sidekiq Best Practices: パラメーターにModelを渡す時はObject InstancesではなくIDsを渡す

github.com tl;dr Sidekiqで非同期ジョブを実行する時、IDsを渡し、ジョブ内で再度モデルをfind()して使う オブジェクトのインスタンスを渡すと、ジョブがキューに存在する間にインスタンスの値が変更されうる 例:Userモデルのname値がenqueしたタイミング…

rubyzip と zip(1) のメモリ消費量を比較検討した

rubyzipgemが、ある特定のJobサーバーでメモリ消費量的に利用できるかどうかを計測したかったため、Profilerを書いた。比較対象として、Linuxコマンドのzip(1)と比較した。また、単純にzipしようとするファイルをRubyでシンプルに扱う場合どれくらいのメモリ…

TypeScriptとRails Assets Pipelineを融合する`ts_assets`

github.com 自分で言うのもなんだけど、TypeScript & Rails を使っているWeb Application開発の場合、結構便利だと思う。 使い方 READMEに書いてある通り。rakeか何かでTsAssets.generate(include: "app/assets/images")を読んであげると、include:に指定し…

Railsで特定のURLにアクセスしたときにJS側でLocalStorage消去をしたい

tl;dr Railsで特定のURLにアクセスしたときにJS側でLocalStorage消去をしたいときの実装例 より汎用的に言うと、JS側でしか処理できない任意のロジックをRailsアプリケーションへのリクエストのタイミングでどのように呼び出すかと言う話 考え方 「Rails側で…

Railsでtruthy/falsyな文字列をBoolean型に変換する

tl;dr Controllerでパラメーターとして渡ってきた"true", “false"といった文字列をBoolean型に変換する場合、Rails v5以降ではActiveRecord::Type::Boolean.new.castを使う Rails v4までの場合はActiveRecord::Type::Boolean.new.type_cast_from_databaseを…

Rails4->5へのアップデート時にController Spec Path Syntax Changeにモンキーパッチを当てる

diff # params: { ... } で囲う - get :action, { data: '...' } + get :action, params: { ... } # xhr: true を使う - xhr :get, :action - xhr :get, :action, { data: '...' } + get :action, xhr: true + get :action, params: { ... }, xhr: true code…

RailsでConcernsを利用する場合のモジュール名前空間の衝突に注意

tl;dr Concernsを定義するときに、他の箇所のモジュール名前空間と衝突するとLoad Error になる場合があるので注意 Rails v5において再現 対応策としては、片方側のモジュール名を変更する Concerns::X::Z & X::Y とするか Concerns::X::Y & X::Z とする 実…

Rails4->5へのアップデート時にActiveRecord::Migration.[]にモンキーパッチを当てる

Rails5では、MigrationファイルにRailsバージョンの指定が必要になった。 github.com - class MyMigration < ActiveRecord::Migration + class MyMigration < ActiveRecord::Migration[4.2] アップデート作業をする際に、PRを分割して先にこの変更だけ入れる…

Request specの導入の際にまとめた調査メモ

Request Specを導入した際に、調査しまとめた社内記事が元です。 Request specとは RSpec 3.5 の提供しているテスト手法 内部実装的には、Rails5 の ActionDispatch::IntegrationTest のwrapper Controller spec とは違い、ルーターやミドルウェアスタック、…