【Rails】Rails6でAPIモードの環境構築をしっかりやる
はじめに
最近、RailsAPI+React
のような形で、Webアプリケーションを構築するスタートアップ企業をしばしば見かけます。
今回はReact
等にフロント側を委託し、RailsはAPIに専念することを前提とした環境構築と、その解説をしていきます。
環境
-
Ruby
:2.6.3 -
Rails
:6.0.3
RailsAPI環境構築
rails new
で雛形を作成
【1】今回は下記を指定した上でrails new
を実行し、RailsAPI
の雛形を作成します。
-
API
モード - DBを
MySQL
-
Rails
のバージョン6.0.3
rails _6.0.3_ new hoge -d mysql --api
このコマンドを実行すると、自動で必要なファイルを作成してくれます。大変便利ですね。
rails db:create
でDBを作成
【2】rails db:create
DBを作成しておきます。マイグレーションファイルがまだ存在しないので、rails db:migrate
はしません。
bundle install
でgemを取り込む
【3】rack-cors
をコメントアウトしてbundle install
してください。
bundle install
このコマンドでGemfile
に記述したgem
(ライブラリ)を取り込むことができます。ちなみにbundle
だけでもbundle install
してくれます。
【4】CORS(Cross-Origin Resource Sharing)を設定
ざっくり説明すると、 デフォルトでは、React
等の別のオリジンからRailsAPI
にアクセス(GET
, POST
, PUT
, DELETE
など)することは制限されています。 なので、フロント側のアプリケーションからのアクセスすることを可能にする設定を書いていかなければいけません。(詳しく書いたらキリがないので、「CORSとは」みたいにググってみてください。)
今回はconfig/initializers
以下にcors.rb
ファイルを作り、設定を書いていきます。例は下記のとおり。
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'http://localhost:3000'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head],
credentials: true
end
end
http://localhost:3000
からのHTTPリクエストを許容する設定です。
ここでは省略していますが、本来ならば本番環境での設定も必要です。
【5】Pumaの設定
config/puma.rb
# port ENV.fetch("PORT") { 3000 }がすでにあるので3001に修正する。
port ENV.fetch("PORT") { 3001 }
ローカルサーバーのデフォルトポート番号を3001にします。(フロント側が3000を想定しているため。)
この設定をすることで、rails -s
をした時にhttp://localhost:3001
で立ち上がるようになります。
最後に
お疲れ様でした!!!
以上で、Rails側での環境構築は完了です。認証方法にCookie
を使う場合は、その設定も必要です。認証系の設定と実装は他の記事で書こうと思います。ではでは〜👋
Discussion
【4】CORS(Cross-Origin Resource Sharing)を設定
の部分で、Gem
gem 'rack-cors'を入れなければエラーになってしまうと思います。
入れなくてもよい方法あるのでしょうか?
ああ、本当ですね。。。すみません🙇♂️
おそらく書き忘れたのだと思います。追記しておきます。
ご指摘ありがとうございます!
いえいえ!
お互い頑張りましょー