Railsのプロジェクト作成時の手順をまとめてみる

#はじめに
エンジニアになる為に勉強中。Railsを使ったWEBアプリケーション開発をベースに学習を進めています。
・・・ので、今後よく出くわすであろうRailsでのプロジェクト作成に慣れていきたい！と感じました。
正直、数こなせば自然と体が覚えるだろうと思ってはいるのですが・・・早い段階でまとめておけばメモ代わりになるかなーなんて思って記事投稿してみました（笑

###この記事について
- 環境構築はすでに終わっている前提で書いていこうと思っています。
- プログラミング初学者の記事です。記事の中に認識が誤っている部分があるかもしれません（汗
- 上記理由から、同じく経験が浅い方はあまり参考にしないことをお勧めします！

##プロジェクトの雛形〜rails sでローカルサーバー立ち上げまで
###プロジェクトの雛形作成をしよう
まずは、プロジェクト作成の場所を決めます。
デスクトップに「projects」というディレクトリを作るもよし、ホームディレクトリ（家のアイコン）の配下に「projects」というディレクトリも作るもよし。
作ったら、ターミナルを起動して、"cd"コマンドを駆使して「projects」フォルダまで移動。

```
#コマンド
　ユーザ名 $rails new アプリケーション名 -オプション名

#Railsのバージョンを指定したいならこっち
　ユーザ名$ rails _○.○.○_ new アプリケーション名 -オプション名
```
　・アプリケーション名：これから作りたいプロジェクトの名前
　・オプション名:　mysqlの環境設定をするなら、`-d mysql` 

オプション名については、他にも`-skip-turbolinks`（ajaxで取得したhtmlでbodyを入れ変えてページ遷移できようになるとか・・・）とか色々あるっぽいけど、今の知識じゃ「貴様にはまだ早い。」状態なので深追いはやめます（苦笑

ところで・・・railsって、今現在どのバージョンが使用率高いんですかね？
調べてみたもののRailsが下火になっているっていう悲しい情報ばかり出てくる・・・。


###Bundle installをしよう
####・・・の、前に準備
アプリ作成時に必要となるライブラリなどをインストールする必要があるので、bundle installを実行したい。
・・・けど、その前に手動で追加が必要なgemも合わせてインストールすると楽かも。
>①rails newで作ったプロジェクトを適当なエディターで開く
②app/Gemfileに必要であろうgemを記載！

```
#app/Gemfile/の末尾に以下の追記
　gem 'pry-rails'
　gem 'devise'
```

だいたいマストなのがこの子たち。
`pry-rails`
　デバッグをする時にあると便利
　（と言っても僕はbinding.pryくらいしか使った事ないけど・・・）
`devise`
　ユーザー登録するのなら必須。色々いい感じにやってくれるありがたい存在！
　（本当は仕組みも気になるから自力で実装してみたい）

####念願のbundle install
ターミナルに戻って、作成したプロジェクトのフォルダまでcdしまくる。
pwdコマンドを入力して、今いるディレクトリが間違っていないか確認！（これ大事）
ここでBundle installのコマンド入力

```
#コマンド
　ユーザ名$ bundle install
```
**Bundle complete!**　の文字が出てたら成功。
エラーが出たら、表示されたエラーメッセージをもとに大人しくググろう。

###deviseはもう一手間必要！（追記）
deviseについては、`bundle install`に**加えてもうdevise専用のコマンドも実行する必要あり。**

```
#コマンド
 ユーザ名$ rails g devise:install
```
deviseのgemを使ってログイン機能周りを実装する場合は、devise専用のコマンドでモデルとビューを作る必要があるので、注意！

```
#コマンド
▼モデル作成
　ユーザ名$ rails g devise user
　※↑やったら $ rails db:migrate もわすれずに！

▼ビュー作成
　ユーザ名$ rails g devise:views
```

###DataBaseを作ろう
アプリに紐づくDBを作成する。
これがないとこの先に出てくる`rails s`がうまく機能しない！（と思う）
まずは、pwdで作ったプロジェクトのディレクトリ内にいることを確認。
そんでもって以下コマンドを実行

```
#コマンド
　$ rails db:create
```

**Created database 'our_blog_development'
Created database 'our_blog_test'**
これが表示されていれば作成完了！

###ローカルサーバーを立ち上げよう
これもまたpwdして、作ったプロジェクトのディレクトリ内にいることを確認してから実行。
※違うプロジェクトの中で実行すると別のプロジェクト用のサーバーが立ち上がってしまうから間違えないように。

```
#コマンド
　ユーザ名& rails s

#成功したら以下の文章が表示される（他にもだらだらと出力されている）
　Use Ctrl-C to stop
　Started GET "/"for・・・ごにょごにょ
```
上にも書いてある通り、rails sで起動したサーバーを止める時は、`Ctrl + C`でOK。
bundle updateとかする時には一度サーバーを止めた方がいいかも。

あと、サーバーはしょっちゅう`立ち上げる→停止する`をやるので、サーバー管理用でターミナルをもう一つ用意しておくと楽！

####localhost:3000にアクセスする
`rails s`してサーバー起動中に、http://localhost:3000 へアクセス!
下の画面が出てれば、最低限の準備が完了！

