ネットの海の片隅で

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

Rails

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…