Railsチュートリアル　第一章



#クラウドIDE
クラウドIDEにはWeb開発に必要な三種の神器であるテキストエディタ、ファイルブラウザ、コマンドラインターミナルもしっかり組み込まれている。

AWS Cloud9ではRubyやRubyGems、Gitなど、Ruby on Railsの開発環境の構築に必要なソフトウェアがほとんど組み込まれている。

##IDEとは
がテキストエディタ、コンパイラ、デバッガを1つにまとめた「IDE」です。
IDEを日本語に訳すると、統合開発環境

###コンパイラとは
コンパイラは人間が書きやすい言葉や数式で書いたプログラムを、コンピューターが理解して実行できる機械語に翻訳してくれる編集者だといえるでしょう。

##コンパイルとは
人間がかいたプログラムをコンピューターがわかる言葉に書き換えること


###デバッガとは
デバッガとは、プログラミングの際に用いる開発ツールの一つで、プログラムの欠陥（バグ）を発見・修正するデバッグ（debug）作業を支援するソフトウェア。

#Yarn
JavaScriptソフトウェアの依存関係を管理するプログラム
JavaScriptのパッケージマネージャ


## JavaScriptのパッケージマネージャーとは
JavaScriptのフレームワークは、基本的に大量のプログラムで構成されています。その大量のプログラムを一まとめにしたものをパッケージと呼び、そのパッケージを管理するツールがパッケージマネージャーです。

Yarn公式
https://yarnpkg.com/

パッケージマネージャーを使うと、フレームワークのインストールなどを高速に、正確に行うことができます。現在、パッケージマネージャー無しでフレームワークをインストールすることは、ほとんど無いというほど普及しています。

#アセットパイプライン

![noro20160101.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492881/94252cc0-8de1-ae0a-defe-b53ac047c12c.gif)


Webブラウザ上で表示されるものは、HTMLとCSS、JavaScriptが紐付くことによって、描かれている

この仕組みがアセットパイプラインによって実現される

アセットパイプラインの仕組み（概要）
 
アセットパイプラインは、Ruby on Railsのアプリケーション内で使用したいJavaScriptやCSS、画像ファイルを「開発作業がしやすいようにファイルを分割してコーディングができるようにしつつ、最終的に一つのファイルに連結・圧縮する」仕組み


アセットパイプラインは、複数のディレクトリやファイルに分かれたassetsディレクトリ内のファイルをひとつに連結・圧縮する機能です。

![noro20160104.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492881/9e6b1e87-651f-1b22-4a1d-2859ce05d1e5.gif)

ひとつのファイルに連結・圧縮され、erbテンプレートからHTML化されたファイルとひも付いてからWebブラウザ画面上に表示されるようになります。この仕組みによって、Webアプリケーション内への効率的にアクセスすることもできます。

 

以上が、アセットパイプラインの役割です。



#Bundler
bundlerとは、gemのバージョンやgemの依存関係を管理してくれるgemです。bundlerを使うことで、複数人での開発やgemのバージョンが上がってもエラーを起こさずに開発できます。

Bundler公式

https://bundler.io/man/bundle.1.html

バージョン指定の仕方

https://blog.yuhiisk.com/archive/2017/04/24/specify-the-version-of-gemfile.html

https://qiita.com/lasershow/items/1a048d03ddaaba98171e

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

![mvc_schematic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492881/3da5c3a8-029d-e87a-e5ea-c9db99b2564b.png)


#Bitbucket
Bitbucket は、ソースコードおよび開発プロジェクト向けに、Web ベースのバージョン管理リポジトリホスティングサービスである。

## GitHubとBitbucket
GitHubとBitbucketは、Gitリポジトリを扱う２つの著名なサービスです。両者のサービスは非常に似通っています。どちらもGitリポジトリのホスティングと共同作業を行うことができ、リポジトリの表示や検索を行いやすくしてくれます。両者の重要な違いは、GitHubは「リポジトリを一般公開する場合は無料、公開しない場合は有料」なのに対し、Bitbucketは「共同作業者が一定数以下ならリポジトリを公開しなくても無料、共同作業者が一定数を超えると有料」である点です。なお、どちらも容量制限はありません。

　※現在はGitHubもプライベートリポジトリは無料

#git configで設定
インストールしたGitを使う前に、最初に1回だけ設定を行う必要があります。これはsystemセットアップと呼ばれ、コンピュータ1台につき1回だけ行います。


```
$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com
```


#Herokuのセットアップ

HerokuではPostgreSQLデータベースを使う。

HerokuではSQLiteがサポートされていない

以下のような書き方で
開発環境とテスト環境には、sqlite
本番環境では、PostgreSQLを指定する。

```ruby
group :production do
  gem 'pg', '0.20.0'
end
```

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


bundle installに特殊なフラグ「--without production」を追加すると
本番用のgem (この場合はpg gem) をローカルの環境にはインストールしないようにできる。

```
bundle intall --without production
```

## CoffeeScript
変換するとJavaScriptのソースコードに生まれ変わる、
JavaScriptよりも書くのが楽なプログラミング言語