Ruby
RubyOnRails

トレタのRails API開発tips

トレタでのRails API開発をやっているときに意識しておいてよかったこと、レビュー時に特に注意しておくポイントについてtips形式でご紹介します。

マスタデータのデータ投入はActiveRecord migrationで行う

railsのmigrationにActiveRecord migrationを使っている場合は、マスタデータの投入をActiveRecord migrationを使ってinsertした方が便利です。

レコード数が少ないマスタデータはよく本番サーバに入って直接rails consoleからcreateしたり、rails runnerでスクリプトを実行したりしてデータを作成したりするケースがあります。

しかし、マスタデータを再現性が無い方法で作成してしまうと、開発環境やステージング環境に同じデータが作成されなくなってしまい、混乱の元になります。少し手間かもしれませんが、ActiveRecord migrationでいつでもどの環境でも同じデータが作成されるようにしておくと便利です。

テーブルの構造をmigrationで変える時はrollbackできるか必ずチェックする

migrationファイルが作成されるときに、railsのデフォルトだと change methodで作成されますが、ここにmigrationの内容を記述する際にrollbackできるように必ず記述しましょう。

私も今でもたまに確認を忘れてしまいレビューでrollbackできるかを指摘されます。localでmigrationができるかの確認は rake db:migrate;rake db:rollback;rake db:migrate の用に実行すると、rollbackがコケた際にすぐ確認できるので便利です。

今から実行する変更がrollbackを自動で検知するメソッド かどうかを覚えておき、それ以外の内容の変更は up down methodでmigrationを記述するようにしておくと事故が少なくなります。

seedデータを育てる。マスタデータとテストデータを分けておく

基本であり忘れっぽくて難しいところですが、やはりdb/seeds.rb ファイルを少しづつ地道に育てておくと、開発スピードが上がります。開発用データのメンテナンスは定期的にやっておきましょう。
トレタでは新しいmodelが増えたときはかなりの割合で 「db/seeds.rb にも追加しておいてください」というレビューがなされます。

また、全てのデータを db/seeds.rb ファイルで追加するのではなく、マスタデータとテストデータを分けておくと便利です。
トレタではseed_dumpを使っており、db/seeds.rb でマスタデータ系のデータ作成、db/dev_seeds.rbというファイルで開発用データ作成を行っています。

db/seeds.rbにマスタデータのみを記述しておくと、rspecでテストを記述する際、マスタデータのみをあらかじめtest環境DBに投入しておけば、rspec上でマスタデータ投入のコードを書かずに済みます。

外部APIへのリクエストの際はログを通常のログとは別に分けておく

外部APIへのリクエストのときはそのAPI専用のログファイルを用意し、そこに書き出しておくと問い合わせ対応が便利になります。

特に外部APIが自社のAPIではなく外部のサービスの場合、正確な問い合わせを行うために、Request-IDやリクエスト内容を詳細にログに出しておくことが重要です。

トレタではログをfluentd経由でBigQueryに流しておいてSQLで調べられるようになっており、ログからすぐに問い合わせ調査できる環境にしています。