Railsチュートリアル(第6版)　第１章　ゼロからデプロイまで

#はじめに
Railsチュートリアル(第６版)を通じて、Ruby on Railsの学習を記録することで理解度を高めることを目的としています。
また、これからRailsチュートリアルを学ぶ方向けに、できる限り分かりやすく伝えていきたいと思います。

#第１章
Railsチュートリアルを学習する上での前提知識
**必修科目**
・HTML/CSS
・JavaScript
・Sass
・jQuery
・SQL
・Git
・コマンドライン操作

上記の知識に不安がある方は、Progateで学ぶと学習がよりスムーズになります。
(RailsチュートリアルはProgateと提携していて安心！)
また、Railsチュートリアルはボリュームが多く、難易度が高めなので、ProgateのRubyとRuby on Railsは学んでおくと良いです。

##開発環境
環境構築はローカルで構築する方法もあるが、RailsチュートリアルではAWSのCloud9というIDE(統合開発環境)を使用。

Q：IDEって？
A：IDE(Integrated Development Environment)といい、日本語では統合開発環境と呼ぶ。開発に必要なテキストエディア、コンパイラ、デバッガ等をまとめたもの。色々揃ったスーパーマーケットみたいなやつ

今回はRailsチュートリアルに沿って、AWS Cloud9を使います。

##MVCの概念
Q：MVCってなに？
A：Model\-View\-Controllerの頭文字を取ったもの。
　　Model→データベースの対話役。データベースの情報を引っ張ってくる。
　　View→普段見ている画面。所謂Webページ
　　Controller→ViewやModelを繋げる道先案内人。クライアントのリクエストを割り振る。

MVCがまだよくわからなければ、ここでは3役いるんだなくらいで良いと思います。

##hello\_app
環境構築が出来たら、さっそくhello_appの作成
(プログラミングで演習でよくあるHello worldを表示するもの)

***Controllerの設定***


```Ruby:application_controller.rb
 class ApplicationController < ActionController::Base
  def hello
    render html: "hello, world!"
  end
end
```
Controller内には、アクションと呼ばれるものがあります。
```def```から```end```までが一つのアクションです。

***routerの設定***
ルーターはブラウザからのリクエストを各コントローラのアクションに振り分けます。

```Ruby:config/routes.rb
Rails.application.routes.draw do
  root 'application#hello'
end
```
上記の場合、applicationという名前のコントーラーにあるhelloアクションに繋いでくれます。


***rails serverを起動*** 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471120/cad708a0-a715-4b35-c3bc-0e4e73d3fd94.png)

ブラウザで確認したところ、hello,worldと表示されている。


##Gitによるバージョン管理
Q：Gitって？
A：バージョン管理システムの事。いつ誰がどんな変更したかを管理でき、履歴を辿れるので非常に便利

***・初回のシステムセットアップ***
①名前とメールアドレスの設定(リポジトリ上で一般に公開されるので注意)

```Git
$ git config --global user.name "自分の名前"
$ git config --global user.email your.email@example.com
```
②エディタはnanoエディタを設定

```Git
$ sudo ln -sf `which nano` /usr/bin
```

③エイリアスは設定すると便利（```git checkout```と入力するところを```git co```でcheckoutできるようになる）

```Git
$ git config --global alias.co checkout
```

④Gitでパスワードを一定時間保持する設定(下記は1日間)

```Git
$ git config --global credential.helper "cache --timeout=86400"
```


***初回レポジトリ***
①レポジトリの初期化を実行

```Git
$ git init
```

②レポジトリを追加

```Git
$ git add -A
```

`-A`を入れるとディレクトリのファイルが全て追加されるが、`.gitignore`ファイルは追加されない。
また、`add`はステージングに置く行為を指し、コミット前の待機所みたいな場所にある。ステージング状態を知るには、```status```コマンドを使用。

```Git
$ git status
```

③コミット

```Git
$ git commit -m "メッセージ名"
```

