Rails 5でAPIをさくっと作る方法
Rails 5のAPI専用モードでAPIのベースをさくっと作ってみたので備忘録として。
Rails開発環境の構築
Railsの最新バージョン(5.1.4)
$ gem install rails
...
12 gems installed
APIアプリケーション作成
$ rails new scribbles_api --api ... RubyDep: WARNING: Your Ruby is outdated/buggy. RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1.
rubyのバージョンアップ
$ rbenv install 2.3.1 Downloading ruby-2.3.1.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2 Installing ruby-2.3.1... BUILD FAILED (OS X 10.12.6 using ruby-build 20160602) Inspect or clean up the working tree at /var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497 Results logged to /var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497.log Last 10 log lines: Referenced from: /private/var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497/ruby-2.3.1/./miniruby Expected in: /usr/lib/libSystem.B.dylib dyld: Symbol not found: _utimensat Referenced from: /private/var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497/ruby-2.3.1/./minir uby Expected in: /usr/lib/libSystem.B.dylib make: *** [.rbconfig.time] Abort trap: 6 make: *** Waiting for unfinished jobs.... encdb.h updated
https://github.com/rvm/rvm/issues/3744
再度インストール
$ xcode-select --install $ rbenv install 2.3.1 ... Installed ruby-2.3.1 $ rbenv local 2.3.1 $ rbenv rehash $ gem install bundler ... 1 gem installed $ bundle install ... Bundle complete! 8 Gemfile dependencies, 49 gems now installed.
API作成
scaffoldでモデル・コントローラ作成
$ rails g scaffold User field1:type field2:type
ダミーデータ作成
以下の記事を参考にさせていただきました
Gemfile
# seeds gem 'enumerize' gem 'activerecord-import' group :development, :test do gem 'faker' gem 'gimei' end
lib/tasks/seed.rake
Pathname.glob(Rails.root.join('db/seeds/*.rb')) do |path| desc "Load the seed data from db/seeds/#{path.basename}." task "db:seed:#{path.basename(".*")}" => :environment do load(path) end end
db/seeds/user.rb
# coding: utf-8 # Create dummy users # Male users = [] 50.times do |no| gimei = Gimei.male users << User.new( user_hash: SecureRandom.uuid, nickname: gimei.katakana, email: Faker::Internet.email, password: Faker::Lorem.characters(45), gender: User.gender.male.value, ) end # Female 50.times do |no| gimei = Gimei.female users << User.new( user_hash: SecureRandom.uuid, nickname: gimei.katakana, email: Faker::Internet.email, password: Faker::Lorem.characters(45), gender: User.gender.female.value, ) end # Bulk insert User.import users
ここまでやるとrakeのseedタスクがこんな感じ
rake -T db:seed rake db:seed # Loads the seed data from db/seeds.rb rake db:seed:user # Load the seed data from db/seeds/user.rb
あとは実際に実行してUserのダミーデータを作成
$ rake db:migrate $ rake db:seed:user
rails routes確認
$ rails routes Prefix Verb URI Pattern Controller#Action users GET /users(.:format) users#index POST /users(.:format) users#create user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy
ローカルサーバ起動
$ rails server => Booting Puma => Rails 5.1.4 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.10.0 (ruby 2.3.1-p112), codename: Russell's Teapot * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000
curlで動作確認OK
$ curl "http://localhost:3000/users/1" {"id":1,"user_hash":"3c929a28-3583-45a8-a71d-82295a2a6a3a","nickname":"タムラ コウタロウ","email":"vada@borerherman.com","password":"0pm8iatqkbk3n7x7vnxofwskk0aws5oyfvvj62r5y7nop","gender":"male","created_at":null,"updated_at":null}