rail tutorial 勉強メモ (1~7章)

# rail tutorial 勉強メモ (1~7章)

## はじめに

+ rails tutorial http://railstutorial.jp/chapters/log_in_log_out?version=4.2
Rails 4.2 (第3版)をやってます。

+ まだ半分... 長い!

+ 前提知識ほぼゼロ(プログラミング自体の経験はあり(組み込み系：(C++), Pythonなど)、Web開発は全く未経験)でスタート

+ いろいろ他人様のWebページを参照していますが、間違ってたら自分の責任です... （指摘していただけると、勉強になります）

+ クラウド環境(rails tutorial にそって、cloud9を使用)での作業

+ 作ったプロジェクトのディレクトリは'workspace/sample_app'とします。

+ 所要期間 : (断続的に)7,8日間(ただし、コマンド以外は全体像を俯瞰したかったのでコピペしながら進めた。本読んだ時間は除く)

## 用語

### rails関係
+ gem 
>多くのプログラミング言語と同様に、Ruby にも幅広いサードパーティのライブラリが提供されています。
それらのほとんどは “gem” という形式で公開されています。
> https://www.ruby-lang.org/ja/libraries/

+ Bundler...Rubyのライブラリ管理ツール

```text
GemfileにいれたいGemパッケージをかきかき
==> Gemfileを`bundle install`
==> 依存ファイルもろとも、バージョンがGemfile.lockに書き込まれる。

<== Gemfile.lockがない状態で、他の環境で後日`bundle install`
    ==> 依存ファイルのバージョンが違ってしまい、同一環境で開発ができない！ 
```

ということで、チーム間で同一の開発環境を簡単に構築できます。

> http://qiita.com/hisonl/items/162f70e612e8e96dba50
を参考にさせていただきました。

### アーキテクチャ関係

+ アーキテクチャ：システムを作り上げるための物理レベルの組み合わせ


+ REST アーキテクチャ　... Webアプリケーションの設計規約(というか、制約).「リソース」(Web上の情報)をどう扱うかに対する考え方。この制約を入れることで、ネットワークの性能劣化を防いだり、サーバーの負荷を軽減したり、メソッド数が限定されているので、プロトコルがシンプルになる。
    + RESTful ... RESTの制約に従ってRESTらしい振る舞いをするシステム。RESTfulなWebサービスみたいな言い方をするみたい。

本をあげるとしたら、
[Webを支える技術-HTTP、URI、HTML、そしてREST](https://www.amazon.co.jp/Webを支える技術-HTTP、URI、HTML、そしてREST-WEB-PRESS-plus/dp/4774142042/ref=sr_1_1?s=books&ie=UTF8&qid=1478169685&sr=1-1&keywords=web+技術)
が良さげ。

+ CRUD(create, read, update, delete)

| CRUD名 | 意味 | HTTPメソッド |
|:-----------:|:------------:|:------------:|
| Create | 作成 | POST(URIの決定権はサーバー側)/PUT(クライアント側) |
| Read | 読み込み | GET(情報がURIに付属する) |
| Update | 更新 | PUT |
| Delete | 削除 | DELETE |



+ MVC モデル

http://www.slideshare.net/mokemokechicken/iosandroidmodel
がわかりやすいと思います！

MVCに至る流れとしては、
[プロになるためのWeb技術入門」-――なぜ、あなたはWebシステムを開発できないのか](https://www.amazon.co.jp/「プロになるためのWeb技術入門」-――なぜ、あなたはWebシステムを開発できないのか-小森-裕介/dp/4774142352)
がいいと思います。


----

## 実行、確認

### github, heroku

+ gitについては、
[Gitポケットリファレンス-岡本-隆史](https://www.amazon.co.jp/Gitポケットリファレンス-岡本-隆史/dp/477415184X/ref=sr_1_1?s=books&ie=UTF8&qid=1478168454&sr=1-1&keywords=git+ポケット)
の付録のチートシートがかなりいいと思います。

origin ... レポジトリの場所(URL)の別名 (だいたいoriginで構わない)
master ... ブランチの名前

+ 初回

```bash
$ git init
$ git add -A
$ git commit -m "commit"
# あらかじめhttps://github.comに行って、ユーザー登録して、New Repositoryのボタンをポチッと押して、
# sample_appレポジトリを作っておきましょう。(忘れると、sshは？とか色々聞かれてハマリます
$ git remote add origin https://github.com/<username>/sample_app.git
# -uはレポジトリとブランチの対応付け(2回目以降は同じならば省略できる)
# gitに慣れないうちは、git pushの引数とかは省略せずに書く方が吉！
$ git push -u origin <master or branch-name>
# 本番環境にデプロイ (deploy: デプロイ) する場合
$ heroku login
$ heroku keys:add
$ heroku create 
#もしくは、heroku create <herokuのアプリ名>
$ git push <herokuのアプリ名 or heroku> master

```

+ 2回目以降

```bash
$ git add -A
$ git commit -m "commit"
$ git push -u origin <master or branch-name>
# 本番環境にデプロイ (deploy: デプロイ) する場合
$ git push <herokuのアプリ名 or heroku> master
```

---------

+ テスト環境(test),開発環境(development),本番環境(production)の3種類ある。
sample_app/config/environment内に、test/development/production.rbがあって、それぞれの環境に応じて、configをいじれるみたい。


| environment | サーバー実行 | push |
|:-----------:|:------------:|:------------:|
| development | `rails server -b $IP -p $PORT` | git push origin master |
| production | `heroku open` or push後のurlをクリック | git push heroku master |

----

## はまったところ
+ gitやbundle execなどは、workspace内ではなく、プロジェクトのディレクトリ内でコマンドを走らせましょう