わたしがRailsチュートリアルで学んだこと【1章】

* 注意：プログラミング歴29日の初心者が書いています

* 注意：間違っていたら優しく教えてください（喜びます）



「Ruby on Rails チュートリアル実例を使ってRailsを学ぼう」
 https://railstutorial.jp/

素晴らしいチュートリアルに感謝します。


#1.2.1 開発環境

##開発環境ってなんですか
「開発」っていうのはつまりコードを書いて何か作るってことです。
「環境」っていうのはつまりコードを書くための準備環境のことです。（トートロジー）

『自分のパソコンで黒い画面とか、エディタ（コード書くアプリのこと）とか使って「開発」してもいいけど、あなたがどんなパソコンでどんなエディタ使ってるのかわからないから、「IDE」で統一してチュートリアルすすめようね』ということです。

##「IDE」ってなんですか
ネット上であなたのパソコンの代わりをやってくれます。
『チュートリアルを、みーんなおんなじパソコン使ってやろうね』ってことです。
「AWS Cloud9」っていう名前がついてます。アマゾンが、インターネット上であなたにパソコンを貸してくれています。無料なのでとりあえず借りときましょう。

「Cloud9」の初期登録はググるしかないです。わからなかったらとにかくググるしかないです。検索力も大事らしいです。

登録がおわったら、早速cloud9を開く。
「ファイルとかフォルダが表示された画面」と、「ファイルの中身を表示する画面」と「ターミナル」にわかれています。

* 「ファイルとかフォルダが表示された画面」:　あなたのパシコンでいうところの「エクスプローラ」とか「ファインダー」と同じです。

* 「ファイルの中身を表示する画面」: ファイルの中身を表示する画面です。

* 「ターミナル」：　あなたのパソコンでいうところの「黒い画面」と同じです。

##「ターミナル」ってなんですか
映画で悪いハッカーとかがいじってる「黒い画面」のことです。必ずしも黒である必要はないです。
昔のパソコンはマウスとかカーソル（矢印）がなかったから、文字を直接打ち込んでファイルを作ったりコピーしたりしていたらしい。（知らんけど）
その名残。
現代では、発展的な内容をするときは、黒い画面に文字を打ち込んでパソコンを操作します。
「Cloud9」では、色が黒くなくなって怖さが減っています。

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

インストールしないと使えません。
「Rails」は元々あなたが持っているものではありませんので、インターネットからダウンロードして使います。
ただし、ダウンロードしかたらといってどこかにわかりやすく表示されるわけではありません。
でも、チュートリアルの通りにすれば使えるようになっているらしいので、ひとまずよしとしてください。

#1.3 最初のアプリケーション

##### cd environment に
`$rails new` でプロジェクト作成

##「アプリケーション」ってなんですか
全部アプリです。パズドラもアプリ、ウェブサイトもアプリ、Webサービスもアプリ、ホームページもアプリ、これからは全部アプリと呼びます。

##「ディレクトリ」ってなんですか
「フォルダ」のことです。これからは「ディレクトリ」と呼びます。
「新しいフォルダを作る」したり、コピーしたり削除したり、今後はターミナルに「コマンド（命令）」を打ち込んで操作することを覚えます。（最初から全部暗記するのは無理なので徐々に覚えればいいと思います）

##「rails new」するってなんですか
「rails new」 するとディレクトリとファイルが自動でいっぱい出てきます。「Rails君」が勝手に全部作りました。「Rails君」がいなかったら、あなたが全部作るハメになっていました。

それと、「Rails君」がいつも決まった名前を各ディレクトリに付けてくれるおかげで、みんながわかりやすい名前になってます。わからないのは勉強を始めたばかりのあなただけです。

##1.3.1 「Bundler」「gem」ってなんですか

* 「gem」:　追加機能のことです

* 「bundler」: 追加機能をまとめて管理するやつのことです。

「rails new」 したときに「Rails君」が勝手にいろんな追加機能（gem）を入れてます。チュートリアルでは、いるものといらないものを整理するように言っています。