<img width="896" alt="スクリーンショット 2020-03-07 13.50.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593458/467e0d85-dd6f-43d3-f3b5-f9fe7e9e6fd4.png">

##MVCの準備
###ルーティングにルートパスを設定しよう
http://localhost:3000
↑にアクセスした時にindex.htmlを表示できるようにルーティングパスをまず記入する。

```app/config/routes.rb
Rails.application.routes.draw do
 root to: 'コントローラー名#アクション名'
end
```
　`コントローラ名`にはこれから作成したいコントローラ名を指定
　`アクション名`には指定したコントローラー内に書かれているアクションを指定
　今回はルートパスだし、7つのアクションのうちの`index`にするのが主流かも。

これで、localhost:3000へアクセスした時
**「〇〇っていうコントローラーの××のアクションに記載された処理を実行しまっせ」**
となる。

じゃあ、次は、コントローラーを作成！

###コントローラーの作成をしよう
一旦、ターミナルに戻る。
お決まりのpwdコマンドで、今いる場所を確認してから、コントローラー作成のコマンドを実行！

```
#コマンド
 ユーザ名$ rails g controller 作成したいコントローラー名
```
コントローラ名は**複数形にしておくといい**っぽい！

###作成したコントローラーにindexアクションを記述しよう

```app/controllers/決めたコントーラ名_controller.rb
class コントローラ名Controller < ApplicationController
 def index
 end
end
```
今はindexが表示できればそれでいいので、indexアクションには特になにも記述しない。
※作ったコントローラーは ApplicationControllerっていうクラスを継承しているみたい。

はい。次はモデルの作成！

###モデルを作成しよう
モデルは、DBとのやりとりを色々受け持ってくれる橋渡しキャラ。
一つのモデルに対して、一つのDBしか紐づかないぞ！

```
#コマンド
　ユーザ名$ rails g model モデル名
```
（これもpwdでディレクトリ間違ってないかしっかり確認してから実行！）

モデル名は、さっき作ったコントローラ名の単数形にしたものにしておこう！
コントローラとモデルの紐付きがわかりやすくなるから。
例えば、`messages`というコントローラーを作ったら、それに対応するモデル名は`message`にするとよし！

###マイグレーションファイルを確認しよう
モデルを作ると、マイグレーションファイルも同時にできる！
これは、DBを作る時の設計図的なものなので、必要なカラムとか、キーの制約とかを用途に合わせて追記してあげよう！

```/db/migrate/20xxxxxxxxxxxx_create_messages.rb
class CreateMessages < ActiveRecord::Migration[5.2]
  def change
    create_table :posts do |t|
     #--ここに追加したいカラムを記載--
      t.string :coment
     #--↑こんな感じに、データ型とカラム名を書いてあげる--
      t.timestamps
    end
  end
end
```

書き終わったらマイグレートしよう！

###マイグレートして、テーブルを作成しよう
マイグレーションファイルの修正が終わったら、またターミナルに戻って、コマンド入力！

```
#コマンド
 ユーザ名 $ rails db:migrate
```
これをして初めてテーブルが出来上がる！
**※今後カラムを追加したり削除する時はまた新たにマイグレーションファイルを作る必要がある！**
今あるファイルを修正してもエラーの原因になるだけなので、間違って触らないように！

##ビューを作成して最低限の準備を完了させる！
###コントローラに紐づいたビューを作成しよう！

viewファイルは勝手に作ってくれません！・・・ので、自力で準備が必要です！
と、いうことで、一旦仮置きで空のファイルを格納する必要があります！

適当なテキストエディタ（AtomでもVSCでも）で、作成したプロジェクトを開いてあげましょう！
現段階で↓のディレクトリがこんな感じ担っていると思います！

```
/プロジェクト名/app/views/
　└　layouts/
　└　作成したアクションコントローラーのフォルダ/
```

この`作成したアクションコントローラーのフォルダ`内に「index.html.erb」を作成しよう！

```
/プロジェクト名/app/views/
　└　layouts/
　└　作成したコントローラーのフォルダ/
　　　└　index.html.erb　←作成する
```

せっかくなので、`index.html.erb`に以下の一文でも入力しておきましょう！

```app/views/layouts/コントローラーと同じ名前のフォルダ/index.html.erb
Hello Rails!
```


###最後に動作確認をしよう
↓にアクセス！
http://localhost:3000

<img width="382" alt="スクリーンショット 2020-03-07 14.46.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593458/370cebb0-e1d8-5ab6-4271-40b90cd044f2.png">
↑この画面が出れば疎通確認OK!

あとは必要に応じてHTML/CSS(Haml,Sassとかでも)を記述して頑張ってWEBアプリケーションを作っていこう！（丸投げ）

ここからが一番しんどい！でも頑張っていきましょう！


##最後に
あくまで自分の作業用メモと思って書いてます。
が・・・途中から誰かに伝えるような記述に変わってますね。
Railsにまだ慣れていない人間が書いているので、鵜呑みにしないようにしてください！
加えて、経験豊富な方で「これ、違うよ」「こっちの方が便利だよ」などがあればコメント頂けますと幸いです！