【備忘録】railsでのアプリ開発の流れ


自分用のメモです。
アプリ開発の流れを残しておきます。

①ER図を作成

②ディレクトリ作成

cdコマンドでProjectディレクトリまで移動した上で、

ターミナル
$ mkdir 作成したいディレクトリ名
ターミナル
$ lsコマンドで確認

ディレクトリが作成されているのが確認できたらOK。

③Gemfileの生成

▼参考記事

cdコマンドで作成したディレクトリまで移動した上で、

ターミナル
$ bundle init

Writing new Gemfile to /path/to/ディレクトリ名/Gemfile
と返ってきたら、Gemfile生成成功。

④生成したGemfileの編集

$ vim Gemfileで編集できる状態にした上で

Gemfile
# frozen_string_literal: true
source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails"

(railsのコメントを外すだけです)

⑤Railsのインストール

ターミナル
$ bundle install --path vendor/bundle

この時に--path vendor/bundleを忘れずにつけること。
このオプションを付けることによって、プロジェクトのvendor/bundle以下にgemが格納されます。(一度オプションをつけてbundle installしたら、次回以降はオプションを付けなくてもvendor/bundle以下に格納されるようになります)

⑥Railsアプリを生成

ここまでで準備が整ったので、アプリを作っていきます!

ターミナル
$ bundle exec rails new . -B -d mysql --skip-turbolinks --skip-test

注1)bundle execを必ず先頭につけること!
注2).(ドット)をつけることで現在のディレクトリにRailsアプリを生成できます。

Railsのインストール実行時にGemfileを上書きしていいか聞かれるので、yesにして続行します。

⑦githubで新しいレポジトリを作成

⑧git init → git add → git commit → git remote add origin → git pushの順に実行

ターミナル
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin https://github.com/githubアカウント名/アプリ名.git
$ git push -u origin master

これでWebアプリの土台が出来上がりました!
次はデータベースの作成です。

⑨データベースの作成

まずは[email protected]を立ち上げて、
mysql --user=root --password を実行。
中に入って、まだアプリが入っていないことを確認。
※下記エラーが発生して中に入れない場合・・・一度mysqlを閉じて、ps -ef | grep mysqlを実行。

エラーメッセージ
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES
ターミナル
$ ps -ef | grep mysql

すると、3つのプロセスが走っていたのでこれらを全てkillする。

その上で再度mysqlを立ち上げ直し、
mysql --user=root --password を実行。
入れます!

ターミナル
$ bundle exec rails db:create
$ bundle exec rails db:migrate(データベースに変更を指示・反映する)

このとき、mysql2に関するエラーが出ましたが下記記事に沿って

ターミナル
$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/[email protected]/include"
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/[email protected]/lib"
$ bundle install

を実行したところ解決しました。

▼参考記事

その上で再度 mysql --user=root --password を実行。

中に入って、アプリのデータベースが作成されていることを確認。
★Sequel Pro(シークエル・プロ)を使うとより便利に確認できます。

⑩サーバーを立ち上げる

ターミナル
$ bundle exec rails s

すると、Webpackerやnode、node.jsなどがまだインストールされていないですといった内容のエラーが出てくるので、それらをすべてインストールする。

▼参考記事

ターミナル
$ bundle exec rails webpacker:install

その上で再度サーバーを立ち上げる

ターミナル
$ bundle exec rails s

成功!

⑪下記の順で実行

ターミナル
$ git add .
$ git commit -m "create_database"
$ git push origin master

次は、便利機能「devise」のインストールです。

▼参考記事

⑫deviseのインストール〜deviseでのUsersテーブル作成、Usersビュー作成、Usersコントローラー作成まで

$ vim Gemfileで編集できる状態にした上で

Gemfile
gem 'devise' #ファイルの一番下に追記
ターミナル
$ bundle install
ターミナル

$ bundle exec rails g devise:install
(↑deviseの設定ファイルをrailsアプリケーションにインストールする)

$ bundle exec rails g devise user
 (↑Userモデルを作成するためuserにしているが、他のモデルを作成したいときはそのモデル名で作成すること。またマイグレーションファイルを見てみると、
emailとパスワード用のカラムは自動で生成されるようになっているので、
他に追加したいものがあればここのタイミングでマイグレーションファイルに追記しておく。)

$ bundle exec rails routes
 (↑routesを確認する)

$ bundle exec rails db:migrate
 (↑つくったモデルを元にデータベースをつくる。これを行わないとデータベースにUsersテーブルが作成されない。)

$ bundle exec rails g devise:views users
 (↑deviseに対応したビューを作成)

$ bundle exec rails g devise:controllers users
 (↑deviseに対応したコントローラーを作成)

サーバーを立ち上げて確認する。

ターミナル
$ bundle exec rails s

▼参考記事

色々なrails generate migrationコマンドが載っていて参考になりました。

そして次は、deviseを使わずにPostsテーブル作成、Postsビュー作成、Postsコントローラー作成を行っていきます。

⑬手動でPostsテーブル作成、Postsビュー作成、Postsコントローラー作成まで

▼参考記事

ターミナル

$ bundle exec rails g model Post user_id:integer title:string content:text category_id:integer

これにより、下記2つのファイルが同時に作成される。

・app/modelsフォルダ下にPostモデルファイル(app/models/post.rb)
・db/migrateフォルダにマイグレーションファイル

今回はマイグレーションファイルにカラム名とデータの型を色々と指定した状態で作成したが、
あとからマイグレーションファイルを編集してもOK。

▼参考記事

ターミナル
$ bundle exec rails db:migrate(データベースに変更を指示・反映する)

次にPostのコントローラファイルを生成する。

ターミナル
$ bundle exec rails generate controller Posts

次にPostのビューファイルを生成する。

▼参考記事

Postのコントローラーの生成を終えた時点で、自動的にviewsフォルダの中にPostフォルダが作成されている。
なのでその中にファイルを生成していく。

「index.html.erb」という名前でファイルを作成する。

views/post配下
index.html.erb 手動でファイル作成

ファイル内に以下のようにコードを打ち込む。

<p>Hello World!</p>

そのあと、Postのコントローラーへindexアクションメソッドを追加。

app/controller/post_controller.rb
class PostController < ApplicationController

 def index
 end

end

最後に、ルーティングを設定すれば完成!

<ルーティングとは>
コントローラへ指示を出すための道筋。
URLがルーティングにあたる。
Railsでは、ルーティングの指示に従いコントローラのアクションが実行される。

config/route.rb

root to: "posts#index"

「root」という道筋でアプリにたどり着いたら
「postsコントローラのindexアクションを動かしてね!」
という指示出し。

サーバーを起動して、localhost:3000 にアクセスすると「Hello World!」と表示される。

あとはここまでの流れのとおりに残りのcategoriesテーブル、responsesテーブル、posts_categories_relationsテーブルも作成し、それぞれMVCの形を整えていく。

※多対多の関係についてはまた別の記事で。