-mを入れることで直接メッセージを入れられる。

④log確認

```Git
$ git log
```

git logを実行する事で、コミット履歴を参照できる。

**Gitのメリット**
Q：Gitを使う事の恩恵って？
A：誤って削除したり、元に戻したくなった時に戻せる。

##Github
Q：Githubとは？
A：ソースコードをホスティングして共有できるプラットフォームの事。共同作業とバックアップ作成のためには欠かせない。

→Railsチュートリアルに沿って、Githubのアカウント作成

Githubにレポジトリをpushする

```Git
$ git remote add origin https://github.com/<あなたのGitHubアカウント名>/hello_app.git
$ git push -u origin master
```

**※初めて使う人へ**
初回push時に`username`と`password`を求められる。
`username`は入力すればターミナル上に表示されるが、**`password`は入力しても透明のままである。**しかし、透明ではあるが入力されているので、気にせずGithubのパスワードを入力する。
入力しエンターキーを押せば、Githubにソースコードがアップロードされる。
(筆者は最初pushした時、パスワードが表示されておらず、若干困惑した。入力したら`*****`みたいなのがあったらいい感じだと思う）

##Branch（ブランチ）
Q：ブランチとは
A：元のファイルを触らずに、コードを書いたりできるもの。
  細かく言うと、元のファイルを幹として、そこからBranch(枝分かれ)させることで作業履歴を分岐してあれこれ弄れる。

```Git
$ git checkout -b ブランチ名
Switched to a new branch 'ブランチ名'
$ git branch
  master
* ブランチ名
```

##Commit
Q：Commitとは？
A：変更・追加したファイルをGitに保存してあげる事

コミットを一括で行う方法は下記の通り

```Git
$ git commit -a -m "メッセージ名"
```

`-a`フラグは使うことで一括コミットできる。

##Merge
Q：Mergeとは？
A：Branchによって分岐された履歴を戻して統合すること。元の親レポジトリに上書きする認識

```Git
$ git checkout master
Switched to branch 'master'
$ git merge ブランチ名
```

`merge`のやり方としては、`git checkout master`で`master`に移動し、`git merge ブランチ名`でマージできる。

`merge`ができたら、`git branch -d`を実行し、トピックブランチを削除する。
(トピックブランチを必ず削除する必要はない。masterブランチとトピックブランチを使い分けよう)
また、`git branch -D`を実行するとトピックブランチ上の変更を破棄できる。

##Push
Q：Pushって
A：コミットしたローカルレポジトリをリモートレポジトリにあげること

```Git
$ git remote add origin https://github.com/<あなたのGitHubアカウント名>/hello_app.git
$ git push -u origin master
一度pushしているので下記のコマンドだけでOK(origin masterは省略)
$ git push 
```

##デプロイ
Q：デプロイとは
A：使用可能状態にすること。Deployは、日本語で配備するという意味

Railsチュートリアルでは、Herokuにデプロイすることになっており、Herokuへの登録を済ませておくこと。

クラウドIDE上にHerokuをインストールするコマンド

```
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)
```

インストールが終われば、`heroku --version`コマンドでインストールされているかが分かる。

確認できたら、`heroku login --interactive`コマンドでログインを実行。尚、`--interactive`は`heroku`コマンドでブラウザを開かないようにするためのもの。

そして、`heroku create`コマンドで、Herokuに開発したアプリケーションの実行場所を作成する。

`$ git push heroku master`を実行すればデプロイ終了！

ちなみに、`$ heroku rename アプリケーション名`で名前を変更できる。但し、ネット上(heroku)にアップする名前なので、同一の名前があった際には同じ名前は使用できない。

#第一章終わり
Railsチュートリアル第１章は、AWSやHeroku、Githubの登録が殆どなので人によってはすぐに終わると思います。また、コマンド操作によるセットアップが大半のため、まだプログラミング感は出てきません。
第２章からは、段々とプログラミングしていきます。