ネットの海の片隅で

技術ネタの放流、あるいは不法投棄。

Rails

Rails の before_action :set_* って必要?

表題の通り。 Rails でよくある class HogesController < ApplicationController before_action :set_hoge, only: %i[show] def show end private def set_hoge @hoge = Hoge.find(params[:id]) end end みたいなのっているの? という話。 set_* がつらい理…

oneshot task に規約と仕組みを導入する

Cookpad TechConf 2018 の突発 LT で話した内容をもう少しちゃんと書いてみます。 アドホックなタスクの必要性 日々、サービスを運用しているとアドホックなデータの変更や処理の再実行などが必要になります。 典型的には以下のようなケースです。 データマ…

gemをあまり使わずにFat Modelを整理するための本「Growing Rails Applications in Practice」

タイトルの通りで、 Growing Rails Applications in Practiceを読みました。 Fat controllerやFat modelに代表されるように、少し気を抜くとカオスになりがちなRailsアプリケーションの整理方法についての本です。 表紙とか目次も含めてPDFで88ページしかな…

Railsのresourcesにcollection, member以外を指定したい

前提 Railsのrouting設定では、一般的に以下のような書き方をする。 # config/routes.rb Rails.application.routes.draw do resources :posts end このとき、最新の記事を公開するURLとして/posts/latestが欲しい場合、次の2つの書き方が考えられる。 A Rail…

RailsにおけるDB制約のワナ

DBに制約を張る このようなテーブルがあったとします。 CREATE TABLE products( id serial NOT NULL, code varchar NOT NULL, price integer NOT NULL CHECK (price > 0), CONSTRAINT pk_products PRIMARY KEY (id) ); 各カラムにNOT NULL制約 priceにCHECK…

RailsのモデルでJANコードのバリデーションをするgem 「jan_validator」

つくったもの Rails*1向けのJANコードバリデータ。 先日のgemをベースにしています。 参考にしたページ ActiveModel::Validator balexand/email_validator · GitHub 使い方 JANコードのバリデーションがRails標準のpresence: trueのようなカタチで書けるよう…

i18nをYAMLで管理するのしんどい

TL;DR 愚痴です。 問題 Railsのi18nではt(:hello)みたいな感じで、tメソッドを使って多言語対応すると思います。*1 この多言語対応のtranslationファイルがYAMLで書かれていて #common.en.yml en: hello: "Hello" #common.ja.yml ja: hello: "こんにちは" み…

RDBの素晴らしさに気づき始めたという話

リレーショナル・データベースの設計について思ったことをうだうだと書いてみます。 「そんな基本的なことを……」 「しかも、間違ってるし」 とかいろいろあると思うので、指摘していただけると嬉しいです。 そもそもの問題 僕がDBを触り始めたのはRailsでWeb…