【自己学習】Railsチュートリアル第一章

##[Rails]Railsチュートリアル第一章から始める

改めて`Railsチュートリアル`を学習したいと思いたっため学習する。


Railsチュートリアル
https://railstutorial.jp/chapters/beginning?version=5.1

最終的には「Rails 5 技術者認定ベーシック試験」を取得する。
そのため定期的に自作の問題を作成して理解度を高める。

使用環境は以下で行う

```
Rails 5.1.6
Ruby 2.3.0
```

AWS cloud9は使用せず実装する。

### 1.Railsプロジェクトで使うenvironmentディレクトリを作成する

```
$ cd                  # ホームディレクトリに移動する
$ mkdir environment     # 'environment' ディレクトリを作成する
$ cd environment/       # 'environment' ディレクトリに移動する
```
※基本的なunixコマンドは省略

### 2.rails newを実行する (バージョン番号を指定して新規プロジェクト作成)

```
$ cd ~/environment
$ rails _5.1.6_ new hello_app
```

ちなみに初めから別のRailsバージョンが入っている場合は、gemでエラーが発生する場合がある。
例えばこんなnokogiriのエラー

```
Errno::EACCES: Permission denied @ dir_s_mkdir -
.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-18/2.3.0-static/nokogiri-1.10.9
An error occurred while installing nokogiri (1.10.9), and Bundler
cannot continue.
Make sure that `gem install nokogiri -v '1.10.9' --source
'https://rubygems.org/'` succeeds before bundling.
```

なるほどバージョンが合っていない。
以下でinstallしよう。

```
gem install nokogiri -v '1.10.9' --source
'https://rubygems.org/'
```

OK-正常であれば新規にプロジェクトができる。


### 3.Bundler

Gemfileの設定を行う
sqlite3 gemをdevelopment環境とtest環境 (7.1.1) だけで使う (つまりproduction環境では使わない) ように変更している点が重要。
後でHerokuで使うデータベースと競合する可能性を防ぐため

```
group :development, :test do
  gem 'sqlite3',      '1.3.13'
  gem 'byebug', '9.0.6', platform: :mri
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end
```

リストを置き換えたら以下のコマンドで bundle install

```
$ cd hello_app/
$ bundle install
```

※ちなみにgemでエラーになる時はその都度で調べる。

```
Errno::EACCES: Permission denied @ dir_s_mkdir -
```

が発生した時は下記で対応できた。
https://qiita.com/katsu105/items/9d71fa619cf5102c45d3
権限が違う時がある。


## 演習
- Rubyのバージョンは `ruby -v`でバージョンを確認できる。
- Railsのバージョンは`rails -v`でバージョンを確認できる。

### 4 Model-View-Controller (MVC)
「models」「views」「controllers」（MVC）の3つの要素がある

```
Railsアプリと通信する際、ブラウザは一般的にWebサーバーにリクエスト (request) を送信し、これはリクエストを処理する役割を担っているRailsのコントローラ (controller) に渡されます。コントローラは、場合によってはすぐにビュー (view) を生成してHTMLをブラウザに送り返します。動的なサイトでは、一般にコントローラは (ユーザーなどの) サイトの要素を表しており、データベースとの通信を担当しているRubyのオブジェクトであるモデル (model) と対話します。モデルを呼び出した後、コントローラは、ビューを描画し、完成したWebページをHTMLとしてブラウザに返します。
```

### 5 Hello, world!
Applicationコントローラにhelloを追加する。
`app/controllers/application_controller.rb`

def helloを追加してrender htmlで文字列を返す。

```
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    render html: "hello, world!"
  end
end
```

ルートルーティングを設定する
`config/routes.rb`

```
Rails.application.routes.draw do
  root 'application#hello'
end
```

これで先ほど設定した`hello, world!`が表示される。
`rails s`でサーバーを起動して確認。


演習
1.helloアクションを書き換え、「hello, world!」の代わりに「hola, mundo!」と表示
=> 文字列を`hola, mundo!`に変更する。
2.Railsでは「非ASCII文字」もサポートされています。
=>***「非ASCII文字」もサポート***
3.helloアクションを参考にして、２つ目のアクションgoodbyeを追加しましょう。このアクションは、「goodbye, world!」というテキストを表示します。リスト 1.9のルーティングを編集して、ルートルーティングの割り当て先をhelloアクションからgoodbyeアクションに変更する。

### 6 Gitによるバージョン管理
gitは試験範囲外、飛ばす

### 7 Bitbucket
Bitbucketは飛ばす
GitHubとBitbucketは、Gitリポジトリを扱う２つの著名なサービス

### まとめ

Ruby on Railsとは、Web開発のためのフレームワークであり、Rubyプログラミング言語によって記述されている。

Railsにはrailsという名前のコマンドラインコマンドがあり、rails newで新しいアプリケーションを生成したり、rails serverでローカルサーバーを実行したりできる。

コントローラのアクションを追加したり、ルートルーティングを変更したりするだけで「hello, world」アプリケーションを作成できる。