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


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

# ①ER図を作成

![スクリーンショット 2021-05-23 18.11.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985164/5d4825f0-b68f-946a-0954-7c9957fff249.png)


# ②ディレクトリ作成

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

```ruby:ターミナル
$ mkdir 作成したいディレクトリ名
```
```ruby:ターミナル
$ lsコマンドで確認
```
ディレクトリが作成されているのが確認できたらOK。


# ③Gemfileの生成

▼参考記事

https://qiita.com/yuitnnn/items/b45bba658d86eabdbb26


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

```ruby:ターミナル
$ bundle init
```
Writing new Gemfile to /path/to/ディレクトリ名/Gemfile
と返ってきたら、Gemfile生成成功。

# ④生成したGemfileの編集
$ vim Gemfileで編集できる状態にした上で

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

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

gem "rails"
```
（railsのコメントを外すだけです）

# ⑤Railsのインストール

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

# ⑥Railsアプリを生成
ここまでで準備が整ったので、アプリを作っていきます！

```ruby:ターミナル
$ bundle exec rails new . -B -d mysql --skip-turbolinks --skip-test
```
注１）bundle execを必ず先頭につけること！
注２）.（ドット）をつけることで現在のディレクトリにRailsアプリを生成できます。

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

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

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

```ruby:ターミナル
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin https://github.com/githubアカウント名/アプリ名.git
$ git push -u origin master
```
これでWebアプリの土台が出来上がりました！
次はデータベースの作成です。


# ⑨データベースの作成
まずはmysql@5.7を立ち上げて、
mysql --user=root --password　を実行。
中に入って、まだアプリが入っていないことを確認。
※下記エラーが発生して中に入れない場合・・・一度mysqlを閉じて、ps -ef | grep mysqlを実行。

```ruby:エラーメッセージ
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES
```

```ruby:ターミナル
$ ps -ef | grep mysql
```
すると、3つのプロセスが走っていたのでこれらを全てkillする。

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

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

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

```ruby:ターミナル
$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl@1.1/include"
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl@1.1/lib"
$ bundle install
```

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

▼参考記事

https://qiita.com/fukuda_fu/items/463a39406ce713396403




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




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

# ⑩サーバーを立ち上げる

```ruby:ターミナル
$ bundle exec rails s
```

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

▼参考記事

https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0

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

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

```ruby:ターミナル
$ bundle exec rails s
```


成功！


# ⑪下記の順で実行

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


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

▼参考記事

https://qiita.com/Pirori3182/items/afd1604cb0d206b2e3cc

https://qiita.com/Hal_mai/items/350c400e8763ce0487a3


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

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

```ruby:Gemfile
gem 'devise' #ファイルの一番下に追記
```

```ruby:ターミナル
$ bundle install
```

```ruby:ターミナル

$ 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に対応したコントローラーを作成）

```

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

```ruby:ターミナル
$ bundle exec rails s
```


▼参考記事

https://qiita.com/zaru/items/cde2c46b6126867a1a64

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


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

# ⑬手動でPostsテーブル作成、Postsビュー作成、Postsコントローラー作成まで
▼参考記事

https://cross-accelerate-business-create.com/2020/04/12/rails-g-model/


```ruby:ターミナル

$ 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。

▼参考記事

https://pikawaka.com/rails/migration#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%B8%AD%E3%81%AB%E3%82%AB%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%82%88%E3%81%86



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

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

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


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

▼参考記事

https://www.web-knowledge-info.com/wp/ruby_on_rails3/



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

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

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

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

```
<p>Hello World!</p>
```


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


```ruby:app/controller/post_controller.rb
class PostController < ApplicationController

 def index
 end

end
```

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

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

```ruby:config/route.rb
例
root to: "posts#index"
```

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




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

![スクリーンショット 2021-05-29 16.05.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985164/03ab254e-ce3a-c3f0-591f-6c5392053619.png)


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

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