Railsチュートリアルで学んだこと ～第1章～

# はじめに
アウトップットの一環として学んだことを書き、知識の定着や見返したときにどれくらい成長したかを確認するために本記事を書いています。
学習を進めていく上で詰まったところやその解決策、新しく知ったことを書いていこうと思います。

Railsチュートリアルは[こちら](https://railstutorial.jp/)から

間違った解釈や、誤字脱字がある場合もあります。
その際はコメント等で教えていただけると幸いです。

# 学習前の知識(チュートリアルで利用する技術)
- HTML/CSS
 - [Progate](https://prog-8.com/)や[ドットインストール](https://dotinstall.com/)、書籍で勉強した程度。
調べながらであればできるレベル。
- JavaScript
 - [ドットインストール](https://dotinstall.com/lessons/basic_javascript_v3)の入門レベル。
- Ruby
 - 書籍での学習のみ。
- Rails
 - [Coffee-Cup](https://www.coffee-cup.com/)の基礎編をやり終えた程度の知識。
- Git
 - add、commit、pushのみ知っていたが、実際に使ったことはない。
- SQL
 - 基本構文は知っているが、実際に使ったことはない。

# 開発環境
チュートリアルでは、Cloud9を利用して開発していますが、私はローカル環境を構築して勉強しています。
構築はドットインストールの[ローカル環境構築](https://dotinstall.com/lessons/basic_localdev_win_v2)を参考にしました。(多少変更している点もあります。)

OS:CentOS
Ruby:2.5.3
Rails:5.2.2
Git:2.20.1
Heroku:heroku/7.19.4 linux-x64 node-v11.3.0

# Gitによるバージョン管理
アプリケーションのソースコードを管理する。
以前のバージョンに戻ったり、間違えて消してしまったファイルを復旧したりと様々な目的がある。

## gitの設定

```
$ git config --global user.name "name"
$ git config --glabal user.email email
```

## ローカルリポジトリ
ローカルリポジトリは自分のパソコン内の作業場所のようなものです。
複数人で開発する場合は後述のリモートリポジトリにプッシュします。

### リポジトリの初期化

```
# 管理したいプロジェクトのルートファイルで
$ git init
```

### ステージングエリアへファイルを追加

```
# Aオプションをつけると全てのファイルを追加できる
$ git add -A
```

### ステージングエリアの状況を確認

```
$ git status
```

### ステージングエリアにある変更したファイルをリポジトリに追加

```
# -mオプションで以降にコミットメッセージを書ける
$ git commit -m "message"

```

### コミットメッセージの履歴を確認

```
$ git log
```

### 直前のコミットの状態に戻す

```
# -fオプションは強制的に実行させる
$ git checkout -f
```

##リモートリポジトリ
今回はチュートリアルに従ってBitbucketを利用します。
他にもGitHubやGitLabもあるそうです。

一人で開発する場合はリモートリポジトリは必須ではないようですね。

### SSH公開鍵の作成(すでにある場合はスキップ)
[こちら](https://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-SSH-%E5%85%AC%E9%96%8B%E9%8D%B5%E3%81%AE%E4%BD%9C%E6%88%90)を参考に公開鍵を作成します。

```
$ cd ~/.ssh

# SSHキー作成
$ ssh-keygen

# SSH公開鍵を確認
$ cat ~/.ssh/id_rsa.pub
```

作成後、アカウントにSSH公開鍵を追加します。
### リモートリポジトリへ追加とプッシュ

```
$ git remote add origin git@Bitbucket.org:ユーザーネーム/リポジトリ名.git

# ローカルのリポジトリをリモートリポジトリにプッシュ
$ git push -u origin --all
```

## ブランチ
ブランチを分けることで、運用中のアプリに影響を与えずに開発をすることができます。

### トピックブランチの作成

```
$ git checkout -b ブランチ名

# 現在のブランチを確認
$ git branch
  master
* ブランチ名
```

## マージ
各ブランチで変更したファイルをマスターブランチへ反映させます。

```
# masterブランチに切り替える
$ git checkout master

$ git merge ブランチ名
```

### ブランチの削除(任意)

```
$ git branch -d ブランチ名
```

# デプロイ
Herokuを使いデプロイをします。

### Heroku用のGemfileに変更
HerokuではPostgreSQLを利用するようなのでGemfileを書き直します。

```Gemfile.
~~~ 省略 ~~~

# SQlite3が本番環境にインストールされないよう、開発環境のみで使うように変更する
group :development, :test do
  gem 'sqlite3'  # 追加(元あったものは削除)
end

# PostgreSQLを本番環境で使うようにする
group :production do
  gem 'pg'
end
~~~ 省略 ~~~
```

変更後以下のコマンドを実行します。

```
$ bundle install --without production
```

### Herokuのインストールと設定
チュートリアルに書いてあるコマンドを実行すると使えるようにはなったのですが、再度仮想環境を起動させるとherokuコマンドが使えなくなっていたので、[こちら](https://qiita.com/teruo-oshida/items/54f46b91590a3497949e)の記事を参考にインストールしたところ、問題が解決しました。

インストール後、ログインとSSHキーを追加します。

```
# ログインする
$ heroku login

# 私の場合上記のコマンドでログインができなかったので次のコマンドを使いました。
$ heroku login --interactive

# SSHキー追加
heroku keys:add
```

### Herokuにデプロイ

```
# Herokuサーバーにアプリの実行場所を作成
$ heroku create

# Herokuにリポジトリをプッシュ
$ git push heroku master
```

# まとめ
1章ではRubyやRailsに関しては、新しく知ったという事はありませんでした。
対してGitやHerokuといった、どのような開発にも必要な知識(特にGit)を知ることができました。
まだまだ使いこなせているわけではありませんが、チュートリアルを進めながら言語以外の知識も身につけられるようにしていこうと思います。