🚃

Rails でシンプルなウェブアプリを作る

2022/01/21に公開

こんにちは。
今記事では初めてRubyとRailsを使って練習プロジェクトとして簡単なウェブアプリを作りました。

最終的にHeroku上でホストしました。

プロジェクト作成とモデル作成

Railsではプロジェクト作成を一行で行えるのでそのコマンドを使います。

rails new app_name_here --database=postgresql

次にモデルをscaffoldで作成します。RailsのscaffoldはいわゆるCRUDを一瞬で実装してくれます。
今回のプロジェクトでは曲についての小さなメモを残せるという機能を作るために、まず曲のモデルを作成します。(モデルを作成するというかscaffoldなので基本的な操作等もすべて作成されます)

rails g scaffold MusicTrack name:string

次に曲毎に保存するメモのモデルを作成します。

rails g scaffold TrackNote body:text music_track_id:integer user_id:integer

ここでmusic_track_idを作成する理由は曲のメモは必ずどれかしらの曲に属するからです。user_idに関しても同様でメモも必ずどれかのユーザーに属します。この関係は次の項目で記述します。

ユーザーログイン機能実装

その前にユーザーログインの機能を利用するためにRuby Gemのdevisebrcyptをインストールします。
Gemfile内に

gem 'devise'
gem 'bcrypt'

と追加し以下のコマンドでインストールします。

bundle install
rails generate devise:install

すると、ユーザーモデルが作成されるので今度こそモデル同士の関係を記述していきます。

モデル同士の関係を記述する

それぞれのモデルのファイルに以下のように記述します。

app/models/user.rb
class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :track_notes
end
app/models/track_note.rb
class TrackNote < ApplicationRecord
    belongs_to :user
    belongs_to :music_track
end
app/models/music_track.rb
class MusicTrack < ApplicationRecord
    has_many :track_notes
end

こうすることでUserオブジェクトにtrack_notesプロパティが追加され、簡単にそのユーザーに属するTrackNoteにアクセスできるようになります。(同様にMusicTrackにもtrack_notesプロパティが追加されます。)

ルーティングを記述する

Railsではroutes.rbにルーティング情報を記述します。

config/routes.rb
Rails.application.routes.draw do
  devise_for :users
  resources :track_notes
  resources :music_tracks
end

DB関係のコマンド

RailsでDBのテーブルを作成したりコラムを追加したりした後は必ず以下のコマンドを利用します。
(ただし初回のみは追加でrails db:createを先に利用します。)

rails db:migrate

この時点でrails sを使うとおそらくサーバー(ウェブとDB)が起動します。

今プロジェクトではアプリ全体をDockerコンテナ化したいので後々このコマンドは使わなくなります。コンテナ化するまでは上記のコマンドを使用します。

次の記事ではこのRailsアプリをDockerコンテナ化します。

Discussion