Help us understand the problem. What is going on with this article?

トレタのRails API開発tips

More than 1 year has passed since last update.

トレタでの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で調べられるようになっており、ログからすぐに問い合わせ調査できる環境にしています。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away