(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【第1章】


##前提
・Railsチュートリアルは第4版
・今回の学習は3周目（9章以降は2周目）
・著者はProgate一通りやったぐらいの初学者
##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる（記事最下段・用語集）。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

　
ではゴーゴー。　
##全体の流れ
第1章では、最初の「hello_app」を作成〜Gitを使ってバージョン管理〜本番環境にデプロイまで実施。
第2章では、scaffoldを使ってコードを自動生成し、「toy_app」を作成。
第3章から最後の14章まで、twitter風の「sample_app」をゼロから作成します。

チュートリアルとはいえ、前提となるプログラミング関連の知識が全くない状態では厳しいので、[Progate](https://prog-8.com/)の関連するコースはやっておこう（有料）。

［Railsチュートリアルと関連しているProgateのコース］
・第1章
　コマンドライン
　Git
・第4章
　Ruby
・第5章
　HTML & CSS
　Sass
・第14章
　jQuery
　JavaScript
　SQL
　Railsの基礎
　Ruby on Rails

（ここでSassコースやってないことに気づく。第5章始める前にやります。）

　
####【1.1.1　前提知識　演習】
1.　Ruby on Railsで使うRuby gemはどのWebサイトにありますか？ヒント: 分からないときはとにかくググりましょう。
→　[ググった結果](https://rubygems.org/)

2.　現時点でのRailsの最新バージョンはいくつですか？
→　6.0.3.2　(2020/6/17付)

3.　Ruby on Railsはこれまでに何回ダウンロードされたでしょうか？調べてみてください。
→　[累計ダウンロード回数：239,792,613 (2020/8/31時点)](https://rubygems.org/gems/rails?locale=ja)

　
####【1.3.2　rails server　演習】
1.　デフォルトのRailsページに表示されているものと比べて、今の自分のコンピュータにあるRubyのバージョンはいくつになっていますか? コマンドラインでruby -vを実行することで簡単に確認できます。
→　Cloud9上で実行

```
$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
```

2.　同様にして、Railsのバージョンも調べてみましょう。調べたバージョンはリスト 1.1でインストールしたバージョンと一致しているでしょうか?
→　一致している。

```
$ rails -v
Rails 5.1.6
```

　
####【1.3.4　Hello, world!　演習】
1.　リスト 1.7のhelloアクションを書き換え、「hello, world!」の代わりに「hola, mundo!」と表示されるようにしてみましょう。
→　application_controllerのhelloメソッドの中身を"hola, mundo!"に書き換える

2.　Railsでは「非ASCII文字」もサポートされています。「¡Hola, mundo!」にはスペイン語特有の逆さ感嘆符「¡」が含まれています。「¡」文字をMacで表示するには、Optionキーを押しながら1キーを押します。この文字をコピーして自分のエディタに貼り付ける方が早いかもしれません。
→　上記に ¡ を追記

3.　リスト 1.7のhelloアクションを参考にして、２つ目のアクションgoodbyeを追加しましょう。このアクションは、「goodbye, world!」というテキストを表示します。リスト 1.9のルーティングを編集して、ルートルーティングの割り当て先をhelloアクションからgoodbyeアクションに変更します。
→　下記

```rb:routes.rb
Rails.application.routes.draw do
  root 'application#goodbye'
end
```

```rb:application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  
  def hello
    render html: "¡hola, mundo!"
  end
  
  def goodbye
    render html: "goodbye, world!"
  end
end
```

　
####【1.4.3　Bitbucket】
チュートリアル第4版ではリポートリポジトリにBitbucketを使用していますが、GitHubの方が一般的な気がするのでチャレンジしてみます。
・・・・・・

難なくGitHubにプッシュできました。(その後、プッシュする中で公開鍵の登録に少し手こずったけど)
![隠し.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680946/3787f5e7-8fbb-61fe-aa13-036495cc5720.png)

　
####【1.5.3.　Herokuにデプロイする（２）　演習】
1.　1.3.4.1と同じ変更を行い、本番アプリでも「hola, mundo!」を表示できるようにしてください。
→　さっきの演習からルーティングのアクションをhelloに戻し、アプリケーションコントローラーのrenderもhola, mundo!に修正。再度コミット→リモートリポジトリへプッシュ→herokuへデプロイ。

2.　1.3.4.1と同様、ルートへのルーティングを変更してgoodbyeアクションの結果が表示されるようにしてください。またデプロイ時には、Git pushのmasterをあえて省略し、git push herokuでデプロイできることを確認してみてください。
→さっき（1.3.4）の演習やってたから結果表示済み。演習1で変更しちゃったので、めんどくさいから省略。

　
####【1.5.4.　Herokuコマンド　演習】
1.　heroku helpコマンドを実行し、Herokuコマンドの一覧を表示してみてください。Herokuアプリのログを表示するコマンドはどれですか?
→　heroku logs

2.　上の演習で見つけたコマンドを使って、Herokuアプリの最近のログ (log) を調べてみましょう。直近に発生したイベントは何でしたか? (このログを調べるコマンドを覚えておくと、本番環境の不具合を見つけるときに役立ちます)
→　app[api]: Build succeededかな？


###第1章まとめ
・とりあえずrouteのrootとアクションを設定して、Hello,world!
・Gitでバージョン管理。リモートリポジトリは、チュートリアル第4版では使用していないGitHubを使用。
・ローカル→リモート→Herokuへデプロイ！
・データベースは、開発環境ではsqlite3、本番環境ではPostgreSQLを使用。

　
⇨　[第2章へ！](https://qiita.com/t-kawamura1/items/eefe0aafc09be3f9327a)
[学習にあたっての前提・著者ステータスはこちら](https://qiita.com/t-kawamura1/items/9c955177c02871b5249c)
　
####なんとなくイメージを掴む用語集
・デプロイ（deploy）
　Webアプリ等のシステムを外部から利用可能な状態にすること。開発環境→ステージング環境、ステージング環境→本番環境へシステムを反映させること。

・ステージング環境
　システムを公開する前に、動作や表示などについて最終的な確認を行う段階。

・コミット(commit)
　ディレクトリの変更履歴をローカルリポジトリ（作業環境：自分のPC）に保存すること。

・プッシュ(push)
　コミットしたデータをローカルリポジトリからリモートリポジトリ（GitHub,Bitbucket等）にアップすること。

・マージ(merge)
　日本語で「融合させる」とかの意味。つまりmasterブランチに、変更を加えたトピックブランチを融合させること。トピックブランチの削除は任意。