Rails Tutorial 第1章学習編

#Rails Tutorial 第一章で(。´・ω・)ん?って思ったところ

#####Cloud9のユーザー登録

>Cloud9は現在Amazon Web Services (AWS) に統合されたため、Cloud9を使うためにはAWSアカウントが必要になります。AWSアカウントを既にお持ちの場合は、AWSにログインしてください。AWSコンソールに行き、検索ボックスから “Cloud9” と入力すると、Cloud9の開発環境を作成するためのページに行けます。
Amazon Web Services (AWS) アカウントを持っていない場合は、AWS Cloud9のユーザー登録をします。悪用防止のためクレジットカード情報の入力が必須になりましたが、Railsチュートリアルのワークスペースは１年間無料なのでご安心ください。アカウントが有効になるまで最大で24時間かかりますが、著者の場合は約10分ほどで完了しました。
Cloud9の管理ページ (図 1.4) に無事たどり着いたら “Create environment” をクリックし、図 1.5のような画面になるまで進めてください。情報を適宜入力して、確認ボタンを押して進めていくと、最終的にCloud9の開発環境を手に入れることができます (図 1.6)。このとき “root” ユーザーであるという警告メッセージが表示されるときがありますが、こちらの対処方法は後ほど説明します (IAMという機能を使った対応方法について13.4.4で説明します)。
引用：https://railstutorial.jp/chapters/beginning?version=5.1#sec-development_environment