##1.3.2 rails serverってなんですか
これするとアプリケーションが動きます。（ちがうけどそうだと思います）

##1.3.3 Model-View-Controller (MVC)ってなんですか
アプリケーションを構成する３銃士です。

* 「Model」:　データベース担当です

* 「View」: 画面表示担当です

* 「Controller」： 指示担当です（例えば、ログイン画面にアクセスしたらちゃんとログイン画面が表示されるのはコントローラが指示してるからです。コントローラが間違っていたら違う画面が表示されます）


##1.4 Gitによるバージョン管理

「ヤベー！間違えたー！」　とか
「あ、これ３日前の状態まで戻さないと無理だわコレ」

っていうときに戻せるように、こまめにセーブデータを作っておくことです。
これを自分でやるとめちゃ大変なのでgitという仕組みで管理します。

##### gitの管理下に置く
`$git init `リポジトリの初期化
`$git add -A `新しいファイルをgit対象に
`$git commit -m "initialize repository" `コミットとコミットメッセージ


##「リポジトリ」「コミット」ってなんですか

* 「リポジトリ」:　セーブデータの保存場所です

* 「コミット」: セーブです

* 「git add -A」　：変更のあったファイルを「セーブ対象」として登録します

##1.4.3 Bitbucket

dropboxとかgoogleドライブとかと同じです。自分のパソコンだけじゃなくて、ネット上に保存しておくと、他の人も見れるので便利です。チームで開発するときにも便利です。
それと、あなたのパソコンが壊れたときでもデータは無事です。

##### bitbusketに新しいリモートリポジトリ作成
bitbusketのサイトから新しいリポジトリの作成を選択
`$git remote add origin 自分のアドレス@bitbucket.org:username/アプリ名.git `：gitにadd
`$push -u origin --all：bitbucket`リポジトリにプッシュ


##「ssh」とか「公開鍵」ってなんですか

* 「ssh」:　遠隔操作のことです。あなたのcloud9をbitbucketで遠隔操作でデータ保存したりします。

* 「公開鍵」: 遠隔操作するための鍵です。知らない人に遠隔操作されたら怖いので、普段は鍵がかかってます。


##「ブランチ」「マージ」ってなんですか

（master）ってなっているのが、一番大事な元セーブデータです。
元セーブデータをいじると、間違ったときに大変なので、別のセーブデータにコピーして、そっちで変更するなり作業します。

それで上手くいったら、元セーブデータと合体（マージ）させます。

##「プッシュ」ってなんですか

Bitbucketにデータを保存することです。アップロードみたいなものです。

##1.5 デプロイする
ネットに公開するっていうことです。
「Heroku」というサービスを使うとが簡単で便利なのでぜひ使いましょう。

##### ターミナルでheroku CLIにログイン
`$ heroku login --interactive `パスワード入力


ヘロクに登録して、Cloud9からログインして、プッシュすると、あら不思議。
もうあなたのアプリケーションは世界中から見ることができちゃいます。

##### herokuにアプリケーションを作成してプッシュ
`$ heroku create `：自動でherokuに新規アプリケーション作成
`$ git push heroku master`：herokuにプッシュ


#まとめ

##### cd environment に
`$rails new` でプロジェクト作成

##### gitの管理下に置く
`$git init `リポジトリの初期化
`$git add -A `新しいファイルをgit対象に
`$git commit -m "initialize repository" `コミットとコミットメッセージ

##### bitbusketに新しいリモートリポジトリ作成
bitbusketのサイトから新しいリポジトリの作成を選択
`$git remote add origin 自分のアドレス@bitbucket.org:username/アプリ名.git `：gitにadd
`$push -u origin --all：bitbucket`リポジトリにプッシュ

##### ターミナルでheroku CLIにログイン
`$ heroku login --interactive `パスワード入力

##### herokuにアプリケーションを作成してプッシュ
`$ heroku create `：自動でherokuに新規アプリケーション作成
`$ git push heroku master`：herokuにプッシュ