Rails　CRUD処理実装のアプリを立ち上げ~Git hub管理まで

アプリを作成する度に未だに毎回検索しているのでここの復習も兼ねてまとめます。
プログラミング初心者向けの記事となります。

# 開発環境 
 - `Rails`
 - `Ruby`
 - `git`
 - `Git hub`
# 手順
 - `Rails`でアプリ作成
 - `git`で`ローカルリポジトリ`を作成
 - `Git hub`で`リモートリポジトリ`を作成
 - `ローカルリポジトリ`に`リモートリポジトリ`を追加する
# まずはRailsでアプリを作成
```:ターミナル
rails _6.1.6_ new　アプリ名 -d postgresql -T  
cd アプリ名　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　
rails db:create
```
### コマンドの解説
__Q:なぜ`Rails`のバージョンは`６系`指定？__
A:最新の`Rails`のバージョン`7`はまだ出たばかりで不具合などあり，変更点も多々あるため`６系`最新バージョンを指定しています。

__Q:`-d PostgreSQL`とは__
A: _データベースを指定するコマンドのこと。`Rail`のデータベースは、デフォルト設定では`SQ Lite3` （ライブラリ型）が指定されている。
`SQ Lite3`は簡単なアプリの練習では問題ないが、私の扱っている教材ではポートフォリオ制作としては推奨されていない。
最初のデプロイ先として利用する`Heroku`のデフォルトデータベースシステムが`PostgreSQL`であることを踏まえ，初学者の私は 今回`PostgreSQL`を指定した。_

__Q:`-T`とは__
A: _`--skip-test`の略で`MiniTest`という制作したアプリをテストするためのディレクトリを作成しないオプション。
わざわざ記事に記載することではないのですが、私の復習も兼ねているためあえて記載します。なお、`Rails`でテストを作成するための機能としては`RSpec`を使用するつもりです。_

__Q:rails db:createとは__
A: _データベースを __作成__ するコマンドです。このコマンドを実施することで`config/database.yml`というアプリ内のファイルに基づき、データベースが作成されます。`config/database.yml`はファイルのデータベースファイルの保存場所（`MySQL` `PostgreSQL`など）とファイル名を指定するものです。今回はデフォルトのデータベース`SQ Lite3`ではなく、`PostgreSQL`をしているのでこのコマンドが __必須__ になります。_

## アプリを作成したらローカルリポジトリへ保存する
```:ターミナル
git add .
git commit -m "init"
```
### 解説
__Q:`git add.`とは__
A:_今作業している領域から**一時保存のような領域**へ追加するコマンド
作業内容を細かく一時的に保存することであとで整理しやすくなる。_

__Q:`git commit`とは__
A:_`git add.`で __一時保存内容__ した内容 を __保存領域__ へ引き渡すコマンド
この作業を行うことで`リモートリポジトリ`へ送る準備が整う。_

__Q:`-m "init"`とは__
A: _コミットする際に修正や実装した変更内容を記載するための記入欄。
なお初回のコミットメッセージについて
本来、`git init`という`ローカルリポジトリ`を作成するコマンドがある。`Rails`ではアプリ作成時に自動で`ローカルリポジトリ`を作成するため、このコマンドは不要である。最初のコミットメッセージでは`init`が慣習で用いれられることが多い_

## リモートリポジトリを作成する
具体的な作成方法については単純な作業のため現時点（2022/07/13）では割愛する。
 - `Git hub`でリモートリポジトリを作成し`URL`をコピーしておく
## ローカルリポジトリの内容をリモートリポジトリへ反映する
```:アプリのターミナル
git remote add origin URL名
git push origin HEAD
```
### コマンドの解説
__Q:`git remote add origin`とは__
A:_`ローカルリポジトリ`に指定した`リモートリポジトリ`を追加するコマンド。「`origin`」とは リモートリポジトリのアクセス先に対してGitがデフォルトでつける名前のこと。_
```
origin = https://github.com//rails-board.git 
```
_上記の`origin`とは「起源」を意味し、`Web`上の場所（`URL`）を示していることを表している_

__Q:`git push origin HEAD`とは__
A:_`ローカルリポジトリ`での変更内容（`commit`されたコード）を`リモートリポジトリ`へ共有するコマンド_

## アプリ制作を進めていく前に、、、
本格的に機能を実装する前に、まずはアプリの設定を行なっていきます。
まずは`branch`を切ります。
```
git switch -c feature/settings
```
### コマンドの解説
__Q:`git switch`とは__
A:_ブランチを __切り替える専用__ のコマンド_

https://git-scm.com/docs/git-switch

__Q:`-c`とは__
A:_`-c`は`create`の略で新しいブランチを作成するコマンド。`feature/settings`は私が命名した新しいブランチの名前です。_

__Q:`feature/-------`とは__
A:_新しいブランチ名である。新しいブランチ名は自由に命名できるが、自由すぎると一体どのようなブランチなのか混乱しかねない。そこでチーム開発においてどのようなブランチなのか分かりやすくするために提案された命名ルール`Git-flow`という考え方がある。今回は`Git-flow`に従い、新しい機能を実装する場合のブランチ名は、特徴を意味する`feature`の後に英単語で命名した。_
 
# `.gitignore`の追記
先ほど新しく作成したブランチ(`feature/settings`)の`.gitignore`というファイルに以下のコードを追記していく。

``` :.gitignore
.DS_Store
/vendor/bundle
```
```:.gitignore
# Ignore bundler config.
(bundler の設定を無視する。)
# Ignore all logfiles and tempfiles.
(すべてのログファイルやtempfilesを無視する。)
# Ignore pidfiles, but keep the directory.
(pidfiles は無視するが、ディレクトリは維持する。)
# Ignore uploaded files in development.
(開発中にアップロードされたファイルを無視する。)
# Ignore master key for decrypting credentials and more.
(認証情報を復号化するためのマスターキーなどは無視する。)
```
### 解説
__Q:`.gitignore`とは__
`Git`でコード管理したくないファイルやディレクトリを指定するためのファイルです。
冒頭の「.」は隠しファイルであることを意味している。`ignore`は「無視する」を意味し、`git`+`ignore`で`Git`で無視するリストといった意味になる。

__Q:`.DS_Store`とは__
A:_Macでのみ使用される隠しファイルで、各ファイルに一つずつ存在しそのファイルのデータを表す属性や関連する情報を記述したデータのこと。他人に共有する必要がないファイルなので`.gitignore`に追加するらしい。

__Q:`/vendor/bundle`とは__
以下のコマンドを実行した時に作成されるgemのディレクトリのこと。
```:ターミナル
bundle config set path vendor/bundle --local
 ↓
bundle install
```
上記コマンドを実行するとアプリ内の`/vendor/bundle ディレクト`に全く必要のない大量の`gem`データがインストールされることになる。それらの不要で膨大なデータをGitへpushしないよう`.gitignore`に追加するらしい。

.gitignoreの設定をしてリモートリポジトリにプッシュしてマージする。

ここからアプリ作成に取り掛かっていく。
テーブルの設計を行い
モデルの作成
コントローラーとビューを作成していく