これじゃわかんねーよって感じだったので[Youtube上にあったcloud9の登録方法説明動画](https://www.youtube.com/watch?v=RWP7hhdJU9Q)を参考にしました。

AWS Cloud9の登録にはクレジットカードが必須
あんまりいないと思うけどクレカ作れない人向け(´-ω-`)
[住信SBIネット銀行](https://www.netbk.co.jp/contents/lineup/debitcard/)で口座開設すれば貰えるデビットカードで代用できます('ω')ノ

#####コマンドでどうやってファイル開けばいいの？ を解決

```
#Rails tutorialには便利なc9をインストール('ω')ノ
#c9 <ファイル名> でファイルを開けるよ。
npm install -g c9
```

#####このコマンド何してるの？　その１

```terminal
Rubyのインストールで無駄な時間を使わないようにするために追記
$ echo "gem: --no-document" >> ~/.gemrc

UNIXコマンドの処理内容
echo "gem: --no-document" ("gem: --no-documentを)
>> (末尾に追記してね。)
~/.gemrcファイル (ホームディレクトリの下にある~/.gemrcというファイルに)
```

#####このコマンド何してるの？　その２

```terminal
JavaScriptソフトウェアの依存関係を管理するYarnをインストール
$ source <(curl -sL https://cdn.learnenough.com/yarn_install)

UNIXコマンドの処理内容
source　ファイルに書かれたコマンドを現在のシェルで実行するコマンド
<() : プロセス置換(コマンドの出力結果をファイルとして扱う機能)

curl -sL https://cdn.learnenough.com/yarn_install
curl [http://対象のURL]  HTTPリクエストを実施し結果を標準出力へ
-s -- 余計な出力をしない
-L -- リダイレクトがあったらリダイレクト先の情報を取る

yarn_installファイルの中身です。
#!/bin/bash

# Installs YARN on AWS Cloud9 Ubuntu Server.
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get -y update && sudo apt-get -y install yarn

やっと全貌が見えました！　以下のコマンドを実行してるんですね・・・！
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get -y update && sudo apt-get -y install yarn
```

>curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get -y update && sudo apt-get -y install yarn

これって・・・なんでしょう？
[自分のプラットフォームに合ったYarnインストール手順（英語）](https://classic.yarnpkg.com/en/docs/install/#debian-stable)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/808789/fb9f65b9-46cf-8a72-732d-f8510d57f4e7.png)

>curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get -y update && sudo apt-get -y install yarn

JavaScriptソフトウェアの依存関係を管理するYarnをインストールする為のコマンドって事だった。

#####このコマンド何してるの？　その３

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

UNIXコマンドの処理内容
sudo 管理者で実行
ln -sf シンボリックリンク(ショートカット)を作成

/usr/binという場所に飛ぶwhich nanoという名前のショートカットを作成？
```
>クラウドIDEを使う場合は、次にGitで使うデフォルトのエディタを設定します（編集や、“amend”でプロジェクトを変更するのに使われます）。ここでは、比較的使いやすくクラウドIDEのデフォルトエディタでもあるnanoエディタを使うことにしましょう。この設定を書き込んでもログアウト時にデフォルトエディタはログアウトしてしまいますし、パスも正しくないので、を実行してシンボリックリンク（symlinkとも呼ばれます）を作成してnanoの実行ファイルを正しく指すようにしましょう （初心者には少々難しいので、今読んで理解できなくても心配は不要です）。

(。´・ω・)ん?　でどうすりゃいいの？　まぁ飛ばすか（　＾ω＾）・・・。

#####Rails Tutorialで使用するデータベースソフト(SQL)について

cloud9(開発環境)ではsqliteを使用。
HerokuではPostgreSQLを使用。
開発環境と本番環境は同じSQLを使う事が推奨。

なんで違うの使っているだろう学習の為なのかな？(´-ω-`)分からない。

>Amazon RDS での AWS 無料利用枠
DB インスタンスを各月で連続して実行するのに十分な、MySQL、MariaDB、PostgreSQL、Oracle BYOL、または SQL Server (SQL Server Express Edition) などを使う Amazon RDS の Single-AZ db.t2.micro インスタンスのための、750 時間という使用時間
Oracle BYOL db.t3.micro Single-AZ インスタンスの使用は、Amazon RDS の無料利用枠に含まれています。Oracle BYOL の上で、db.t2.micro Single-AZ と db.t3.micro Single-AZ のインスタンスを両方実行する場合、その使用量はインスタンスクラス全体で合計されます。
20 GB の汎用 (SSD) DB ストレージ*
自動データベースバックアップとユーザーによる任意の DB スナップショットに使用できる 20 GB のバックアップストレージ*

PostgreSQL使えるのに・・・なんでだろう。。。

#Railsインストール関連
```terminal
Railsをインストール　RubyGemsが提供するgemコマンドを使う。
gem install rails -v 6.0.3
gem install [アプリ] -v [バージョン指定]
```

```terminal
#Railsで空のテンプレート作成コマンド
rails _6.0.3_ new hello_app
rails _[version]_ new [アプリ名]
```



```Gemfile.はインストールするライブラリ(部品)を記述するファイル
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.3'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 6.0.3'
# Use sqlite3 as the database for Active Record
gem 'sqlite3', '~> 1.4'
# Use Puma as the app server
gem 'puma', '~> 3.11'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5'
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'webpacker', '~> 4.0'
# Turbolinks makes navigating your web application faster.
# Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Active Storage variant
# gem 'image_processing', '~> 1.2'

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.2', require: false

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a
  # debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  # Access an interactive console on exception pages or by calling 'console'
  # anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the
  # background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  # Easy installation and use of web drivers to run system tests with browsers
  gem 'webdrivers'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
```

```terminal
#Gemfileの中に記載されてるライブラリを一括インストールするコマンド
bundle install

#インストールしたライブラリに依存関係で問題が発生した場合に使うコマンド
bundle update
```

```
#Railsサーバーの立ち上げコマンド
rails server
rails s　#(省略形) ←　こっちの方がよく使う
```

```rb　config/environments/development.rb

Rails.application.configure do
  .
  .
  .
  # Cloud9 への接続を許可する
  config.hosts.clear ←これ追記しないとRailsサーバーへのアクセスで弾かれる
end
```

##Git関連
<b> Gitはソースコードを管理する便利なアプリ
Githubはインターネット上にソースコードを保管する場所を提供してくれるサービス


```terminal
# Gitで使う名前の設定とメールアドレス設定
# ※Gitに設定する名前やメールアドレスは、今後リポジトリ上で一般に公開されるので注意

$ git config --global user.name "名前"
$ git config --global user.email メールアドレス

# checkoutコマンドをcoに省略できるようにする。
$ git config --global alias.co checkout

# git pushする時にパスワード要求される時間を変える　毎回パスワード打つのめんどさを軽減
$ git config --global credential.helper "cache --timeout=86400"

# リポジトリ(保存箱)を作るコマンド
$ git init

# 一時保存箱にファイルを入れるコマンド　-A は変更(新規・追加・削除)があったファイルを全て追加という意味
$ git add -A

# 一時保存箱にメモを付けて保存箱へ移すコマンド -m "メッセージ" でメモを書ける
$ git commit -m "Initialize repository"

# インターネット上にある自分のソースコード置き場をoriginという名前で登録
$ git remote add origin https://github.com/<あなたのGitHubアカウント名>/hello_app.git

# 自分のアップロード
$ git push -u origin master

# 変更があるかを確認できる
$ git status

# 過去にcommitした内容を確認
$ git log
```
##Heroku関連
<b>Herokuはインターネット上でアプリを公開させてくれるサービス(５個まで無料) 
ソースコードのバージョン管理にGitを使っていれば、Railsアプリケーションを簡単に公開できる

開発環境と本番環境で環境が違うのでそれに合わせてインストールするライブラリを変更する必要がある。
cloud9(開発・テスト環境) = sqlite3　Heroku(本番環境) = PostgreSQL

```ruby.Gemfile
source 'https://rubygems.org'　
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem 'rails',      '6.0.3'
gem 'puma',       '4.3.4'
gem 'sass-rails', '5.1.0'
gem 'webpacker',  '4.0.7'
gem 'turbolinks', '5.2.0'
gem 'jbuilder',   '2.9.1'
gem 'bootsnap',   '1.4.5', require: false

#ここから上は全て共通でインストールするんだと思う('ω')ノ

#開発環境とテスト環境のみインストール
group :development, :test do　
  gem 'sqlite3', '1.4.1'
  gem 'byebug',  '11.0.1', platforms: [:mri, :mingw, :x64_mingw]
end

#開発環境のみインストール
group :development do　
  gem 'web-console',           '4.0.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.1.0'
  gem 'spring-watcher-listen', '2.0.1'
end

#テスト環境のみインストール
group :test do　
  gem 'capybara',           '3.28.0'
  gem 'selenium-webdriver', '3.142.4'
  gem 'webdrivers',         '4.1.2'
end

#本番環境のみインストール
group :production do　
  gem 'pg', '1.1.4'　
end

# Windows ではタイムゾーン情報用の tzinfo-data gem を含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
```

```terminal
#本番用以外のgemをインストールする
$ bundle install --without production
```
>pg gemを追加したことやRubyバージョンを指定したことをGemfile.lockに反映させないと、
本番環境へのデプロイで失敗してしまうためです。

```terminal
#herokuコマンドのインストール
source <(curl -sL https://cdn.learnenough.com/heroku_install)

実行してる中身のコマンドはこれ！
curl -OL https://cli-assets.heroku.com/heroku-linux-x64.tar.gz
tar zxf heroku-linux-x64.tar.gz && rm -f heroku-linux-x64.tar.gz
sudo mv heroku /usr/local
echo 'PATH=/usr/local/heroku/bin:$PATH' >> $HOME/.profile
source $HOME/.profile > /dev/null
```

```
# herokuにログインする (--interactiveオプションを使うとブラウザをかずにログインできる)
$ heroku login --interactive

# Herokuに新しいアプリケーションを作成する (gitのソースコードを解析して適切なサーバーを用意)
$ heroku create　

# ソースコードをアップロードする　これでネット上に自分の作ったサービスが公開される。 
$ git push heroku master
```

#感想
Cloud9・Git・Herokuを使ってHello Worldだけど公開サービスができた！
アプリ開発だけで終わる本が多い中でサービスを公開まで1章で出来るって本当にすごいと思う。
今回のアウトプットでUNIXコマンドで躓いていただなぁっと調べて少し謎が解けた。
UNIXコマンド・・・(゜-゜)　事前学習読んだんだけどな
source 、(プロセス置換) <()、curl、 In こんなん書いてあったっけ・・・。　

まぁいいや、さぁ　2章も張り切って頑張るぞー( ｀ー´)ノ