RubyとRailsの違い

今日はRubyとRuby on Railsにつまづいて苦しんだので、現時点の理解をまとめて整理していきます。


- RubyとRailsの違い
-

- Rubyはプログラム言語
- Ruby on Railsはフレームワーク

これが教科書通りの解説ですが、これだけ読んでもさっぱりです。
Railsは、PHPでいうとCakeだとかPythonならDiangoだよとか、そもそもフレームワーク触れたことない人にとってはその例えも謎です。

思い切った例え話をしてみようと思います。
多分に誤りが含まれているかと存じますが、ご指摘いただければ幸甚です。


- Ruby　＝　日本語
- Ruby on Rails　＝　ギャル語

たとえば、何か会話をしていて同意を返そうとした場合、

日本語「そうですね」
ギャル語「それな」

元の日本語に比べてギャル語の方が文字数が少なく、同意を返す処理をすることができました。
しかし、ギャル語は公の場で使ってしまうとあまりにも適切でない場合があります。
それを避けるために、省略形のギャル語を使って問題がない場所に自分がいるか確認してから使う必要が出てくるわけです。

- Ruby on Railsを使える状態にする
-

※以下、mac環境でRubyがインストール済みの前提での作業となります。



```ruby:qiita.rb
gem install rails
```
このコマンドで、Railsが使えるようになります。
ちなみに、「gem」というのが、Railsにおいて省略した記述で色々な機能が使えるようにしてくれる濃いメンツその１です。
※たくさんいます。
このプロジェクトにどのgemを使うかを整えてあげる必要があります。


```ruby:qiita.rb
gem install bundler
```
「bundler」というのを使って、gemパッケージを管理します。


```ruby:qiita.rb
$ mkdir ~~
$ cd ~~
```
mkdirして、プロジェクト用のディレクトリを作成、移動します。
※「~~」には付けたいディレクトリの名前をいれてください。


次のコマンドでGemfileを作ります

```ruby:qiita.rb
bundle init
```

すると、該当のディレクトリにGemfileが生成されます
Gemfileはたくさんいるgemを一覧のリストにしたようなファイルです。
※呼ぶために必要な電話帳のようなものなので、gemではありません。

```ruby:qiita.rb
Writing new Gemfile to /users/~/~~/Gemfile
```


作られたGemfileをテキストエディタで開きます。
※Gemfile.lockも同時に生成されているかと思いますが、Gemfileの方です。
<img width="587" alt="スクリーンショット 2018-09-14 17.02.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/148137/1141885a-2dea-eb74-f6c2-55ca7985f829.png">
上の画像でカーソルがいる位置の#をバックスペースで削除して、
「gem 'rails'〜〜」（後ろはインストールしたバージョンが表示されています）
がコメントアウトされていない＝有効になっている、状態にします。

<img width="616" alt="スクリーンショット 2018-09-14 17.02.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/148137/e1f300f5-3d6b-3483-78e1-91e6147bbb8c.png">
コメントアウトが外れて、「gem 'rails'〜」のテキストエディタが色を変えてくれました。
この状態で一度Gemfileを保存します。

次に、bundle installで上記の作業で確認したGemfileに書かれているgemパッケージを召喚します。
※「--path vendor/bundle」コマンドをつけて[bundle install]すると、プロジェクトフォルダ内に「vendor」→「bundle」というディレクトリが作られ、Gemfileに書かれているgemパッケージがインストールされます。

```ruby:qiita.rb
bundle install --path vendor/bundle
```

bundleをインストール中は、下のような画面が流れていれば成功です。

```ruby:qiita.rb
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching rake 12.3.1
Installing rake 12.3.1
Fetching concurrent-ruby 1.0.5
Installing concurrent-ruby 1.0.5
Fetching i18n 1.1.0
Installing i18n 1.1.0
Fetching minitest 5.11.3
〜〜（相当長かったので省略します）

```
インストールが完了したら念のため、bundleの内容を確認してみましょう。

```ruby:qiita.rb
$ bundle list

  * actioncable (5.2.1)
  * actionmailer (5.2.1)
  * actionpack (5.2.1)
  * actionview (5.2.1)
  * activejob (5.2.1)
  * activemodel (5.2.1)
  * activerecord (5.2.1)
  * activestorage (5.2.1)
  * activesupport (5.2.1)
  * arel (9.0.0)
  * builder (3.2.3)
  * bundler (1.16.4)
  * concurrent-ruby (1.0.5)
  * crass (1.0.4)
  * erubi (1.7.1)
  * globalid (0.4.1)
  * i18n (1.1.0)
  * loofah (2.2.2)
  * mail (2.7.0)
  * marcel (0.3.2)
  * method_source (0.9.0)
  * mimemagic (0.3.2)
  * mini_mime (1.0.1)
  * mini_portile2 (2.3.0)
  * minitest (5.11.3)
  * nio4r (2.3.1)
  * nokogiri (1.8.4)
  * rack (2.0.5)
  * rack-test (1.1.0)
  * rails (5.2.1)
  * rails-dom-testing (2.0.3)
  * rails-html-sanitizer (1.0.4)
  * railties (5.2.1)
  * rake (12.3.1)
  * sprockets (3.7.2)
  * sprockets-rails (3.2.1)
  * thor (0.20.0)
  * thread_safe (0.3.6)
  * tzinfo (1.2.5)
  * websocket-driver (0.7.0)
  * websocket-extensions (0.1.3)
```

これで、Railsを使う下準備が整いました。
ギャル語を使うにふさわしい、濃いメンツを集めるのは一苦労ですね。

これで

```ruby:qiita.rb
$ rails new ~~
$ rails s 
```
などの便利な省略コマンド（ギャル語）でPCとやりとりができます。
※「~~」は作成したいプロジェクト名をいれてください。

今回はこのあたりで失礼します。