LoginSignup
13
14

More than 3 years have passed since last update.

Rails 6で認証認可入り掲示板APIを構築する #1 環境構築

Last updated at Posted at 2020-09-06

はじめに

Rails APIに関して、チュートリアルがあまり見当たらなかったため作成しました。
なお、筆者自身もRails API触り始めて半年程度なので、誤っている点などあればご指摘ください。

Rails APIモードを使い、掲示板APIを構築してみようと思います。
なお、フロントエンドは本チュートリアルに含みません。
API完成後、ご自由なものを選択してください。

目次

全18回の連載です

対象読者

  • Ruby on Railsチュートリアルを1周し、Railsアプリケーションの実装方法や用語がなんとなく分かっている方
  • モノリシックなRailsではなく、RailsのAPIサーバを構築したい方

RailsのCRUD操作に関する最低限の知識はないと、追いつくのは難しいかもしれません。

最終的な環境・Gem

AWS Cloud9
PostgreSQL 9.5.15
Ruby 2.7.1
Ruby on Rails 6.0.3.2

Gem
シリアライザ:active_model_serializers
認証:devise_token_auth
認可:pundit
ダミーデータ:Faker
静的コード解析:rubocop
テスト:RSpec, FactoryBot

Cloud9環境の構築

まずはAWSアカウントをお持ちでない場合、アカウントを取得しましょう。
本記事ではアカウントを所持していること前提として解説をします。

AWSマネジメントコンソールでCloud9を探します。
s1.png

Create environmentを押します。
s2.png

分かりやすい名前と説明を入れ作成します。
s3.png
2ページ目は基本的に全てデフォルトで問題ないでしょう。

構築に数分かかるので放置します。
完了したらこんなIDE画面が表示されます。

s4.png

Rubyのバージョンアップ

最初からRubyもRailsも入っていますが、バージョンが古いですね。

$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
$ rails -v
Rails 5.0.0

s5.png

記事執筆当時の安定バージョンは2.7.1なので上げましょう。

$ rvm install 2.7.1
...
$ rvm use 2.7.1
$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]

無事上がりました。

参考:【AWS】Cloud9でRubyのバージョンをアップデートする方法(rvm使用)

Railsのバージョンを上げる

こちらも、記事執筆当時最新が6.0.3に対し、インストールされているのが5.0.0とだいぶ古いので上げましょう。

$ gem install rails
...
$ rails -v
Rails 6.0.3.2

簡単ですね。

参考:Cloud9でRailsのバージョンを変更する

postgreSQLを入れる

なぜpostgresをこのタイミングで入れるか?

Railsのデフォルト開発DBはSQLiteですが、Amazon LinuxのCloud9環境だとSQLiteのバージョンが低くアプリケーションが作れません。バージョン上げがなかなかしんどいので、今回はPostgreSQLを使います。

また、SQLiteはその名の通り機能的にもliteなので、他のRDBMSに比べてできないことも多く、無駄に詰まることがあるので、それを回避するのも要因の一つです。

まずインストールします。

$ sudo yum install postgresql95-devel postgresql95-server postgresql95-contrib
$ psql --version
psql (PostgreSQL) 9.5.15

次に初期化と起動、ユーザー作成。Permission deniedは無視でOKです。

$ sudo service postgresql95 initdb
Initializing database: sudo service postgresql95 start     [  OK  ]
$ sudo service postgresql95 start
Starting postgresql95 service:                             [  OK  ]
$ sudo -u postgres createuser -s ec2-user
could not change directory to "/home/ec2-user/environment": Permission denied

参考:[Rails6]AWS Cloud9(Amazon Linux)で動かしてみる

APIモードでrails newする

$ rails new bbs -d postgresql --api

--apiと付けることでRails APIモードとなります。
APIに不要なファイルが生成されない状態で作られます。

Railsのテストサーバを立ち上げる

New Terminalから新しいターミナルを立ち上げます。

s6.png

ローカル等ではrails sだけでテストサーバが立ち上がるのですが、Cloud9はオプションが必要です。

$ cd bbs/
$ rails s -b $IP -p $PORT
...
* Listening on tcp://127.0.0.1:8080
Use Ctrl-C to stop

これでサーバが立ち上がります。
なお、書いてあるとおりCtrl+Cで止めることができます。
port8080で動いていることが分かりますね。

先程のターミナルに戻り、ちゃんと立ち上がったかcurlで確認してみましょう。
テストサーバを立ち上げたターミナルウィンドウは、止めずに放置してください。

$ cd bbs/
$ curl localhost:8080                                                                                                                  
{"status":500,"error":"Internal Server Error","exception":"#\u003cActiveRecord::NoDatabaseError: FATAL:  database \"bbs_development\" does not exist

どうやらDBが無くて怒られてます。
railsでDBの初期化をしましょう。

$ rails db:create
...
Created database 'bbs_development'
Created database 'bbs_test'
$ curl localhost:8080                                                                                                                  

なんかhtmlっぽい大量の文字列が出てきたら、とりあえず500系エラーは起きていないので大丈夫です。

IDEの初期設定をする

インデントはspace2にしたいので、画面右端にある歯車マークから設定画面へ。
Code Editor (Ace)を選択し、

Soft Tabsを4から2に偏向
On Save, Strip Whitespace

して閉じます。

edit.png

ホストを許可する

Rails6から、ホストを許可しないとエラーでページが表示されません。
Cloud9で実行しているので、AWSのhostsを追加します。
保存したらテストサーバを一度Ctrl+Cで止め、再起動してください。そうしないとconfigが反映されません。

config/application.rb
...
module Bbs
  class Application < Rails::Application
...

+    config.hosts << '.amazonaws.com'

...
  end
end

Welcome画面を表示する

画面上部からPreview Running Applicationを押すと、小さくアプリケーションウィンドウが立ち上がります。

s7.png

ですがこの小さいウィンドウでは正常に実行されないため、Pop Out Into New Windowを押して別ウィンドウを立ち上げます。

s8.png

するとついに、正常にWelcome画面が表示されます。

welcome.png

続き

Rails 6で認証認可入り掲示板APIを構築する #2 gitとrubocop導入

連載目次へ

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14