Ruby on Railsチュートリアルを始めるあなたへ　〜僕がチュートリアルを終えて気づいたこと〜

#はじめに

こんにちは。

僕がRuby on Railsチュートリアルをひととおり終えて、
気づいたことを挙げていこうと思います。
自分の備忘録的な感じにしつつ、わかりやすく説明することを意識しています。

これからRuby on Railsを始めるあなたや、既に始めているあなたへ贈ります。
この記事が少しでもあなたの役に立てば幸いです。


#前提条件

[Ruby on Rails チュートリアル第4版](https://railstutorial.jp/)をこれから学ぶ、または既に学んでいる
実行環境：Cloud9
OS：Mac OS Sierra

#Cloud9環境でのRailsサーバー起動

僕の環境では、チュートリアルにあるサーバー起動方法だと
起動できませんでした。

起動できない場合は以下のコマンドを試してみてください。

```rails server -b 0.0.0.0 -p 8080```

これでサーバーが起動できると思います。


#サーバー起動時に「A server is already running. 」と出た場合

サーバーがうまく終了しなかったときに起こるエラーです。

##解決方法

以下のコマンドを実行します。

```ps ax```

すると、こんな感じのリストが出てくると思います。

```
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss+    0:00 /mnt/shared/sbin/micro-inetd 22 /mnt/shared/sbin/dropbear -i -s -m -R
    282 ?        Ss     0:00 /mnt/shared/sbin/dropbear -i -s -m -R
    283 ?        Rl     0:02 vfs-worker {"pingInterval":5000,"nodePath":"/mnt/shared/lib/node_modules","tmuxBin":"/mnt/shared/sbin/tmux","root":"/","
　　　　　　　　　　・
　　　　　　　　　　・
　　　　　　　　　　・
   2172 ?        Sl     0:04 puma 3.4.0 (tcp://0.0.0.0:8080) [sample_app]                                 
   2182 ?        Sl     0:00 puma: cluster worker 0: 2172 [sample_app]                                    
   2186 ?        Sl     0:00 puma: cluster worker 1: 2172 [sample_app]
　　　　　　　　　　・
　　　　　　　　　　・
　　　　　　　　　　・   
```

このリストで、COMMAND列の「puma」がある行に対応する、
PIDの列にある数字を覚えておきます。

この例だと、2172・2182・2186ですね。

そして、以下のコマンドを実行します。

```
kill 2172
kill 2182
kill 2186
```

これは例なので、あなたの環境によって数字は変わります。
これでサーバーは正常に起動するはずです。

#ウェブページのHTMLを表示するコマンドショートカット
ウェブページを作っているときに、ふとHTMLを表示したくなることってありませんか？

そんなときに使えるコマンドがこちら！

```option + command + I```

これ一発でページのHTMLやCSSスタイルが丸わかりです！


# rails generate

```rails generate controller MyPages home```

これを実行すると、

* app/controllers/my_pages_controller.rb
* app/views/my_pages/home.html.erb
* test/controllers/my_pages_controller_test.rb
* app/helpers/my_pages_helper.rb
* app/assets/javascript/my_pages.coffee
* app/assets/stylesheets/my_pages.scss

以上のファイルが生成されます。
my_pages_controller.rbがコントローラです。
home.html.erbがホームページです。

同様に、

```rails generate model Mymodel```

を実行するとモデルが生成されます。

# touchコマンド

チュートリアルを進めていると、新規ファイルを作る場面にたびたび遭遇します。
そんな時に便利なコマンドがあります。

```touch ファイルの場所/新規ファイル名```

こうすると新規ファイルを作成できます。

ちなみに、touchコマンドは本来ファイルやディレクトリのタイムスタンプを更新するコマンドです。

# Rubyには暗黙の戻り値がある
あなたが他のプログラミング言語（例：C、Javaなど）の経験者であれば、
関数の最後に「return」を書くことはご存じだと思います。

Rubyでは、returnを書かなくても関数内で最後に評価された式の値が自動的に戻り値になります。
ただし、if文などの条件分岐中でreturnしたい場合はreturnを書く必要があります。


#パーシャル

Railsにはパーシャルというものがあります。

##パーシャルとは

パーシャルとは、テンプレート(.html.erbファイル)のプログラムコードを分けることです。
そうすることで、同じコードを別のテンプレートで使いまわせます。

例えば、sample.html.erbにA、B2つのコードがあるとします。
help.html.erbで、sample.html.erbにあるBのコードを使いたいとします。

こういった場合、Bのコードをパーシャルにすると
sample.html.erb、help.html.erbでBのコードを使えます。

Bのコードを変更したくなった場合は、パーシャルのコードを変更するだけで
sample.html.erb、help.html.erbどちらにも対応できます。

これ以外にも、パーシャルは1つのテンプレートにあるコード量が
多くなりすぎないようにするという役割もあります。

#Sass
Sassは、スタイルシートを記述するための言語です。
拡張子は「.scss」です。
SassはCSSを拡張したもので、CSSには無い機能があります。

例えば、CSSでは同じコードを使いまわしできません。
ですが、Sassでは同じコードを使いまわせる機能があります。

#rails routesとパス

```rails routes ```

を実行すると、以下のようなリストが出てきます。

```
                 Prefix Verb   URI Pattern                             Controller#Action
    password_resets_new GET    /password_resets/new(.:format)          password_resets#new
   password_resets_edit GET    /password_resets/edit(.:format)         password_resets#edit
                   root GET    /                                       static_pages#home
                   help GET    /help(.:format)                         static_pages#help
                  about GET    /about(.:format)                        static_pages#about
                contact GET    /contact(.:format)                      static_pages#contact
                 signup GET    /signup(.:format)                       users#new
　　　　　　　　　　　　　　　　　　　　　　　　　・
　　　　　　　　　　　　　　　　　　　　　　　　　・
　　　　　　　　　　　　　　　　　　　　　　　　　・
```

このリストを例にします。
erbファイルに

<%= link_to "Home", root_path %>

と書いたとします。

ページに表示される「Home」のリンクをクリックすると、「URI Pattern」のURLに飛びます。
ここでは「/」です（いわゆるルートパス）。
そして、static_pages_controller.rbにあるhomeメソッドが実行されます。

rails routesを実行することで、設定されているパスの一覧を表示できます。
それぞれのパスがどのURLに飛ぶかがわかります。
その後、どのコントローラーのどのメソッドが実行されるかがわかります。

#ファイルの中身を検索

プログラムが大規模になってくると、
「これどのファイルに書いたっけ？」ということが増えてくると思います。

そこで便利なのがファイルの中身検索です。
Cloud9では、

```Command + Shift + F```

でファイルの中身を検索できます。

# おわりに

いかがでしたか。
他にも気づいたことがあれば、このページにどんどん追記していきます。
よろしくお願いします。