Railsチュートリアル 第1章 ゼロからデプロイまで【やってみた】

Railsチュートリアル第1章をやってみて終えたので、やったことや失敗したことを振り返ります。細かく見ていくので、チュートリアルしながらみてもらえれば嬉しいです。

※こちらの記事ではRailsチュートリアル第4版を使用しています。
現在は[Railsチュートリアル第6版](https://railstutorial.jp/webtext)が出ています。
下記リリース時のnote
https://note.com/yasslab/n/n1543187c3ed6?magazine_key=md778735d3f77

ちなみに細かなことですが、読む字体を明朝体かゴシック体に変更することができます。自分はゴシック体にするととても読みやすくなったので、お好みに合わせて変更すると良いかと思います。

また2章で新しいアプリを作るので、この章でデプロイできなくても大丈夫です。

### 1.1.1 前提知識

RailsチュートリアルでProgeteの関連講座を紹介してますが、
これは本当にやった方がいいと感じます。
第1章でコマンドラインとGitコースが紹介されていますが、
「後ででもいけるだろ」と思って結局コマンドのミスで、アプリが作り直しになったりと、大変なことになりました！
始める前にこちらのコースをすることをおすすめします。

### 1.2.1 開発環境

クラウドIDEである、Cloud9をインストールする

### 1.2.2 Railsをインストールする

~~~ruby
    $ printf "install: --no-document \nupdate:  --no-document\n" >> ~/.gemrc
    $ gem install rails -v 5.1.6     # -vでバージョンを指定　
    $ cd ~/environment    # 'environment' ディレクトリに移動する
    $ rails _5.1.6_ new hello_app
~~~

### 1.3.1 Bundler
Gemfile内にあるデフォルトの内容をバージョンを指定して記述、インストールします。

~~~ruby
$ cd hello_app/
$ bundle install
~~~

上手くいかない時は`bundle update`を実行

### 1.3.2 rails sever

~~~ruby
$ cd ~/environment/hello_app/    #hello_appディレクトリへ移動
$ rails server    #サーバーを起動
~~~
rails serverを起動した後は、このターミナル内はリアルタイムで更新されていくので、注意すること。
画面をプレビューするとRailsのぺージが!!Yay!

### 1.3.3 Model-View-Controller


モデル・ビュー・コントローラーがそれぞれ関わっているというお話。

>model: アプリケーションデータ、ビジネスルール、ロジック、関数
view: グラフや図などの任意の情報表現
controller: 入力を受け取りmodelとviewへの命令に変換する
--[Wikipedia](https://ja.wikipedia.org/wiki/Model_View_Controller)より引用

ここで一つの疑問が。
RailsはこのMVCアーキテクチャパターンを採用しているということ。「このパターンを採用している」ということは他のパターンもあるということ...？調べてみました。

・フォームとコントロール
・プレゼンテーション・モデル
・アプリケーション・モデル
・MVVM
・モデル・ビュー・プレゼンタ(MVP)

参考記事　https://www.atmarkit.co.jp/fdotnet/chushin/greatblogentry_10/greatblogentry_10_01.html

内容は上手く理解できなかったけど、MVC以外ももちろんあるよ!ということが分かりました。
構造からもう自由なんだなと思うとプログラミングはすごい
この詳しい内容もまた勉強していきます。

### 1.3.4 Hello,wold!

ビューも通さずHello,world!を表示させるため、以下のようなコードを記述しています。

~~~ruby:titleapp/controllers/application_controller.rb
 def hello
    render html: "hello, world!"
  end
~~~
renderメソッドは`render("フォルダ名"/"ファイル名")`のように使うと思っていましたが、こんな使い方もできるんですね

[Railsガイド 2.2 renderを使用する](https://railsguides.jp/layouts_and_rendering.html#render%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B)
Railsガイドによると最早何でも出力できます、みたいな勢い。

ルーティングを設定してブラウザで表示させます。

### 1.4.1インストールとセットアップ
ここからGitでのバージョン管理ができるようにしていきます。

~~~ruby
$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com
~~~
ここでの名前とメールアドレスは今後一般に公開されるので注意。

リポジトリを作成するため、以下の内容をターミナル内で記述する

~~~ruby
$ git init    #Gitの初期化
$ git add -A    #現在のディレクトリにあるすべてのファイルを追加
#ファイル追加後ステージングされ、コミット待ちになる
$ git status    #現在のステージングの確認
$ git commit -m "Initialize repository"    #リポジトリにコメント付きで反映させる
$ git log    #コミットメッセージの履歴を見る
~~~
いきなりリポジトリとは何だろう？という感じでしたが、こちらを読んだらとても分かりやすかったです。
[【イラストで覚える】初心者のためのGitとGitHub用語集]
(https://zukulog098r.com/git/)


### 1.4.3 Gitbucket
Gitbucketにソースコードをアップデートします。
他の開発者と共同作業できるのが大きなメリットです。

手順の中の、「公開鍵・暗号鍵」ってなんだろう？
とりあえず言われるがまま作ってみたけどよくわかっていないので、調べてみました。

インターネットを経由してデータのやりとりをする上で、情報が盗まれないようにするために暗号化が必要です。
そのために生まれたのが公開鍵暗号方式です。
この鍵はお互いが対応しています。
・公開鍵で暗号化したデータは秘密鍵（暗号鍵）でしかもとに戻せない
・秘密鍵（暗号鍵）で暗号化したデータは公開鍵でしかもとに戻せない


公開鍵は誰でも見れるようになっています。
データを送信する側は公開鍵で情報を取得、暗号化して送信します。
受信側は誰にも見せていない秘密鍵（暗号鍵）で暗号化された情報を元に戻し、見ることができます。
これで第三者に情報を見られることはありません。

このような方式をとっているため、情報のやりとりのために公開鍵を入れることが必要です。

参考記事
https://railstutorial.jp/chapters/beginning?version=5.1#sec-bundler

### 1.4.4 ブランチ、編集、コミット、マージ
  
~~~ruby
$ git checkout -b modify-README    #一時的に使うトピックブランチを作成
$ git branch    #すべてのローカルブランチを確認
$ git commit -a -m "Improve the README file"    #すべてのファイルの変更を一括でコミットする
$ git checkout master    #masterブランチへ移動
$ git merge modify-README    #masterブランチにトピックブランチmodify-READMEをマージ
$ git push    #プッシュする
~~~

### 1.5.1 Herokuのセットアップ

HerokuではPostgreSQLデータベースを使う、とありますが、
PostgreSQLってなんだろう...

>PostgreSQL は、オープンソースのリレーショナル・データベースです。商用データベ>ースに匹敵する本格的な機能と、オープンソースならではの利用の柔軟度が魅力です。
>https://lets.postgresql.jp/map/intro

リレーショナルデータベースは、テーブル型で、関連付けられたデータの集合ということのようです。まだまだ難しい
https://aws.amazon.com/jp/relational-database/

SQLiteを加え、インストールします。

また、Herokuをインストールしてデプロイします。

~~~ruby
$ heroku --version    #Herokuがインストールされているかとバージョンの確認
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)    #HerokuをクラウドIDEにインストール
$ heroku login --interactive
$ heroku keys:add
$ heroku create    #Herokuに新しいアプリケーションを作る
$ git push heroku master    #Herokuにデプロイ
~~~

ここで1章は終わりです。
ログを載せたかったのですが、デプロイが上手くいきませんでした。
後から考えると、ブランチを作り間違えたのと、Herokuは `heroku create`で生成されたアドレスからアクセスする必要があるということをいまいち理解していなかったためだと思います。


長くなってしまいましたが、ここまで読んでいただきありがとうございます。
間違いなどありましたら、教えていただけると嬉しいです。